アットウィキロゴ

mysqlチューニング

メニュー

mysqlを高速化したいときのチューニング方法

ある程度大きなサービスを作る場合、実はデータベースがサービスが重い原因になってることが多いです。 たいていのDBはチューニングしないとその性能をフルに発揮できません。

 ■port
 通常3306。セキュリティ面から変更したほうがいい。
 ■key_buffer
 インデックスをバッファに保存する際のメモリサイズ。
 MyISAMならOSキャッシュも使うので全メモリの30-40%いれるといいらしい。
 増やすと検索速度 up
 例)key_buffer=256M
 ■innodb_buffer_pool_size
 InnnoDBのバッファのプールサイズ。
 InnnoDBはOSキャッシュ使わないので総メモリの70-80%でがんがんいっとけ。
 ■table_cache
 データのキャッシュサイズ。I/O減らすのに有効
 数百のテーブルなら1024がベスト。
 例)table_cache=256
 ■thread_cache
 スレッドの作成・削除は負荷重いので少なくとも16はほしい。
 あとはThreads_Createdの動きを見ながら。
 ■innodb_additional_pool_size
 あんまり効果はないけど20Mほど。
 ■innodb_log_file_size
 ログファイルのサイズ。増やすとパフォーマンスいいけど復旧に時間かかる。
 64-512Mくらいまで。
 ■innodb_log_buffer_size
 ログのバッファサイズ。
 デフォルトで十分だけど増やしても8MB-16MBくらいまで。
 ■innodb_flush_log_at_trx_commit
 設定しないと激遅。flush logをディスクにとるかメモリかとらないか。
 1がディスク、2がメモリ、0がとらない。もちろん2
 ■max_allowed_packet
 入力データ保持のための最大バッファサイズです。でかいファイルに必須。
 例)max_allowed_packet=1M
 ■sort_buffer
 ORDER BYやGROUP BYのクエリ速度を上げる。メモリが多くない限り必要なし。
 例)sort_buffer=1M
 ■record_buffer
 インデックスを使わないクエリ速度up
 例)record_buffer=1M
 ■long_query_time
 この秒数を超えるとslowクエリに認定
 例)long_query_time=1
 ■join_buffer
 join用バッファ
 例)join_buffer_size = 131072
 ■query_cache
 クエリのキャッシュ量。増やしすぎると更新が反映されない場合もあるので
 あまりよくない。データベースのサイズに合わせて
 32M-512Mくらいがベスト。

具体的なチューニングの手順としては

①slow.logを利用してボトルネックの解析

$vi my.cnfで以下を記述

long_query_time=3
log-slow-queries=/var/log/slow.log

これにより3秒以上処理に時間のかかるクエリの特定が可能(long_query_timeで指定)なのでそのクエリを見直す。
②次にサーバーの設定値を変更

$mysqld --help

でサーバーの設定を見直した後に上記のリファレンスを参考に設定値を決定してください。 これでも速度の改善が見られないばあいはレプリケーションの導入やサーバーの増設orハード性能UPを検討してみてください。

最終更新:2009年07月06日 00:22
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。