ある程度大きなサービスを作る場合、実はデータベースがサービスが重い原因になってることが多いです。
たいていの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を検討してみてください。

