memo.xight.org

日々のメモ

MySQLの高速化 Tips

Summary

my.cnf

[client]
# セキュリティ面から変更すべき
port = 3306

[mysqld]
# インデックスをバッファに保存する際のメモリサイズ
# MyISAMならOSキャッシュも使用するため,全メモリの30-40%を当てると良い.
key_buffer = 256M

# InnoDBはOSキャッシュを使用しないため,全メモリの70-80%を当てると良い.
innodb_buffer_pool_size =512M 

# データのキャッシュサイズ.I/Oを減らす.
# 数百のテーブルであれば,1024が良いらしい.
table_cache = 256

# スレッドの作成,削除は負荷が大きい.
# Threads_Createdの動きを見ながら変更.
thread_cache = 16

# あまり効果は無いらしい.
#innodb_additional_pool_size = 20M

# ログファイルのサイズ.
# 増やすとパフォーマンスが良くなるが,復旧に時間がかかる.
# 64-512M程度まで.
innodb_log_file_size = 64M

# ログのバッファサイズ
# 8-16Mまで.
innodb_log_buffer_size = 8M

# flush logをディスク,メモリに記録するか,記録しないかを設定する.
# 必ずメモリに記録するよう設定すること.
# 0 : flush log を記録しない.
# 1 : flush log をディスクに記録する.
# 2 : flush log をメモリに記録する.
innodb_flush_logs_at_trx_commit = 2

# 入力データ保持のための最大バッファサイズ
# 大きいファイルを扱う際に必須.
max_allowed_packet = 1M

# ORDER BYやGROUP BYのクエリ速度を上げる.
# メモリが多くない限り増やしても意味ないらしい.
sort_buffer = 1M

# インデックスを使わない際のクエリ速度向上
record_buffer  1M

# この秒数を超えるとslowクエリと認識される
long_query_time = 1

# join用バッファ
join_buffer = 131072

# クエリのキャッシュ量.
# 増やしすぎると更新が反映されない場合がある
# 32M-512Mくらいが良い.
query_cache = 32M

Reference

TechKnowledge - mysql を高速化したいときに読むメモ
http://tech.media-index.jp/2006/11/mysql_1.html

@IT - Linux Square - MySQLの高度な管理とチューニングテクニック(1/2)
http://www.atmarkit.co.jp/flinux/rensai/mysql11/mysql11a.html

All About - データベース - MySQLのチューニング
http://allabout.co.jp/internet/database/closeup/CU20040722A/

MySQL Performance Blog - What to tune in MySQL Server after installation
http://www.mysqlperformanceblog.com/2006/09/29/what-to-tune-in-mysql-server-after-installation/