2026.04.17
【Postgres】デッドロック解消から始まった、DBインデックス最適化の記録
2026.04.17
DB【Postgres】デッドロック解消から始まった、DBインデックス最適化の記録

こんにちは!
サービスの成長に伴いデータ量が増加してきたある日、私たちのチームを襲ったデッドロック(Deadlock)の発生。
このトラブルを根本から解決すべく調査を進めた結果、PostgreSQLのインデックス設計を見直すことで、パフォーマンスを劇的に改善することができました。
今回は、そのトラブルシューティングの過程と改善結果を共有します。
事の発端は、特定の処理が重なり合った際に発生したデッドロックでした。
PostgreSQLのログを解析したところ、データ操作(削除系)のクエリが長時間テーブルをロックしており、それが後続の処理と競合していたことが判明しました。
なぜそれほど長時間ロックがかかっていたのか? 原因はインデックス不足にありました。
対象のテーブルにはいくつかの複合インデックスは設定されていましたが、ほとんどノータッチでした。
・ロック時間の長期化
検索に時間がかかる=トランザクションが維持される時間が長くなり、デッドロックを誘発しやすい状態になっていたのです。
プロジェクト発足時からあまりDBの見直しは行われておらず、サービス拡大によってパフォーマンス低下とデッドロックの引き金になっていました。
クエリに最適化したインデックスを追加したところ、レスポンスタイムは以下のように劇的に変化しました。
| 改善対象 | リリース前 | リリース後 | 改善率 |
|---|---|---|---|
| ユーザー操作 A (削除系) | 2.28s | 506ms | 約77%短縮 |
| ユーザー操作 B (削除系) | 2.95s | 753ms | 約74%短縮 |
これまで3秒近くかかっていた処理が、1秒未満(500ms〜750ms程度)まで高速化されました。
これにより、ロックを保持する時間そのものが短時間となり、課題だったデッドロックの発生を抑え込むことに成功しました。
今回のデッドロック対応を通して、以下の教訓を得ました。
インデックス一つで劇的にパフォーマンスが改善されることを実感しました。
改善結果には達成感もありましたが、裏を返せば設計のイケてなさや考慮不足があったということ。
今後は、サービスの成長を見越した負債を溜めない設計を徹底していきます!
【記事への感想募集中!】
記事への感想・ご意見がありましたら、ぜひフォームからご投稿ください!【テクノデジタルではエンジニア/デザイナーを積極採用中です!】
下記項目に1つでも当てはまる方は是非、詳細ページへ!Qangaroo(カンガルー)
【テクノデジタルのインフラサービス】
当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。
最近の記事
タグ検索