MySQL Performance Tuning

Aus Thomas-Krenn-Wiki
Wechseln zu: Navigation, Suche

Dieser Artikel beschäftigt sich mit verschiedenen Möglichkeiten, wie die Performance eines MySQL-Servers analysiert und optimiert werden kann. Es werden sowohl Tipps bezüglich Literatur als auch verschiedene Tools vorgestellt.

Theorie

MySQL Training/Zertifizierung

Von MySQL werden verschiedene Trainings angeboten, welche auch mit einer Zertifizierung/Prüfung abgeschlossen werden können.

Folgende Trainings werden unter anderem angeboten:

  • MySQL for Database Administrators (CMDBA)
  • MySQL for Developers (CMDEV)
  • MySQL Cluster Database Administrator (CMCDBA)
  • MySQL Performance Tuning

Alle Infos zu den aktuellen Traninings finden Sie hier: http://www.mysql.com/training

Literatur

  • MySQL Performance Blog von Percona [1]
  • mySQL DBA Blog [2]
  • Buch "High Performance MySQL" von O'Reilly (in Deutsch und Englisch verfügbar)
  • Pro-Linux Artikel [3]

Monitoring Software

Hier ein Beispiel Graph von der Mysql Cacti Auswertung:

Mysql-cacti-graph.png

Tuning Tools

mysqltuner.pl

Dieses Perl Skript ermöglicht schnell und einfach einen Überblick über den Zustand des MySQL Server zu erhalten. Im Bereich Recommendations des Skript-Outputs bekommen Sie wertvolle Hinweise wie Sie mit einfachen Konfigurationsverbesserungen die Performance Ihres MySQL Servers steigern.

Es kann ganz einfach in zwei Schritten ausgeführt werden.

Zuerst muss die aktuelle Version mit wget heruntergeladen werden:

server:~# wget http://mysqltuner.pl

Alternativ kann mysqltuner unter Ubuntu und Debian auch direkt aus dem Repository installiert werden:

server:~# apt-get install mysqltuner

Danach wird der MySQL-Tuner gestartet, wobei eventuell MySQL Login Daten eingegeben werden müssen.

Hier ein Beispiel-Output eines nicht weiter optimierten MySQL Servers:

server:~# perl mysqltuner.pl 

 >>  MySQLTuner 1.0.1 - Major Hayden <major@mhtx.net>
 >>  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: XXXXXXXX

-------- General Statistics --------------------------------------------------
[--] Skipped version check for MySQLTuner script
[OK] Currently running supported MySQL version 5.0.51a-24+lenny2+spu1
[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: 1M (Tables: 26)
[--] Data in InnoDB tables: 22M (Tables: 39)
[--] Data in MEMORY tables: 0B (Tables: 1)
[!!] Total fragmented tables: 10

-------- Performance Metrics -------------------------------------------------
[--] Up for: 11d 16h 28m 56s (8M q [8.714 qps], 597K conn, TX: 2B, RX: 1B)
[--] Reads / Writes: 93% / 7%
[--] Total buffers: 58.0M global + 2.6M per thread (100 max threads)
[OK] Maximum possible memory usage: 320.5M (15% of installed RAM)
[OK] Slow queries: 0% (0/8M)
[OK] Highest usage of available connections: 19% (19/100)
[OK] Key buffer size / total MyISAM indexes: 16.0M/1.9M
[OK] Key buffer hit rate: 99.4% (266K cached / 1K reads)
[OK] Query cache efficiency: 70.2% (4M cached / 6M selects)
[!!] Query cache prunes per day: 2132
[OK] Sorts requiring temporary tables: 0% (0 temp sorts / 586K sorts)
[!!] Temporary tables created on disk: 30% (24K on disk / 81K total)
[OK] Thread cache hit rate: 99% (1K created / 597K connections)
[!!] Table cache hit rate: 14% (64 open / 433 opened)
[OK] Open file limit used: 0% (6/1K)
[OK] Table locks acquired immediately: 100% (2M immediate / 2M locks)
[!!] InnoDB data size / buffer pool: 22.1M/8.0M

-------- Recommendations -----------------------------------------------------
General recommendations:
    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
Variables to adjust:
    query_cache_size (> 16M)
    tmp_table_size (> 32M)
    max_heap_table_size (> 16M)
    table_cache (> 64)
    innodb_buffer_pool_size (>= 22M)

Mehr Informationen über das Skript selbst finden Sie hier: http://mysqltuner.com/


Foto Christoph Mitasch.jpg

Autor: Christoph Mitasch

Christoph Mitasch arbeitet in der Abteilung Web Operations & Knowledge Transfer bei Thomas-Krenn. Er ist für die Betreuung und Weiterentwicklung der Webshop Infrastruktur zuständig. Seit einem Studienprojekt zum Thema Hochverfügbarkeit und Daten Replikation unter Linux beschäftigt er sich intensiv mit diesem Themenbereich. Nach einem Praktikum bei IBM Linz schloss er sein Diplomstudium „Computer- und Mediensicherheit“ an der FH Hagenberg ab. Er wohnt in der Nähe von Linz und ist neben der Arbeit ein begeisterter Marathon-Läufer und Jongleur, wo er mehrere Weltrekorde in der Team-Jonglage hält.


Das könnte Sie auch interessieren

Apache Performance Tuning
Linux Performance Messungen mit vmstat
MySQL Replikation