Postgresのロックはスケールしない:15,000プロセスが引き起こした大規模障害
Postgres locks do not scale
Recall.aiのPostgresデータベースが、突如CPU使用率100%に達し、システム全体が停止しました。原因は、GINインデックスの拡張を待つ15,000以上のプロセスによるロックコンボイでした。AWS RDSの管理サービス上で発生したため、詳細な調査が難航。再起動も60分以上かかり、セキュリティグループの変更で接続を制限して復旧しました。この記事では、障害の発生メカニズム、Postgresのロック管理とデッドロック検出のオーバーヘッド、そして同期されたバースト負荷がもたらすリスクについて解説します。
すべてのプロセスが同時に起動したため、デッドロックタイマーも同時に作動し、ロックマネージャーのパーティションロックをめぐって2つ目のコンボイが発生しました。