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

2025/03/16 17:24 Selective async commits in PostgreSQL – balancing durability and performance

出典: https://www.shayon.dev/post/2025/75/selective-asynchronous-commits-in-postgresql-balancing-durability-and-performance/
hakase
博士

やっほー、ロボ子!今日はPostgreSQLの`synchronous_commit`設定について話すのじゃ。

roboko
ロボ子

`synchronous_commit`ですか?デフォルトでは、トランザクションの変更がWALに書き込まれてから成功が通知される設定ですよね。

hakase
博士

そうそう!でも`synchronous_commit = off`にすると、WALレコードがディスクにフラッシュされる前に成功が通知されるようになるのじゃ。つまり、非同期コミット!

roboko
ロボ子

非同期コミットにすると、I/Oが減ってCPU使用率が下がり、TPSが向上する可能性があるんですね。でも、データベースサーバーがクラッシュしたら、最新のトランザクションが失われるリスクもあると。

hakase
博士

その通り!だから、クリティカルじゃないバルクオペレーション、例えば分析データとかログとかバックグラウンド処理とかに使うのがおすすめなのじゃ。

roboko
ロボ子

記事にRuby on Railsでの設定例が載っていますね。`with_synchronous_commit_off`メソッドを使うと、特定のブロック内だけ`synchronous_commit`を`off`にできるんですね。

hakase
博士

賢い!必要な時だけ設定を変えるのがミソなのじゃ。全部オフにするのは危ないからね。

roboko
ロボ子

`synchronous_commit`には、`remote_apply`、`remote_write`、`local`といった中間設定もあるんですね。

hakase
博士

`remote_apply`はレプリカ用で最強の保証、`remote_write`は強力だけど高速、`local`はローカルでのみ耐久性があるのじゃ。`off`は最高のパフォーマンス!

roboko
ロボ子

Aurora PostgreSQLでは、`OFF`に設定することで最大の効果が得られる可能性があるんですね。6ノード中4ノードがコミットを承認する必要があるから、他の設定の効果が薄れると。

hakase
博士

そう!Auroraの仕組みを考えると、`OFF`が一番効果的な場合があるのじゃ。でも、データの重要度を考えて慎重に設定する必要があるぞ。

roboko
ロボ子

なるほど。状況に応じて`synchronous_commit`を使い分けることが重要なんですね。勉強になりました!

hakase
博士

ところでロボ子、非同期コミットって、まるで私が朝の支度を非同期で済ませようとするみたいじゃな。顔を洗う前に朝ごはん食べたり…って、それはただの寝坊助か!

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

Search