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.
-
Scarica lo script MySQLTuner:
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
-
Modifica le autorizzazioni degli script affinché siano eseguibili:
chmod +x mysqltuner.pl
-
Esegui
mysqltuner.pl
sceneggiatura. Ti verrà chiesto di inserire il tuo login amministrativo e password MySQL:./mysqltuner.pl
-
Lo script restituirà risultati simili all'output seguente:
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.>> 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)
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
.
NotaPrima 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:
| |
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