At køre MySQL med optimale indstillinger for specifikke ressourcer hjælper med at håndtere større serverbelastninger og forhindrer servernedgang. Ved at eftertune Apache til at håndtere større belastninger er det generelt en fordel at tune MySQL til yderligere forbindelser.
Databaseindstilling er et omfattende emne, og denne vejledning dækker kun det grundlæggende i redigering af din MySQL-konfiguration. Store MySQL-databaser kan kræve en betydelig mængde hukommelse. Af denne grund anbefaler vi at bruge en Linode med høj hukommelse til sådanne opsætninger.
Bemærk Trinene i denne vejledning kræver root-privilegier. Sørg for at køre nedenstående trin som root eller med sudo
præfiks. For mere information om privilegier se vores bruger- og gruppervejledning.
Værktøjer, der kan hjælpe med at optimere MySQL
For at afgøre, om din MySQL-database skal omkonfigureres, er det bedst at se på, hvordan dine ressourcer klarer sig nu. Dette kan gøres med thetop-kommandoen eller med LinodeLongview-tjenesten. I det mindste bør du gøre dig bekendt med RAM- og CPU-brugen på din server, som kan opdages med disse kommandoer:
echo [PID] [MEM] [PATH] && ps aux | awk '{print $2, $4, $11}' | sort -k2rn | head -n 20
ps -eo pcpu,pid,user,args | sort -k 1 -r | head -20
MySQLTuner
MySQLTuner-scriptet vurderer din MySQL-installation og udsender derefter forslag til at øge din servers ydeevne og stabilitet.
-
Download MySQLTuner-scriptet:
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
-
Skift scripts tilladelser til at være eksekverbare:
chmod +x mysqltuner.pl
-
Kør
mysqltuner.pl
manuskript. Du vil blive bedt om at indtaste dit MySQL administrative login og password:./mysqltuner.pl
-
Scriptet vil returnere resultater svarende til outputtet nedenfor:
MySQLTuner tilbyder forslag til, hvordan man kan forbedre databasens ydeevne. Hvis du er forsigtig med at opdatere din database på egen hånd, er det at følge MySQLTuners forslag en af de sikrere måder at forbedre din databaseydeevne på.>> MySQLTuner 1.4.0 - Major Hayden <[email protected]> >> Bug reports, feature requests, and downloads at http://mysqltuner.com/ >> Run with '--help' for additional options and output filtering Please enter your MySQL administrative login: root Please enter your MySQL administrative password: [OK] Currently running supported MySQL version 5.5.41-0+wheezy1 [OK] Operating on 64-bit architecture -------- Storage Engine Statistics ------------------------------------------- [--] Status: +ARCHIVE +BLACKHOLE +CSV -FEDERATED +InnoDB +MRG_MYISAM [--] Data in InnoDB tables: 1M (Tables: 11) [--] Data in PERFORMANCE_SCHEMA tables: 0B (Tables: 17) [!!] Total fragmented tables: 11 -------- Security Recommendations ------------------------------------------- [OK] All database users have passwords assigned -------- Performance Metrics ------------------------------------------------- [--] Up for: 47s (113 q [2.404 qps], 42 conn, TX: 19K, RX: 7K) [--] Reads / Writes: 100% / 0% [--] Total buffers: 192.0M global + 2.7M per thread (151 max threads) [OK] Maximum possible memory usage: 597.8M (60% of installed RAM) [OK] Slow queries: 0% (0/113) [OK] Highest usage of available connections: 0% (1/151) [OK] Key buffer size / total MyISAM indexes: 16.0M/99.0K [!!] Query cache efficiency: 0.0% (0 cached / 71 selects) [OK] Query cache prunes per day: 0 [OK] Temporary tables created on disk: 25% (54 on disk / 213 total) [OK] Thread cache hit rate: 97% (1 created / 42 connections) [OK] Table cache hit rate: 24% (52 open / 215 opened) [OK] Open file limit used: 4% (48/1K) [OK] Table locks acquired immediately: 100% (62 immediate / 62 locks) [OK] InnoDB buffer pool / data size: 128.0M/1.2M [OK] InnoDB log waits: 0 -------- Recommendations ----------------------------------------------------- General recommendations: Run OPTIMIZE TABLE to defragment tables for better performance Enable the slow query log to troubleshoot bad queries Variables to adjust: query_cache_limit (> 1M, or use smaller result sets)
Justering af MySQL
Når du ændrer MySQL-konfigurationen, skal du være opmærksom på ændringerne og hvordan de påvirker din database. Selv når du følger instruktionerne fra programmer såsom MySQLTuner, er det bedst at have en vis forståelse af processen.
MySQL-konfigurationsfilen gemt på følgende placering:/etc/mysql/my.cnf
.
BemærkFør du opdaterer din MySQL-konfiguration, skal du oprette en sikkerhedskopi af
my.cnf
fil:cp /etc/mysql/my.cnf ~/my.cnf.backup
Bedste praksis foreslår, at du foretager små ændringer, én ad gangen, og derefter overvåger serveren efter hver ændring. Du bør genstarte MySQL efter hver ændring:
For distributioner, der bruger systemd:
systemctl restart mysqld
For distributioner med forskellige init-systemer:
service mysql restart
Når du ændrer værdier i
my.cnf
fil, skal du sikre dig, at den linje, du ændrer, ikke er blevet kommenteret ud med pundet (#
) præfiks.
nøglebuffer
Ændring af key_buffer
allokerer mere hukommelse til MySQL, hvilket kan fremskynde dine databaser væsentligt, forudsat at du har hukommelsen fri. key_buffer
størrelse bør generelt ikke fylde mere end 25 procent af systemhukommelsen, når du bruger MyISAM-tabelmotoren, og op til 70 procent for InnoDB. Hvis værdien er sat for højt, er ressourcer spildt.
Ifølge MySQL's dokumentation anbefales en indstilling på 64M for servere med 256MB (eller mere) RAM med mange tabeller. Servere med 128 MB RAM og færre tabeller kan indstilles til 16M, standardværdien. Websites med endnu færre ressourcer og tabeller kan få denne værdi sat lavere.
max_allowed_packet
Denne parameter lader dig indstille den maksimale størrelse af en pakke, der kan sendes. En pakke er en enkelt SQL-tilstand, en enkelt række, der sendes til en klient, eller en log, der sendes fra en kildedatabase til en replika. Hvis du ved, at din MySQL-server kommer til at behandle store pakker, er det bedst at øge dette til størrelsen på din største pakke. Hvis denne værdi er sat for lille, vil du modtage en fejl i din fejllog.
thread_stack
Denne værdi indeholder stakstørrelsen for hver tråd. MySQL betragter standardværdien af thread_stack
variabel tilstrækkelig til normal brug; dog skulle der være en fejl relateret til thread_stack
være logget, kan dette øges.
thread_cache_size
Hvis thread_cache_size
er "slået fra" (sat til 0), så skal enhver ny forbindelse, der oprettes, have en ny tråd oprettet til den. Når forbindelserne frigøres, ødelægges gevindet. Ellers angiver denne værdi antallet af ubrugte tråde, der skal gemmes i en cache, indtil de skal bruges til en forbindelse. Generelt har denne indstilling ringe indflydelse på ydeevnen, medmindre du modtager hundredvis af forbindelser i minuttet, på hvilket tidspunkt denne værdi bør øges, så størstedelen af forbindelserne kan foretages på cachelagrede tråde.
max_connections
Denne parameter indstiller den maksimale mængde samtidig forbindelser. Det er bedst at overveje det maksimale antal forbindelser, du har haft tidligere, før du indstiller dette tal, så du har en buffer mellem det øverste tal og max_connections
værdi. Bemærk, dette angiver ikke det maksimale antal brugere på din hjemmeside på én gang; snarere viser det det maksimale antal brugere, der foretager anmodninger samtidig.
tabel_cache
Denne værdi skal holdes højere end dine open_tables
værdi. For at bestemme denne værdi skal du bruge:
| |
Flere oplysninger
Du ønsker måske at konsultere følgende ressourcer for yderligere oplysninger om dette emne. Selvom disse leveres i håb om, at de vil være nyttige, bemærk venligst, at vi ikke kan stå inde for nøjagtigheden eller aktualiteten af eksternt hostede materialer.
- MySQL-dokumentationsbibliotek
- MySQL Tuning Server Parameters
- MySQLTuner