sql >> Databasteknik >  >> RDS >> Mysql

Hur man optimerar MySQL-prestanda med MySQLTuner

Att köra MySQL med optimala inställningar för specifika resurser hjälper till att hantera större serverbelastningar och förhindrar servernedgång. I allmänhet är det fördelaktigt att efterjustera Apache för att hantera större belastningar, att ställa in MySQL till ytterligare anslutningar.

Databasjustering är ett omfattande ämne, och den här guiden täcker bara grunderna för att redigera din MySQL-konfiguration. Stora MySQL-databaser kan kräva en avsevärd mängd minne. Av denna anledning rekommenderar vi att du använder en Linode med högt minne för sådana inställningar.

Obs Stegen i den här guiden kräver root-privilegier. Se till att köra stegen nedan som root eller med sudo prefix. För mer information om privilegier, se vår guide för användare och grupper.

Verktyg som kan hjälpa till att optimera MySQL

För att avgöra om din MySQL-databas behöver konfigureras om är det bäst att titta på hur dina resurser fungerar nu. Detta kan göras med kommandot thetop eller med tjänsten LinodeLongview. Åtminstone bör du bekanta dig med RAM- och CPU-användningen på din server, vilket kan upptäckas med dessa kommandon:

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-skriptet utvärderar din MySQL-installation och matar sedan ut förslag för att öka din servers prestanda och stabilitet.

  1. Ladda ner MySQLTuner-skriptet:

     wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
    
  2. Ändra skriptbehörigheterna så att de är körbara:

     chmod +x mysqltuner.pl
    
  3. Kör mysqltuner.pl manus. Du kommer att bli ombedd att ange din MySQL administrativa inloggning och lösenord:

     ./mysqltuner.pl
    
  4. Skriptet kommer att returnera resultat som liknar utdata nedan:

    >>  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 ger förslag på hur man kan förbättra databasens prestanda. Om du är försiktig med att uppdatera din databas på egen hand, är att följa MySQLTuners förslag ett av de säkrare sätten att förbättra din databasprestanda.

Justera MySQL

När du ändrar MySQL-konfigurationen, var uppmärksam på ändringarna och hur de påverkar din databas. Även när du följer instruktionerna för program som MySQLTuner, är det bäst att ha en viss förståelse för processen.

MySQL-konfigurationsfilen lagrad på följande plats:/etc/mysql/my.cnf .

Obs

Innan du uppdaterar din MySQL-konfiguration, skapa en säkerhetskopia av my.cnf fil:

cp /etc/mysql/my.cnf ~/my.cnf.backup

Bästa praxis föreslår att du gör små ändringar, en i taget, och sedan övervakar servern efter varje ändring. Du bör starta om MySQL efter varje ändring:

För distributioner som använder systemd:

systemctl restart mysqld

För distributioner med olika init-system:

service mysql restart

När du ändrar värden i my.cnf fil, se till att raden du ändrar inte har kommenterats ut med pundet (# ) prefix.

nyckelbuffert

Ändra key_buffer allokerar mer minne till MySQL, vilket kan påskynda dina databaser avsevärt, förutsatt att du har minnet ledigt. key_buffer storlek bör i allmänhet inte ta upp mer än 25 procent av systemminnet när du använder MyISAM-tabellmotorn och upp till 70 procent för InnoDB. Om värdet sätts för högt går resurserna till spillo.

Enligt MySQL:s dokumentation, för servrar med 256MB (eller mer) RAM med många tabeller, rekommenderas en inställning på 64M. Servrar med 128 MB RAM och färre tabeller kan ställas in på 16M, standardvärdet. Webbplatser med ännu färre resurser och tabeller kan ha detta värde lägre.

max_allowed_packet

Den här parametern låter dig ställa in den maximala storleken på ett paket som kan skickas. Ett paket är ett enda SQL-tillstånd, en enda rad som skickas till en klient eller en logg som skickas från en källdatabas till en replik. Om du vet att din MySQL-server kommer att bearbeta stora paket, är det bäst att öka detta till storleken på ditt största paket. Skulle detta värde vara för litet, skulle du få ett felmeddelande i din fellogg.

trådstack

Detta värde innehåller stackstorleken för varje tråd. MySQL tar hänsyn till standardvärdet för thread_stack variabel tillräcklig för normal användning; bör dock ett fel relatera till thread_stack loggas kan detta ökas.

thread_cache_size

Om thread_cache_size är "avstängd" (inställd på 0), då behöver en ny anslutning skapas för den. När anslutningarna lossnar förstörs gängan. Annars ställer detta värde in antalet oanvända trådar som ska lagras i en cache tills de behöver användas för en anslutning. I allmänhet har den här inställningen liten inverkan på prestanda, såvida du inte får hundratals anslutningar per minut, då bör detta värde ökas så att majoriteten av anslutningarna kan göras på cachade trådar.

max_connections

Den här parametern ställer in den maximala mängden samtidig anslutningar. Det är bäst att överväga det maximala antalet anslutningar du har haft tidigare innan du ställer in detta nummer, så du har en buffert mellan det övre numret och max_connections värde. Observera att detta inte indikerar det maximala antalet användare på din webbplats på en gång; snarare visar den det maximala antalet användare som gör förfrågningar samtidigt.

tabellcache

Detta värde bör hållas högre än dina open_tables värde. För att bestämma detta värde använd:

1
SHOW STATUS LIKE 'open%';

Mer information

Du kanske vill konsultera följande resurser för ytterligare information om detta ämne. Även om dessa tillhandahålls i hopp om att de kommer att vara användbara, vänligen observera att vi inte kan garantera noggrannheten eller aktualiteten hos externt värdmaterial.

  • MySQL-dokumentationsbibliotek
  • MySQL Tuning Server Parametrar
  • MySQLTuner

  1. Vad är MySQL:En översikt

  2. Aktivera fjärransluten MySQL-anslutning:FEL 1045 (28000):Åtkomst nekad för användaren

  3. Hur man skapar en användare med PSQL

  4. Hur man testar min ad-hoc SQL med parametrar i Postgres frågefönster