sql >> Database teknologi >  >> RDS >> Mysql

Sådan optimerer du MySQL-ydelse ved hjælp af MySQLTuner

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.

  1. Download MySQLTuner-scriptet:

     wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
    
  2. Skift scripts tilladelser til at være eksekverbare:

     chmod +x mysqltuner.pl
    
  3. Kør mysqltuner.pl manuskript. Du vil blive bedt om at indtaste dit MySQL administrative login og password:

     ./mysqltuner.pl
    
  4. Scriptet vil returnere resultater svarende til outputtet nedenfor:

    >>  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)
    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å.

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ærk

Fø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:

1
SHOW STATUS LIKE 'open%';

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

  1. Oprettelse af en PostgreSQL-database

  2. lagring af data i en database ved hjælp af rediger tekst og knap

  3. Oracle Database BLOB til InputStream i Java?

  4. At få en dynamisk genereret pivot-tabel til en Temp-tabel