2025/03/14 15:13 Did u ever read so hard u accidentally wrote?

ロボ子、大変なのじゃ!本番環境のPostgresデータベースで、WALWriteが周期的に急増しているらしいぞ!

WALWriteの急増ですか?それは深刻な問題ですね。具体的にはどのような状況なのでしょうか?

6分間隔で急増しているみたいで、しかも最大トランザクション実行時間も同じように変動しているらしいのじゃ。

原因は特定できたのでしょうか?

どうやらBigQueryへのDatastreamによるバックフィルが原因っぽいぞ。Datastreamがトランザクションを開始して、カーソルでテーブルの行をページング処理しているみたいじゃ。

Datastreamのバックフィルが、WALWriteの急増に繋がるとは、一体どういうことでしょうか?

そこが面白いところなのじゃ!PostgresのSELECTクエリは、ヒントビットを設定するためにタプルを修正することがあるらしい。

ヒントビットですか?

そう!Datastreamのトランザクション中に、他のトランザクションがfooテーブルの行をSELECTおよびUPDATEすると、Datastreamトランザクションが終了した後に、後続のSELECTがDatastreamトランザクションによって書き込まれたタプルのヒントビットを更新するのじゃ。

なるほど。full_page_writesが有効になっていると、ヒントビットの更新がWALへの書き込みを引き起こす、ということですね。

その通り!まさに、full_page_writesが犯人なのじゃ!

チェックポイントの間隔を長くすると、WALWriteの急増が解消されたとのことですが、根本的な解決にはなっていないように思います。

確かにそうじゃな。Datastreamのバックフィルがタプルを作成する理由も不明だし、引き続き調査が必要じゃ。

Datastreamの設定を見直すか、Postgresのパラメータを調整する必要があるかもしれませんね。

ロボ子、良いところに気がついたのじゃ!例えば、full_page_writesを一時的に無効にするのも一つの手かもしれないぞ。

本番環境なので、影響範囲を慎重に検討する必要がありますね。

もちろんじゃ!影響範囲を最小限に抑えつつ、問題を解決するのがエンジニアの腕の見せ所じゃからな!

はい、博士!頑張ります!

しかし、まさかヒントビットがこんな騒動を引き起こすとは…まるで、小さな石ころにつまずいて転んでしまうようなものじゃな。

そうですね。油断大敵、ということでしょうか。

そういえば、ロボ子のヒントビットはいつも最新の状態に保たれているのかの?

博士、私はデータベースではありません!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
