sql >> Database >  >> RDS >> Mysql

MySQL-prestaties optimaliseren met MySQLTuner

Door MySQL uit te voeren met optimale instellingen voor specifieke bronnen, kunnen grotere serverbelastingen worden verwerkt en wordt serververtraging voorkomen. Over het algemeen is het, na het afstemmen van Apache om grotere belastingen te verwerken, gunstig om MySQL af te stemmen op extra verbindingen.

Het afstemmen van databases is een uitgebreid onderwerp en deze handleiding behandelt alleen de basisprincipes van het bewerken van uw MySQL-configuratie. Grote MySQL-databases kunnen een aanzienlijke hoeveelheid geheugen vergen. Om deze reden raden we aan om een ​​High Memory Linode te gebruiken voor dergelijke opstellingen.

Opmerking Voor de stappen in deze handleiding zijn rootrechten vereist. Zorg ervoor dat u de onderstaande stappen uitvoert als root of met de sudo voorvoegsel. Voor meer informatie over privileges, zie onze handleiding voor gebruikers en groepen.

Tools die kunnen helpen bij het optimaliseren van MySQL

Om te bepalen of uw MySQL-database opnieuw moet worden geconfigureerd, kunt u het beste kijken naar hoe uw resources nu presteren. Dit kan met de opdracht thetop of met de LinodeLongview-service. U dient zich op zijn minst vertrouwd te maken met het RAM- en CPU-gebruik van uw server, die u met deze opdrachten kunt ontdekken:

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

Het MySQLTuner-script beoordeelt uw MySQL-installatie en geeft vervolgens suggesties om de prestaties en stabiliteit van uw server te verbeteren.

  1. Download het MySQLTuner-script:

     wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
    
  2. Wijzig de machtigingen van de scripts om uitvoerbaar te zijn:

     chmod +x mysqltuner.pl
    
  3. Voer de mysqltuner.pl . uit script. U wordt gevraagd om uw MySQL-beheerderslogin en wachtwoord in te voeren:

     ./mysqltuner.pl
    
  4. Het script retourneert resultaten die vergelijkbaar zijn met de onderstaande uitvoer:

    >>  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 biedt suggesties voor het verbeteren van de prestaties van de database. Als u op uw hoede bent om uw database zelf bij te werken, is het opvolgen van de suggesties van MySQLTuner een van de veiligere manieren om uw databaseprestaties te verbeteren.

MySQL afstemmen

Let bij het wijzigen van de MySQL-configuratie op de wijzigingen en hoe deze uw database beïnvloeden. Zelfs als je de instructies van programma's zoals MySQLTuner volgt, is het het beste om enig begrip van het proces te hebben.

Het MySQL-configuratiebestand opgeslagen op de volgende locatie:/etc/mysql/my.cnf .

Opmerking

Maak voordat u uw MySQL-configuratie bijwerkt een back-up van de my.cnf bestand:

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

Best practice suggereert dat u kleine wijzigingen één voor één aanbrengt en vervolgens de server na elke wijziging controleert. U dient MySQL na elke wijziging opnieuw te starten:

Voor distributies die systemd gebruiken:

systemctl restart mysqld

Voor distributies met verschillende init-systemen:

service mysql restart

Bij het wijzigen van waarden in de my.cnf bestand, zorg er dan voor dat de regel die u wijzigt niet is gemarkeerd met het hekje (# ) voorvoegsel.

key_buffer

De key_buffer wijzigen wijst meer geheugen toe aan MySQL, wat uw databases aanzienlijk kan versnellen, ervan uitgaande dat u het geheugen vrij hebt. De key_buffer grootte mag over het algemeen niet meer dan 25 procent van het systeemgeheugen in beslag nemen bij gebruik van de MyISAM-tabelengine en tot 70 procent voor InnoDB. Als de waarde te hoog is ingesteld, worden middelen verspild.

Volgens de documentatie van MySQL wordt voor servers met 256 MB (of meer) RAM met veel tabellen een instelling van 64M aanbevolen. Servers met 128 MB RAM en minder tabellen kunnen worden ingesteld op 16 miljoen, de standaardwaarde. Websites met nog minder bronnen en tabellen kunnen deze waarde lager instellen.

max_allowed_packet

Met deze parameter kunt u de maximale grootte van een verzendbaar pakket instellen. Een pakket is een enkele SQL-status, een enkele rij die naar een client wordt verzonden of een logboek dat van een brondatabase naar een replica wordt verzonden. Als u weet dat uw MySQL-server grote pakketten gaat verwerken, kunt u dit het beste vergroten tot de grootte van uw grootste pakket. Als deze waarde te klein is ingesteld, krijgt u een foutmelding in uw foutenlogboek.

thread_stack

Deze waarde bevat de stapelgrootte voor elke thread. MySQL houdt rekening met de standaardwaarde van de thread_stack variabel voldoende voor normaal gebruik; mocht er echter een fout optreden met betrekking tot de thread_stack gelogd zijn, kan dit worden verhoogd.

thread_cache_size

Als thread_cache_size is "uitgeschakeld" (ingesteld op 0), dan moet voor elke nieuwe verbinding die wordt gemaakt een nieuwe thread worden gemaakt. Wanneer de verbindingen losraken, wordt de schroefdraad vernietigd. Anders stelt deze waarde het aantal ongebruikte threads in dat in een cache moet worden opgeslagen totdat ze voor een verbinding moeten worden gebruikt. Over het algemeen heeft deze instelling weinig invloed op de prestaties, tenzij u honderden verbindingen per minuut ontvangt. Op dat moment moet deze waarde worden verhoogd, zodat de meeste verbindingen kunnen worden gemaakt op gecachte threads.

max_connections

Deze parameter stelt het maximale aantal gelijktijdige . in verbindingen. U kunt het beste rekening houden met het maximale aantal verbindingen dat u in het verleden heeft gehad voordat u dit aantal instelt, zodat u een buffer hebt tussen dat bovenste aantal en de max_connections waarde. Let op, dit geeft niet het maximale aantal gebruikers aan in één keer op uw website; het toont eerder het maximale aantal gebruikers dat verzoeken doet gelijktijdig.

table_cache

Deze waarde moet hoger worden gehouden dan uw open_tables waarde. Gebruik om deze waarde te bepalen:

1
SHOW STATUS LIKE 'open%';

Meer informatie

U kunt de volgende bronnen raadplegen voor aanvullende informatie over dit onderwerp. Hoewel deze worden verstrekt in de hoop dat ze nuttig zullen zijn, houd er rekening mee dat we niet kunnen instaan ​​voor de nauwkeurigheid of tijdigheid van extern gehost materiaal.

  • MySQL-documentatiebibliotheek
  • MySQL Tuning Server-parameters
  • MySQLTuner

  1. Hoe kan ik de standaardwaarde van een tijdstempelkolom instellen op de huidige tijdstempel met Laravel-migraties?

  2. Beste opties voor databasecontrole die beschikbaar zijn voor uw bedrijf

  3. Mysql_*-functies vervangen door PDO en voorbereide instructies

  4. Wat is de database, waarom database?