自分用のメモです。ちょっと古い本を見ながら書いているので一部名前が違ったりするかも。
ログ関係
-
log_show_queries
,long_query_time
- スロークエリのログ設定。前者はON/OFFで後者はスローの閾値(秒数)
- 場所は
slow_query_log_file
オプションで指定。デフォルトでは(homebrew install)/usr/local/var/mysql/mysql/slow_log.CSV
になっていた log_queries_not_using_indexes
- インデックスを使用しないSQLのログ
全体設定
max_connections
- クライアントの最大接続数
table_cache
- 同時に開けるテーブル数。よって総テーブル数*max_connectionsにするのが原則だと考えられる。
soft_buffer_size
-
group by
,order by
の際にソートに使用されるバッファ read_rnd_buffer_size
- ソート後のレコードを読み込む際に使用されるバッファ
thread_cache_size
- キャッシュするスレッド数
- コネクションプーリングを利用する場合はこの値はあんまり意味はないと思われる。都度接続方式をとる場合に、スレッド生成のオーバヘッドをキャッシュしたスレッドを使用することで減らせる可能性がある。
- 参考
tmp_table_size
- Explain時に
Using temporary
が出るようなクエリを実行した際に作成される一時tableの最大サイズ。これを超えるサイズの一時テーブルが作られるとディスクアクセスが行われ、非常に処理が低速になる。ディスクアクセスが行われたかどうかはshow status
のCreated_tmp_disk_files
によって確認できる sync_binlog
- バイナリログをNコミットごとにディスクに同期させるかという設定。デフォルトでは0になっている(作成されない)
query_cache_size
- SQLクエリをキャッシュする容量。
-
SQL_CACHE. SQL_NO_CAHCE
句でクエリ単位でキャッシュを利用するかどうか指定できる join_buffer_size
- indexを利用しないjoinの際に利用されるバッファ
read_buffer_size
- テーブルFILLスキャン時に利用されるバッファ
bulk_insert_buffer_size
- バルクインサート(一気にinsert)時に使用するバッファ
InnoDBの設定
innodb_buffer_pool_size
- インデックス、レコードデータ用のバッファ。使用されるメモリ容量の大部分がここにあたる。
innodb_flush_log_at_trx_commit
- logをflushするタイミング粒度。デフォルトは1:「毎commitごと」。2にすると「1秒ごと」らしい。
- バイナリログとInnoDB_logfileは別物なので注意。これは後者。
-
innodb_log_file_size
,innodb_log_files_in_group
- トランザクションログ(InnoDB_logfile)の大きさと、1グループのログファイル数。
- グループというのはローテーションのファイル数。たとえば2にならサイズに達したら二つ目のログファイルに移り、それもいっぱいになったらまた一つ目に戻る、的な。
innodb_data_file_path
- これはログじゃなくてデータファイルそのもののパスとサイズ。
innodb_file_per_table
- テーブルごとにデータファイルを作成するという設定。これがあると上のfilepathは無視される。
- ちなみにMacでRailsアプリケーションの並列テストを実行しようとして書くプロセスごとにテーブルを作成した結果、こういうことになったことがある。この辺りの設定について少しでも認識しておくとこういうエラーなどにも柔軟に対応できるかも。
参考書: MySQLによるタフなサイトの作り方
追記: これを見るにいろいろ足りてなさそう。適宜追加するかもです。