ページキャッシュ動作の保証とログファイル

ページキャッシュ動作の保証とログファイル

ダーティページがいつ、どのような順序でディスクに書き込まれるのを保証できますか?ログ構造ファイル(追加専用ファイル)の特定の場合、ダーティページは累積され、順序なしでディスクに書き込まれますか?

たとえば、次のダーティページが蓄積されたログファイルを想像してみてください。

1: file_offset=16kb page_len=4kb <-- dirty
2: file_offset=20kb page_len=4kb <-- dirty
3: file_offset=24kb page_len=4kb <-- dirty

Linuxでは、上記のダーティページを順番に書いていますか、それとも順番なく書かれる可能性はありますか?誤った書き込みが可能な場合、ログファイルを生成するデータベースとアプリケーションはこの状況をどのように処理しますか?たとえば、ページ 3 が最初に書き込まれ、ページ 1 と 2 が書き込まれる前にオペレーティング システムがクラッシュすると、8kb ファイル ホールが発生します。

ベストアンサー1

Linuxでは、上記のダーティページを順番に書いていますか、それとも順番なく書かれる可能性はありますか?

わかりません。

誤った書き込みが可能な場合、ログファイルを生成するデータベースとアプリケーションはこの状況をどのように処理しますか?

https://www.sqlite.org/atomiccommit.html#_dealing_with_garbage_writing_into_journal_files

SQLiteは、デフォルトのファイルシステムが書き込み要求を並べ替えることができ、書き込み要求が最後に発生した場合でも、ページ数を最初に酸化物として燃やすことができると仮定しています。したがって、2番目の防御線として、SQLiteはロールバックログの各データページに32ビットチェックサムを使用します。セクション4.4で説明されているようにログをロールバックすると、ロールバック中に各ページに対してこのチェックサムが評価されます。間違ったチェックサムが見つかると、ロールバックは中断されます。データが破損してもチェックサムが正確になる可能性は少なく、制限があるため、チェックサムはページデータの正確性を保証しません。ただし、チェックサムを使用すると、少なくともこのエラーが発生する可能性が低くなります。

おすすめ記事