sql >> Databáze >  >> RDS >> Mysql

Jak optimalizovat výkon MySQL pomocí MySQLTuner

Provozování MySQL s optimálním nastavením pro konkrétní zdroje pomáhá zvládat větší zatížení serveru a zabraňuje zpomalení serveru. Obecně platí, že po vyladění Apache pro zvládnutí větších zátěží je výhodné vyladit MySQL na další připojení.

<šablona x-if=visible><šablona x-if=$isMobile()>

Ladění databáze je rozsáhlé téma a tato příručka pokrývá pouze základy úpravy vaší konfigurace MySQL. Velké databáze MySQL mohou vyžadovat značné množství paměti. Z tohoto důvodu pro taková nastavení doporučujeme použít aHigh Memory Linode.

Poznámka Kroky v této příručce vyžadují oprávnění root. Níže uvedené kroky spusťte jako root nebo pomocí sudo předpona. Další informace o oprávněních naleznete v naší příručce Uživatelé a skupiny.

Nástroje, které mohou pomoci optimalizovat MySQL

Chcete-li zjistit, zda je třeba vaši databázi MySQL překonfigurovat, je nejlepší se podívat na to, jak si nyní vedou vaše zdroje. To lze provést pomocí příkazu thetop nebo pomocí služby LinodeLongview. Přinejmenším byste se měli seznámit s využitím paměti RAM a CPU vašeho serveru, které lze zjistit pomocí těchto příkazů:

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

Skript MySQLTuner vyhodnotí vaši instalaci MySQL a poté vytvoří návrhy pro zvýšení výkonu a stability vašeho serveru.

  1. Stáhněte si skript MySQLTuner:

     wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
    
  2. Změňte oprávnění skriptů tak, aby byly spustitelné:

     chmod +x mysqltuner.pl
    
  3. Spusťte mysqltuner.pl skript. Budete vyzváni k zadání přihlašovacího jména a hesla správce MySQL:

     ./mysqltuner.pl
    
  4. Skript vrátí výsledky podobné výstupu níže:

    >>  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 nabízí návrhy, jak zlepšit výkon databáze. Pokud jste opatrní při aktualizaci databáze sami, následování návrhů MySQLTuner je jedním z bezpečnějších způsobů, jak zlepšit výkon databáze.

Ladění MySQL

Při změně konfigurace MySQL dávejte pozor na změny a na to, jak ovlivňují vaši databázi. I když se budete řídit pokyny programů, jako je MySQLTuner, je nejlepší tomuto procesu porozumět.

Konfigurační soubor MySQL uložený v následujícím umístění:/etc/mysql/my.cnf .

Poznámka

Před aktualizací konfigurace MySQL vytvořte zálohu souboru my.cnf soubor:

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

Doporučený postup doporučuje provést malé změny, jednu po druhé, a poté po každé změně sledovat server. Po každé změně byste měli restartovat MySQL:

Pro distribuce používající systemd:

systemctl restart mysqld

Pro distribuce s různými systémy init:

service mysql restart

Při změně hodnot v souboru my.cnf souboru, ujistěte se, že řádek, který měníte, nebyl zakomentován librou (# ) prefix.

key_buffer

Změna key_buffer alokuje více paměti MySQL, což může podstatně zrychlit vaše databáze, za předpokladu, že máte volnou paměť. key_buffer Velikost by obecně neměla zabírat více než 25 procent systémové paměti při použití tabulkového enginu MyISAM a až 70 procent v případě InnoDB. Pokud je hodnota nastavena příliš vysoko, dochází k plýtvání zdroji.

Podle dokumentace MySQL se pro servery s 256 MB (nebo více) RAM s mnoha tabulkami doporučuje nastavení 64 MB. Servery se 128 MB RAM a méně tabulkami lze nastavit na 16 M, což je výchozí hodnota. Weby s ještě menším počtem zdrojů a tabulek mohou mít tuto hodnotu nastavenou níže.

max_allowed_packet

Tento parametr umožňuje nastavit maximální velikost odesílatelného paketu. Paket je jeden stav SQL, jeden řádek odeslaný klientovi nebo protokol odeslaný ze zdrojové databáze do repliky. Pokud víte, že váš server MySQL bude zpracovávat velké pakety, je nejlepší toto zvýšit na velikost vašeho největšího paketu. Pokud je tato hodnota nastavena příliš malá, zobrazí se chyba v protokolu chyb.

thread_stack

Tato hodnota obsahuje velikost zásobníku pro každé vlákno. MySQL bere v úvahu výchozí hodnotu thread_stack variabilní dostačující pro běžné použití; měla by však nastat chyba týkající se thread_stack být přihlášen, toto lze zvýšit.

thread_cache_size

Pokud thread_cache_size je „vypnuto“ (nastaveno na 0), pak každé nově vytvářené připojení vyžaduje vytvoření nového vlákna. Když se spoje rozpojí, závit se zničí. V opačném případě tato hodnota nastavuje počet nepoužívaných vláken, která se mají uložit do mezipaměti, dokud je nebude nutné použít pro připojení. Obecně má toto nastavení malý vliv na výkon, pokud nepřijímáte stovky připojení za minutu, kdy by měla být tato hodnota zvýšena, aby bylo možné většinu připojení vytvořit na vláknech uložených v mezipaměti.

max_connections

Tento parametr nastavuje maximální množství souběžných spojení. Před nastavením tohoto čísla je nejlepší zvážit maximální počet připojení, která jste měli v minulosti, takže mezi tímto horním číslem a hodnotou max_connections budete mít vyrovnávací paměť. hodnota. Upozorňujeme, že toto neoznačuje maximální počet uživatelů na vašem webu najednou; spíše zobrazuje maximální počet uživatelů, kteří požadují současně.

table_cache

Tato hodnota by měla být vyšší než vaše open_tables hodnota. K určení této hodnoty použijte:

1
SHOW STATUS LIKE 'open%';

Další informace

Další informace o tomto tématu můžete získat v následujících zdrojích. Přestože jsou poskytovány v naději, že budou užitečné, vezměte prosím na vědomí, že nemůžeme ručit za přesnost nebo aktuálnost externě hostovaných materiálů.

  • Knihovna dokumentace MySQL
  • Nastavení parametrů serveru MySQL
  • MySQLTuner

  1. Oracle 12:Připojit se na seznam oddělený čárkami?

  2. Oracle Database 21c

  3. Seskupený a neshlukovaný index:7 hlavních vysvětlených bodů

  4. mysqli or die, musí to zemřít?