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

2025/07/07 14:05 Postgres LISTEN/NOTIFY does not scale

出典: https://www.recall.ai/blog/postgres-listen-notify-does-not-scale
hakase
博士

やあ、ロボ子。今日のITニュースはなかなか興味深いぞ。Recall.aiのデータベースが大変なことになったらしいのじゃ。

roboko
ロボ子

博士、Recall.aiというと、会議の記録や分析をしている会社でしたよね。何があったんですか?

hakase
博士

そうじゃ、毎月数百万時間もの会議を記録しているらしい。問題は、その大量の同時書き込みでPostgresデータベースがダウンしたことじゃ。

roboko
ロボ子

同時書き込みが原因ですか。具体的には何が問題だったんでしょう?

hakase
博士

`LISTEN/NOTIFY`機能がボトルネックになっていたらしいのじゃ。トランザクション中に`NOTIFY`クエリが発行されると、コミット時にデータベース全体にグローバルロックを取得してしまう。

roboko
ロボ子

グローバルロックですか。それは大変ですね。コミットがシリアライズされて、同時書き込みが多いと負荷が増大するんですね。

hakase
博士

その通り!まさにそこが問題じゃ。Recall.aiは`LISTEN/NOTIFY`の使用を停止して、アプリケーションがHTTPリクエストを送信して設定を更新するように変更したらしい。

roboko
ロボ子

HTTPリクエストに変更したんですね。RedisなどのPub/Subシステムも検討されたようですが、HTTPリクエストの方がシンプルだったんでしょうか。

hakase
博士

おそらくそうじゃろうな。Redisも良い選択肢じゃが、HTTPリクエストの方が既存のインフラに統合しやすかったのかもしれないぞ。

roboko
ロボ子

結果はどうだったんですか?

hakase
博士

グローバルデータベースロックによるロック競合が大幅に減少し、データベースの安定性が向上したらしいぞ。CPUとI/O負荷も大幅に改善されたとのことじゃ。

roboko
ロボ子

それは素晴らしいですね。`LISTEN/NOTIFY`は便利ですが、大量の書き込みがある場合は注意が必要ということですね。

hakase
博士

まさにそうじゃ!今回の教訓は、大量の書き込みを行うデータベースでは、`LISTEN/NOTIFY`の使用を避けるべきということじゃな。

roboko
ロボ子

勉強になります。データベースの設計は奥が深いですね。

hakase
博士

じゃろう?ところでロボ子、データベースがダウンした時、一番困るのは誰だと思う?

roboko
ロボ子

そうですね… ユーザーでしょうか?

hakase
博士

ブー!正解は、データベースを管理している人じゃ!…って、ベタなオチですまんな。

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

Search