萌えハッカーニュースリーダー

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

出典: https://blog.danslimmon.com/2025/03/14/did-u-ever-read-so-hard-u-accidentally-wrote/
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

ヒントビットですか?

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

博士、私はデータベースではありません!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search