ずっと頂き物my.cnfを使っていたので調べて直した

自分用に

[code lang=text] mysql conf

データが保存場所

datadir=/var/lib/mysql

ソケットとはプロセスやネットワーク間の通信機構のことで、MySQLではこのソケットを通じてサーバーとクライアントとが接続されます。

それがおかれる場所

socket=/var/lib/mysql/mysql.sock

文字はutf8で管理する

character-set-server=utf8

クライアントがどういう形で要求してこようがUTF-8で返答する

skip-character-set-client-handshake

データベースへの接続数

max_connections = 180

InnoDB : インデックス、データともMySQLがキャッシュ管理する(innodb_buffer_pool_sizeで設定)

MyISAM : インデックスはMySQLがキャッシュ管理する(key_buffer_sizeで大きさを設定)。データはOSのキャッシュ機構におまかせ

key_buffer_size = 32M

MySQL でクライアントからサーバに送ることができるパケットの最大は 16MB です。しかしデフォルトでは 1MB になっています。画像を DB に格納している OpenPNE のようなアプリケーションではこの制限に引っかかってしまうことがあります。

max_allowed_packet = 1M

テーブルをオープン状態にする。セッション毎に消費される。 table_open_cacheのチューニングは、一度に開くテーブル数(joinの数) x セッション数消費 + 5で行う。

table_open_cache = 1024

スレッド毎に作成される一時的なテーブルの最大サイズ。スレッドバッファ。

tmp_table_size = 32M

MEMORYテーブルの最大サイズを指定する。このサイズを超えたMEMORYテーブルはディスク上に作成されます。

max_heap_table_size = 32M

ソート時に使用されるバッファのサイズ。こちらもソート処理のパフォーマンス向上が期待できるため、他のスレッドバッファの設定より多めに割り当てます。

sort_buffer_size = 1M

全件検索時のレコードがキャッシュされるバッファのサイズです

read_buffer_size = 1M

キーを使用したソートで読み込まれた行がキャッシュされるバッファのサイズ。こちらはソート処理のパフォーマンス向上が期待できるため、他のスレッドバッファの設定より多めに割り当てます。

read_rnd_buffer_size = 4M

MyISAMで以下の時のインデックスのソートに使われるメモリ上の領域です。

myisam_sort_buffer_size = 16M

クエリキャッシュのタイプを設定します。

0・・・OFF クエリキャッシュを行いません。

1・・・ON SELECT SQL_NO_CACHE以外のクエリをキャッシュします。

2・・・DEMAND SELECT SQL_CACHEのみキャッシュします。

query_cache_type = 1

クエリキャッシュで使用するメモリサイズ。グローバルバッファなので多めに割り当てても問題無いでしょう。

query_cache_size = 64M

ここで設定された値より大きな結果はキャッシュしないようにします。

query_cache_limit = 4M

MySQLは接続終了後のサーバスレッドをいきなり解放せず、次の接続時に再利用できるようにキャッシュしておける。このため、切断後の再接続時のオーバーヘッドをより軽減することができるのだ。デフォルトは0だが数百程度でもいいようだ。細かいチューニングは実際の稼働状況を把握しないと何とも言えないが、とりあえず

max_connectionsと同じ値にしておくとか、、、 thread_cache_size = 180

接続維持時間をデフォルトの 8 時間から 1 分に変更。 この設定、接続のアイドル状態が一定時間続くと MySQL 側から自動的に接続を切る設定らしい。

wait_timeout = 60

5.6.1から廃止 同時スレッド数を設定するオプション

thread_concurrency = 4

innodb_log_file_size

大きくした方がパフォーマンスが向上します。

なぜなら、innodb_log_fileがいっぱいになると、メモリ上のinnodb_buffer_poolの中の更新された部分のデータを、ディスク上のInnoDBのデータファイルに書き出すしくみになっているからです。

ですので、innodb_buffer_pool_sizeを大きくしたら、innodb_log_file_sizeもあわせて調整しないとパフォーマンスが向上しません。

innodb_buffer_pool_size

グローバルバッファなので、どかんと割り当ててください。

MySQL ABのドキュメントには、搭載メモリの80%とも書かれています。

innodb_log_file_sizeの値は、1MB以上で、32bitマシンの場合は4GB以下にしなければならないとMySQL ABのドキュメントには書いてあります。

また、もうひとつ上限があります。innodb_log_fileはinnodb_log_files_in_groupの数(デフォルトは2)だけつくられるのですが、innodb_log_file_size×innodb_log_files_in_groupが innodb_buffer_pool_sizeを越えてもいけません。

innodb_file_per_table innodb_buffer_pool_size = 512M innodb_log_file_size = 128M

[/code]