MySQLのチューニング

設定値の優先順位

MySQLの設定は、すべての接続で共通となる設定(これを以下ではグローバル設定と呼びます)と、個々のMySQL接続ごとに設定する(これを以下ではローカル設定と呼びます)ことができます。

最初にグローバル設定が設定され、その後、その設定値をローカル設定が上書きしますので、ローカル設定をしたい時にはグローバル設定から変えたい部分だけを設定し直せばOKです。

ただし、Windowsではローカル設定をすることはできません。グローバル設定が共通で使われます。

Linuxでは、ローカル設定は「/etc/my.cnf > データ・ディレクトリ/my.cnf > ~/.my.cnf」の順番で(厳密には違うが、たいていこれで事が足ります)、設定値が決まります。

以下では最も優先度が高い/etc/my.cnfに設定するように書かれていますが、ほかでの設定もほぼ共通に行えるようです。


設定内容

Linuxなら「/etc/my.cnf」、Windowsなら「C:\WINDOWS\my.ini」または「C:\WINNT\my.ini」で設定します。Windowsではディレクトリやファイルを指定するとき、「C:\\dir\\file」「C:/dir/file」のどちらかで指定してください。

以下におよその設定内容を示します。設定値は架空のものですので、この通りには設定しないでください。

なお、サーバーの設定値は物理メモリを考慮して決めてください。あまり大きくするとスワップが多発して、かえって効率が悪くなります。

特に実務で使う場合はきちっとチューニングすることをお勧めします。

[client]
# ここにパスワードを設定しておくと、
# mysqlコマンドでパスワードを指定しないときにはこのパスワードが使われます。
password = my_password

# MySQLサーバと接続するTCP/IPポート番号
port = 3306

[mysqld]
# MySQLサーバが利用するTCP/IPポート番号
port = 3306

# デフォルトの文字セット
default-character-set=ujis

# メッセージの言語
# Windows版で文字セットがSJISときは文字化けするようですので、
# 指定しないほうがいいと思う。
language		= /usr/local/share/mysql/japanese

# MySQLのMyISAMデータなどを保存するディレクトリ。
datadir = /usr/local/var

# この設定を入れるとmyisamchkを実行する直前に、自動的にロックされま
# せんので、myisamchkを実行する前にMySQLサーバを停止しておく必要が
# あります。
skip-locking

# インデックスブロックを使用する際のバッファの大きさを指定。
# キーを多様するときはこれを大きくするとスピードUPとなります。
key_buffer = 16M

# 一つのパケットの最大サイズ。
# 大きなBLOBを使用している場合は使用したい最大のBLOBと同等ぐらいに設定。
max_allowed_packet=1M

# 全てのスレッドについてのオープンするテーブルの数
table_cache = 64

# ソートで割り当てるバッファ・サイズ。
# ソートを高速にしたい時、この値を増やします。
sort_buffer_size = 512K

# 通信バッファ初期値(変更の必要性無し)
net_buffer_length = 8K

# MyISAMで利用するソート・バッファ
myisam_sort_buffer_size = 8M

# データを更新した全てのSQLコマンドをログファイルに書く。
log-bin

# この例ではログをlog.#に書き込みます
log-update	   = /usr/local/mysql_log/log

# 一時ファイル用のパス
tmpdir		   = /tmp/



# =============== 以下はレプリケーション利用時に設定 ============
# レプリケーション・グループ内ではユニークな値にする。
server-id		= 1

# スレーブ側でマスター・サーバのホスト名かIPアドレスを指定。
master-host 	=	hostname

# マスター側に登録してあるFILE権限を持ったユーザーとパスワード
master-user 	=	username
master-password =	password

# スレーブ側でマスター・サーバのポートを指定
master-port 	=  3306
# ===============================================================



# =============== 以下はinnoDB利用時に設定 ============
# データファイルのディレクトリ
innodb_data_home_dir = /

# データファイルのファイル名とサイズ
# (innodb_data_home_dirからの相対パス)
# 書式は「file1:size1;file2:size2;....fileN:sizeN」です
# autoextendはオプションです。autoextendを指定したらmax:sizeの指定も出来ます。
# この例ではdisk1に200M、disk2に300Mのエリアを最初に確保します。
# 実データのサイズがこの2つのエリアを超えたら
# disk2のエリアを最大2000Mまで自動拡張します。
innodb_data_file_path = disk1/indat1:200M;disk2/indat2:300M:autoextend:max:2000M

# ログ・ファイルのディレクトリ。以下の2つは必ず同じにすること。
innodb_log_group_home_dir = /disk3/innodb_log/
innodb_log_arch_dir = /disk3/innodb_log/

# ログのローテイト数
innodb_log_files_in_group = 3

# log group 内の、各ログファイルの大きさ
# innodb_buffer_pool_sizeの25%以上にすること
innodb_log_file_size = 64M

# ログへ書き出すときのバッファ・サイズ
innodb_log_buffer_size = 32M

# innoDBが利用するバッファサイズ
# innoDBを多様するなら、物理メモリの半分ぐらい割り当てたほうがいいかも?
innodb_buffer_pool_size = 128M

# innoDBがデータ構造を一時的に保管するバッファのサイズ
innodb_additional_mem_pool_size = 2M

# 通常は1をセット。非常に小さなトランザクションしか使わないなら0にできる
innodb_flush_log_at_trx_commit = 1

# トランザクションのデッド・ロックを感知するまでの時間
innodb_lock_wait_timeout = 50
# =====================================================

MySQL-4では「innodb_log_buffer_size = 1M」というように設定できますが、 MySQL-3では「set-variable = innodb_log_buffer_size=1M」というように設定する必要があるパラメータも存在します。
MySQL-4はどちらの設定方法でも動作するので、「set-variable = 」で設定したほうが無難かもしれません。
注意として、「set-variable = 」の後はスペースを入れずに記入しないとエラーになります(「set-variable = innodb_log_buffer_size = 1M」はエラーです)。

MySQLのページ トップへ

Copyright©2001-2019 釣ったよ! All Right Reserved.    sg@tsuttayo.jpn.org