martedì 9 aprile 2013

Mysqltuner per ottimizzare MySql

Mysqltuner è uno script Perl utile a diagnosticare possibili problemi di performance riguardanti Mysql.
L'uso dello script è semplicissimo. Basta scaricarlo, lanciarlo e avere una panoramica globale di tutte le problematiche di cui è afflitto il vostro database. Al termine dell'esecuzione mysqltuner ci proporrà alcune modifiche da apportare al file my.cfg

#Scaricate e dare i permessi di esecuzione
wget http://mysqltuner.com/mysqltuner.pl
chmod +x mysqltuner.pl

#Lanciamo lo script
./mysqltuner.pl --user USER --pass PASSWORD --host HOST --port PORT --forcemem 100 --forceswap 100

Nel caso sopra ho lanciato lo script, richiedendo l'analisi di un database remoto. In questo caso ho specificato user, password, host e porta. Nel caso in cui il database si trova direttamente sulla macchina non è necessario specificare l'host.
OUTPUT:

-------- General Statistics --------------------------------------------------
[--] Skipped version check for MySQLTuner script
[!!] Your MySQL version 4.1.11-Debian_etch1-log is EOL software!  Upgrade soon!
[OK] Operating on 32-bit architecture with less than 2GB RAM

-------- Storage Engine Statistics -------------------------------------------
[--] Status: +Archive -BDB -Federated +InnoDB +ISAM -NDBCluster
[--] Data in MyISAM tables: 301M (Tables: 2074)
[--] Data in HEAP tables: 379K (Tables: 9)
[!!] InnoDB is enabled but isn't being used
[!!] ISAM is enabled but isn't being used
[!!] Total fragmented tables: 215

-------- Performance Metrics -------------------------------------------------
[--] Up for: 12d 18h 33m 30s (1B q [1K qps], 185K conn, TX: 3B, RX: 377M)
[--] Reads / Writes: 78% / 22%
[--] Total buffers: 2.6M per thread and 58.0M global
[OK] Maximum possible memory usage: 320.5M (20% of installed RAM)
[OK] Slow queries: 0% (17/1B)
[OK] Highest usage of available connections: 32% (32/100)
[OK] Key buffer size / total MyISAM indexes: 16.0M/72.3M
[OK] Key buffer hit rate: 99.9%
[OK] Query cache efficiency: 99.9%
[!!] Query cache prunes per day: 47549
[OK] Sorts requiring temporary tables: 0%
[!!] Temporary tables created on disk: 28%
[OK] Thread cache hit rate: 99%
[!!] Table cache hit rate: 0%
[OK] Open file limit used: 12%
[OK] Table locks acquired immediately: 99%
[!!] Connections aborted: 20%

-------- Recommendations -----------------------------------------------------
General recommendations:
    Add skip-innodb to MySQL configuration to disable InnoDB
    Add skip-isam to MySQL configuration to disable ISAM
    Run OPTIMIZE TABLE to defragment tables for better performance
    Enable the slow query log to troubleshoot bad queries
    When making adjustments, make tmp_table_size/max_heap_table_size equal
    Reduce your SELECT DISTINCT queries without LIMIT clauses
    Increase table_cache gradually to avoid file descriptor limits
    Your applications are not closing MySQL connections properly
Variables to adjust:
    query_cache_size (> 16M)
    tmp_table_size (> 32M)
    max_heap_table_size (> 16M)
    table_cache (> 64)

Viene mostrato un report diviso per punti e l'elenco dei parametri da andare a modificare sul file my.cfg