mysqlのチューニングにはmysqltuner.plがお手軽。

スポンサーリンク

WordPressを使っていると避けられないのがmysqlのチューニング。
これだけ普及しているmysqlでも簡単にチューニング、というわけにはいかないですね。
色々と検索してちょっとづつパラメータをいじって・・・
DBチューニングが職業の人にはいいですが、ブログを書きたい、Wordpressを使いたい、
それだけだとmysqlの細かいパラメータをいじいじするのはちょっと辛い。
そういう面倒くさい事をやらない為にCMS使ってるわけでもありますので。

で、そういう人にお勧めのツールが・・・
mysqltuner.pl
というperlのスクリプト。
ダウンロードはこちらから。
https://raw.github.com/major/MySQLTuner-perl/master/mysqltuner.pl

リンク貼ってみましたけど実はこれ、
wget mysqltuner.pl
で簡単にDL可能。.plのドメインからリダイレクトしてるんですね。
芸が細かい。

ダウンロードしたら
perl mysqltuner.pl
とやるだけ。
こんな感じのテキストレポートが出ます。


>> MySQLTuner 1.2.0 - Major Hayden <major@mhtx.net>
>> Bug reports, feature requests, and downloads at http://mysqltuner.com/
>> Run with '--help' for additional options and output filtering

-------- General Statistics --------------------------------------------------
[--] Skipped version check for MySQLTuner script
[OK] Currently running supported MySQL version 5.1.**-log
[OK] Operating on 64-bit architecture

-------- Storage Engine Statistics -------------------------------------------
[--] Status: -Archive -BDB -Federated -InnoDB -ISAM -NDBCluster
[--] Data in MyISAM tables: 2G (Tables: 454)
[!!] Total fragmented tables: 30

スポンサーリンク

-------- Performance Metrics -------------------------------------------------
[--] Up for: 5h 22m 49s (3M q [185.916 qps], 48K conn, TX: 23B, RX: 491M)
[--] Reads / Writes: 62% / 38%
[--] Total buffers: 640.0M global + 34.5M per thread (151 max threads)
[!!] Maximum possible memory usage: 5.7G (152% of installed RAM)
[OK] Slow queries: 0% (182/3M)
[OK] Highest usage of available connections: 47% (71/151)
[OK] Key buffer size / total MyISAM indexes: 256.0M/719.2M
[OK] Key buffer hit rate: 100.0% (710M cached / 179K reads)
[OK] Query cache efficiency: 79.0% (2M cached / 3M selects)
[!!] Query cache prunes per day: 306831
[OK] Sorts requiring temporary tables: 1% (1K temp sorts / 87K sorts)
[!!] Temporary tables created on disk: 29% (29K on disk / 99K total)
[OK] Thread cache hit rate: 95% (2K created / 48K connections)
[!!] Table cache hit rate: 15% (256 open / 1K opened)
[OK] Open file limit used: 37% (385/1K)
[OK] Table locks acquired immediately: 98% (1M immediate / 1M locks)

-------- Recommendations -----------------------------------------------------
General recommendations:
Run OPTIMIZE TABLE to defragment tables for better performance
MySQL started within last 24 hours - recommendations may be inaccurate
Reduce your overall MySQL memory footprint for system stability
Enable the slow query log to troubleshoot bad queries
Temporary table size is already large - reduce result set size
Reduce your SELECT DISTINCT queries without LIMIT clauses
Increase table_cache gradually to avoid file descriptor limits
Variables to adjust:
*** MySQL's maximum memory usage is dangerously high ***
*** Add RAM before increasing MySQL buffer variables ***
query_cache_size (> 128M)
table_cache (> 256)

いくつかのセクションに分かれていて、それぞれパフォーマンスなどのmysqlの状況を教えてくれます。
上の例で言えば・・・

[!!] Total fragmented tables: 30
断片化(fragmented)したテーブルが30個あるよ、ということ。OPTIMIZE TABLEしないとだめよ、というのが下に書いてますね。
[!!]で表現されている行が要注意のところです。
で、一番最後のブロックに

query_cache_size (> 128M)
table_cache (> 256)

とありますので、これであれば/etc/my.cnfに、
query_cache_size=256M
table_cache=512M

とか書いてあげるだけ。まぁ稼働させてると刻々と状況が変わるので、本当はwebサーバなどは停めてからやるそうです。確かに走らせたままやると次々と色々サジェストしてきます。
まぁ適当なところでやめとくのも手ですが、少なくともどこをどうすればいいのかを調べる時間を一気に短縮させるには素晴らしいツールかと思います。

スポンサーリンク