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

Come ottimizzare le prestazioni di MySQL utilizzando MySQLTuner

L'esecuzione di MySQL con impostazioni ottimali per risorse specifiche aiuta a gestire carichi di server più grandi e previene il rallentamento del server. In genere, dopo aver ottimizzato Apache per gestire carichi maggiori, è utile ottimizzare MySQL per connessioni aggiuntive.

L'ottimizzazione del database è un argomento ampio e questa guida copre solo le basi della modifica della configurazione di MySQL. Database MySQL di grandi dimensioni possono richiedere una notevole quantità di memoria. Per questo motivo, consigliamo di utilizzare un Linode ad alta memoria per tali configurazioni.

Nota I passaggi in questa guida richiedono i privilegi di root. Assicurati di eseguire i passaggi seguenti come root o con il sudo prefisso. Per ulteriori informazioni sui privilegi, consulta la nostra guida Utenti e gruppi.

Strumenti che possono aiutare a ottimizzare MySQL

Per determinare se il tuo database MySQL deve essere riconfigurato, è meglio guardare come stanno andando le tue risorse ora. Questo può essere fatto con il comando thetop o con il servizio LinodeLongview. Per lo meno, dovresti familiarizzare con l'utilizzo della RAM e della CPU del tuo server, che può essere scoperto con questi comandi:

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

Lo script MySQLTuner valuta l'installazione di MySQL e quindi fornisce suggerimenti per aumentare le prestazioni e la stabilità del server.

  1. Scarica lo script MySQLTuner:

     wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
    
  2. Modifica le autorizzazioni degli script affinché siano eseguibili:

     chmod +x mysqltuner.pl
    
  3. Esegui mysqltuner.pl sceneggiatura. Ti verrà chiesto di inserire il tuo login amministrativo e password MySQL:

     ./mysqltuner.pl
    
  4. Lo script restituirà risultati simili all'output seguente:

    >>  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 offre suggerimenti su come migliorare le prestazioni del database. Se sei cauto nell'aggiornare il tuo database da solo, seguire i suggerimenti di MySQLTuner è uno dei modi più sicuri per migliorare le prestazioni del tuo database.

Ottimizzazione di MySQL

Quando modifichi la configurazione di MySQL, fai attenzione alle modifiche e al modo in cui influiscono sul tuo database. Anche quando si seguono le istruzioni di programmi come MySQL Tuner, è meglio avere una certa comprensione del processo.

Il file di configurazione MySQL archiviato nel seguente percorso:/etc/mysql/my.cnf .

Nota

Prima di aggiornare la tua configurazione MySQL, crea un backup di my.cnf file:

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

La procedura consigliata suggerisce di apportare piccole modifiche, una alla volta, e quindi di monitorare il server dopo ogni modifica. Dovresti riavviare MySQL dopo ogni modifica:

Per le distribuzioni che utilizzano systemd:

systemctl restart mysqld

Per le distribuzioni con diversi sistemi di inizializzazione:

service mysql restart

Quando si cambiano i valori in my.cnf file, assicurati che la riga che stai modificando non sia stata commentata con il cancelletto (# ) prefisso.

key_buffer

Modifica del key_buffer alloca più memoria a MySQL, che può accelerare notevolmente i tuoi database, supponendo che tu abbia la memoria libera. Il key_buffer le dimensioni non dovrebbero generalmente occupare più del 25% della memoria di sistema quando si utilizza il motore di tabella MyISAM e fino al 70% per InnoDB. Se il valore è impostato su un valore troppo alto, le risorse vengono sprecate.

Secondo la documentazione di MySQL, per i server con 256 MB (o più) di RAM con molte tabelle, si consiglia un'impostazione di 64 M. I server con 128 MB di RAM e un numero inferiore di tabelle possono essere impostati su 16 M, il valore predefinito. I siti Web con ancora meno risorse e tabelle possono avere questo valore impostato su un valore inferiore.

max_allowed_packet

Questo parametro consente di impostare la dimensione massima di un pacchetto inviabile. Un pacchetto è un singolo stato SQL, una singola riga inviata a un client o un registro inviato da un database di origine a una replica. Se sai che il tuo server MySQL elaborerà pacchetti di grandi dimensioni, è meglio aumentarlo alla dimensione del tuo pacchetto più grande. Se questo valore è impostato su un valore troppo basso, riceverai un errore nel registro degli errori.

stack_thread

Questo valore contiene la dimensione dello stack per ogni thread. MySQL considera il valore predefinito di thread_stack variabile sufficiente per l'uso normale; tuttavia, dovrebbe esserci un errore relativo al thread_stack essere registrato, questo può essere aumentato.

thread_cache_size

Se thread_cache_size è "disattivato" (impostato su 0), quindi qualsiasi nuova connessione effettuata necessita di un nuovo thread creato per essa. Quando le connessioni si disimpegnano, il thread viene distrutto. In caso contrario, questo valore imposta il numero di thread inutilizzati da archiviare in una cache finché non devono essere utilizzati per una connessione. In genere questa impostazione ha scarso effetto sulle prestazioni, a meno che tu non riceva centinaia di connessioni al minuto, momento in cui questo valore dovrebbe essere aumentato in modo che la maggior parte delle connessioni possa essere effettuata su thread memorizzati nella cache.

max_connections

Questo parametro imposta la quantità massima di simultanea connessioni. È meglio considerare la quantità massima di connessioni che hai avuto in passato prima di impostare questo numero, quindi avrai un buffer tra quel numero superiore e il max_connections valore. Nota, questo non indica il numero massimo di utenti sul tuo sito web in una sola volta; piuttosto mostra il numero massimo di utenti che effettuano richieste contemporaneamente.

table_cache

Questo valore dovrebbe essere mantenuto più alto del tuo open_tables valore. Per determinare questo valore utilizzare:

1
SHOW STATUS LIKE 'open%';

Maggiori informazioni

Si consiglia di consultare le seguenti risorse per ulteriori informazioni su questo argomento. Sebbene questi siano forniti nella speranza che possano essere utili, tieni presente che non possiamo garantire l'accuratezza o la tempestività dei materiali ospitati esternamente.

  • Libreria di documentazione MySQL
  • Parametri MySQL Tuning Server
  • Tuner MySQL