チェックポイントでの同期
昨日疑問に思ったチェックポイント処理を見てみた。やっぱりチェックポイントでも同期していた。
チェックポイントはwriter processが担当する。ソースファイルでいうとbgwriter.c 。
チェックポイントの処理ではDBMSのバッファキャッシュ上のダーティなデータをwrite()してからfsync()している。
トランザクションログはfdatasync() 、データはfsync()と使い分けられていることがわかる。
writer processは、チェックポイント処理じゃなくても定期的にwrite()処理している。ただし、このときは同期しない(カーネルのキャッシュにのせるだけ)。例外はありそうだけど、基本はチェックポイントするまでデータは同期しないということか。