チェックポイントでの同期

昨日疑問に思ったチェックポイント処理を見てみた。やっぱりチェックポイントでも同期していた。

チェックポイントはwriter processが担当する。ソースファイルでいうとbgwriter.c 。

チェックポイントの処理ではDBMSのバッファキャッシュ上のダーティなデータをwrite()してからfsync()している。
トランザクションログはfdatasync() 、データはfsync()と使い分けられていることがわかる。

writer processは、チェックポイント処理じゃなくても定期的にwrite()処理している。ただし、このときは同期しない(カーネルのキャッシュにのせるだけ)。例外はありそうだけど、基本はチェックポイントするまでデータは同期しないということか。