以下の文章でMYSQL(innodb)の設定値の理解はあっていますでしょうか?innodb_buffer_pool_size、innodb_log_buffer_size、innodb_log_file_size、チェックポイント、WALの関係がいまいち飲み込めません。


innodb_buffer_pool_sizeはselectやupdate,insert時にデータやインデックスをキャッシュするためのメモリ上の領域です。メモリを多く設定すると、selectがメモリ上で完結する場合もあるので、i/oが減ります。innodb_log_file_size = WAL です。この値の70-80%になるとチェックポイントにたっしてコミットされます。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/03/10 20:40:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:rryu No.1

回答回数30ベストアンサー獲得回数2

ポイント10pt

全般的に理解が間違っている感じがします。


まずWAL(write ahead logging)はPostgreSQLの用語で、データベースのディスクイメージを操作する際には必ずその内容をログファイルに記録し、ログファイルに記録された内容を元に実際にデータベースのディスクイメージを操作するという仕組みのことを言います。

参考:http://www.postgresql.jp/document/pg800doc/html/wal.html


チェックポイントはログファイル中のどの部分までが実際にデータベースのディスクイメージに反映されているか示すポイントです。

MySQLのログはリングバッファ的に使われる為、ログを追加するスペースが無くなった場合には、チェックポイント以前のログをデータベースのディスクイメージに反映し、チェックポイントを更新する必要があります(チェックポイントのフラッシュ)。

参考:http://dev.mysql.com/doc/refman/5.1/ja/innodb-checkpoints.html


バッファプールはデータベースのディスクイメージをメモリ上にバッファするためのものです。

大きければ大きいほどより多くのデータをメモリ上にバッファできるため、ディスクIOが少なくなります。

このサイズを指定するのがinnodb_buffer_pool_sizeです。


innodb_log_buffer_sizeはログを書き込む際に使用するメモリ上のバッファのサイズです。

バッファのフラッシュはトランザクションがコミットされた時か、バッファがいっぱいになった時に起ります。

コミットする前にバッファのフラッシュが起る可能性があるような大きなトランザクションを実行する場合は、このサイズを大きくすることで性能が改善します。


innodb_log_file_sizeはログファイルのサイズです。

大きなサイズを指定することでチェックポイントのフラッシュ回数を減らすことができます。

その替わりにクラッシュした時の復旧のスピードが遅くなります。

  • id:chuken_kenkou
    MySQLのバージョンは、何でしょうか?

    >この値の70-80%になるとチェックポイントにたっして

    この数値は、どこからの引用でしょうか?

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません