2016-10-05 7 views
1

私はPostgreSQLのクラッシュリカバリメカニズムを回っていましたが、これが私にヒットしました。 WALロギングでは、トランザクションSTARTでは、クエリに基づいて、WALバッファにXLOGレコードが格納されます。トランザクションCOMMITでは、WALバッファがフラッシュされます。今、私は一連の挿入でトランザクションを開始すると仮定します。既存のWALセグメントがいっぱいになると、新しいセグメントが作成されます。しかし、何が起こるか、私は大量のデータや何か(例えば4〜5GB)を一括して挿入またはコピーすると、トランザクションがコミットする前にWALバッファ(1〜2GB)がいっぱいになるでしょうか?この場合、WALはどうなりますか?トランザクションがコミットする前にWALバッファがいっぱいになる

答えて

3

WALバッファがいっぱいになると、それらはディスクにフラッシュされます。 WALバッファは、トランザクションがコミットされたときにのみフラッシュできます。重要なことは、トランザクションがコミットされたと報告される前に、トランザクションに関するすべてのWALレコードがフラッシュされることです(同期コミットを前提とします)。しかし逆の場合は当てはまりません。トランザクションがコミットされる前にWALレコードをフラッシュできます。

+0

WALバッファをディスクにフラッシュしてトランザクションをロールバックするとどうなりますか?その場合、ロールバック・トランザクションに関連するログはどのように削除されますか? – user4658312

+0

これらは削除されません。しかし、WALには、受信側で再生されるトランザクションがコミットされた(clog)かどうかに関する情報も含まれています。 –

関連する問題