Migliorare le prestazioni di MySQL, regolando alcuni parametri

MySQL, come la maggior parte dei gestori di database, può facilmente modificare i parametri che le dimensioni della memoria di controllo impegnati in alcuni compiti, utilizzo delle risorse, limiti la concorrenza, ecc

Regolando opportunamente questi parametri si possono ottenere miglioramenti di performance molti, specialmente se il server / s del database non si tratta di risorse, e se l'ottimizzazione SQL non può essere migliorata di più.

Ho recentemente fatto alcune impostazioni di base in un database MySQL, quindi colgo l'occasione per spiegare alcuni dei processi che ho seguito per coloro che cercano un modo semplice per fare una prima ottimizzazione dei parametri nel database. Questo non vuol dire che questo è il modo migliore per fare proprio questo a me ha funzionato bene;)

Il primo commento che può essere molto utile per guardare in phpMyAdmin all'informazione Mostra le sezioni 'su runtime di MySQL' e 'Visualizza variabili di sistema di MySQL', normalmente accessibili dalla home page dell'applicazione.

Le prime informazioni display e statistiche raccolte e mantenuto il sistema dal suo inizio. Prestare particolare attenzione ai valori delle variabili sono mostrati in rosso, e la consulenza fornita alla destra di questi valori.

Si prega di fare riferimento alle variabili utilizzate per determinare i valori correnti dei parametri che potrebbe successivamente essere modificato per migliorare le prestazioni.

 

Estado actual de una base de datos MySQL con phpmyadmin

 

Una volta fatto questo e certamente non hai idea di dove attaccare, ma ciò che conta è qualcosa di più concreto di quanto si potrebbe suggerire suonare esattamente quali parametri per migliorare le prestazioni del nostro database. Per fare questo ho utilizzato mysqltunner.pl, che è uno script perl che analizza le prestazioni dei BD e dei valori dei parametri e avanza proposte, dopo l'analisi di modifica di alcuni di questi valori.

Se si soddisfano i requisiti, utilizzare lo script su un Linux / Unix è facile come in esecuzione dalla riga di comando

> wget mysqltuner.pl 
> chmod 755 mysqltuner.pl 
> perl mysqltuner.pl 

 

Una volta fatto, lo script si può restituire risultati simili a queste:

MySQLTuner 1.0.1 - Major Hayden <major@mhtx.net>
Bug reports, feature requests, and downloads at <a href="https://mysqltuner.com/ ">https://mysqltuner.com/
Run</a> with '--help' for additional options and output filtering
---------------------------------------- -------- Statistiche Generali ----------
[-] Saltati versione dello script di controllo per MySQLTuner
[OK] corrente e la versione 5.0.45 di MySQL supportati
Operativi] [OK su architettura 32-bit con meno di 2 GB di RAM
--------------------------------------- -------- Storage Engine Statistiche ----
[-] Status:-archive-BDB-federati + InnoDB-ISAM-ndbcluster
[-] I dati nelle tabelle MyISAM: 156m (Tabelle: 390)
[-] I dati nelle tabelle InnoDB: 2M (Tabelle: 126)
[!] Totalmente tabelle frammentate: 46
---------------------------------------- -------- Performance Metrics ---------
[-] Up per: 18m 8s (296K q [272 QPS 847], 689 conn, TX: 1B, RX: 39m)
[-] Letture / scritture: 94% / 6%
[-] Buffer Totale: 35.0M globale + 2.7M per thread (max 100 thread)
[OK] massimo possibile uso della memoria: 303.7M (33% di RAM installata)
[OK] Slow queries: 0% (0/296K)
[OK] più alto utilizzo di connessioni disponibili: 8% (8 / 100)
[OK] la dimensione del buffer chiave / indici MyISAM totale: 8.0M/52.0M
[OK] Key buffer Percentuale: 99,2% (2M cache / 21K letture)
[OK] Query Efficienza cache: 81,6% (cached 237K / 291K seleziona)
[!] Prugne cache di query al giorno: 3650717
Ordina] [OK richiedono tabelle temporanee: 0% (0 temp tipo / i tipi 5K)
[!] Join eseguite senza indici: 33
[!] Tabelle temporanee create su disco: 26% (1K su disco / 7K totale)
[!] Cache Thread è disattivato
[OK] Tabella cache hit rate: 48% (128 open / 265 opener)
[OK] file Open limite utilizzato: 11% (229/2K)
[OK] Tabella blocca acquisite immediatamente: il 99% (73K immediata / serrature 73K)
[!] InnoDB dimensioni dei dati / pool di buffer: 2.0M/2.0M
Raccomandazioni ----------------------------------------- -------- ------------
Raccomandazioni generali:
Esegui OPTIMIZE TABLE per le tabelle di deframmentazione per migliorare le prestazioni
MySQL iniziato lo scorso Entro 24 ore - Consigli possono essere imprecisi
Attivare il log delle query lente per risolvere le query cattivo
Regolare la join query di utilizzare sempre Index
Nell'applicazione di adeguamenti, fare tmp_table_size / max_heap_table_size pari
Ridurre le query SELECT DISTINCT, senza clausole LIMIT
Thread_cache_size settembre al 4 come valore di partenza
Variabili per regolare:
query_cache_size (&gt; 8M)
join_buffer_size (&gt; 128.0K, o usare sempre gli indici con join)
tmp_table_size (&gt; 60m)
max_heap_table_size (&gt; 16m)
thread_cache_size (partono da 4)
innodb_buffer_pool_size (&gt; = 2M)

 

 

Su questioni di ottimizzazione non dovrebbe mai toccare le cose con allegria, così ora che tocca è quello di studiare le informazioni e le raccomandazioni proposte, applicando lo script e vai che riteniamo più opportuno.

La prima raccomandazione è quella di eseguire il OPTIMIZE TABLE su più tabelle in cui ha rilevato che non vi è la frammentazione. Per questo dobbiamo scoprire cosa le tabelle possono richiedere una deframmentazione e applicare questo comando su di essi.

Di seguito sono riportati consigli e suggerimenti sui parametri della BD. L'applicazione mostra i valori d'origine nei casi in cui la proposta è di aumentare il valore. Andremo gradualmente e sarà convalidata se otteniamo miglioramenti, e anche che non usiamo più memoria di quello che hai a disposizione.

Per modificare i valori dei parametri che è possibile modificare il file my.cnf, solitamente si trova nella directory / etc

In questo caso, per esempio, potrebbe essere inserito nelle nostre linee my.cnf

 

# Parametros modificados por recomendaciones de sqltuner 
query-cache-size = 16M 
join-buffer-size = 256K 
tmp-table-size = 90M 
max-heap-table-size = 90M 
thread-cache-size = 4 
innodb-buffer-pool-size = 4M 
# Fin de modificaciones de optimizacion 

 

 

Poi dovete riavviare il database per le modifiche abbiano effetto.

Infine, un commento che, se le informazioni fornite lo script per essere affidabile, la banca dati avrebbe dovuto essere operativo ininterrottamente per almeno 24 ore per andare in modo regolare la sqltuner valori esecuzioni di alcuna utilità per modificare i parametri e ri- eseguire lo script subito.

Dopo aver riavviato il database per applicare le modifiche si deve attendere un giorno o due prima di tornare a chiedere aiuto lo script per sintonizzare il nostro database.