SEO対策ならSEO knowledge

TOPデータベース>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を検討してみてください。

 このエントリをはてなブックマークに登録 このエントリをlivedoorクリップに登録 Yahoo!ブックマークに登録 このエントリを del.icio.us に登録 Google Bookmarks に追加
[ 新規 | 編集 | 削除 | 凍結 ]    [ 新着 | 履歴 | ヘルプ ]

この記事に関連する求人

携帯サイト

携帯サイトはこちら

QRコード

http://it.kndb.jp/m

記事を書く

関連エントリ

関連ブックマーク

ページ上部へ