目次
はじめに
データベースを運用する中で、ロック競合 は避けて通れない代表的なトラブルの1つです。
- 夜間バッチやオンライン処理が突然ロック待ちで遅延した
- デッドロックやロックタイムアウトが発生してアプリケーションが異常終了した
- どの表・どのSQL同士が競合していたのか、コマンド調査に時間がかかる
ロック問題が発生した際、「どのトランザクションがブロックしているのか」「どのSQLを改善すべきか」を迅速に突き止める必要があります。
💡 そんなときに活躍するのが、Db2 Genius Hub です!
Db2 Genius Hubを活用すると、GUIモニターでの即時検知に加え、AIアシスタント が競合SQLやアクセス順序の不整合を自動で分析し、推奨対応策まで提示してくれます。
本記事では、Db2 Genius Hubを使ったロック問題(デッドロック・ロックタイムアウト・ロック待ち)の検知と原因調査の流れをご紹介します。
📌 参照:概要「Db2 Genius Hubとは」
ロック問題を検知する
Db2 Genius Hubでは、モニター画面を見るだけでロック問題の発生を簡単に把握し、その原因を調査することができます。
(1) モニターアラート
Db2 Genius Hubでは、データベース稼働中の問題発生をモニター画面のアラート(通知)として受け取ることができます。
ロック関連では、主に以下の3種類のアラートが通知されます。
ロック関連のアラートを受け取るためには事前設定が必要です(設定方法は後述の「(1) アラートの設定」をご参照ください)。
- 要求時間に対してロック待機時間が長すぎるアプリケーション接続
- 表のロック待機とロック・タイムアウト・イベントのヒット率の上昇(ロックタイムアウト発生)
- 表のデッドロックの発生
(2) ロック状況モニター
モニター画面の下部には、リソース使用状況などの情報がグラフや表形式でリアルタイムに表示されます。
デフォルトで確認できる主なロック関連情報は以下の通りです。
-
ブロッキングおよび待機している接続:ロック待ちが発生している際、ロックを保持している接続(BLOCKER)とロック待ちをしている接続(WAITER)の情報を表示します。

-
ロックされたオブジェクトと待機している接続:ロック待ちが発生している対象オブジェクト(表名、LOCKNAME)、ロック保持アプリケーション、および待機接続数を表示します。

追加設定を行うことで、以下の情報も下部パネルに表示できます。
- 接続統計:接続ごとのロック保持数、ロックタイムアウト、デッドロック、ロックエスカレーション発生数などの統計
- ロックされたオブジェクトの検索:ロックされているオブジェクトと、ロック保持元のアプリケーションおよび実行SQLの詳細
- ロッキング・イベント・モニター:ロッキング・イベント・モニター表に記録された過去イベント履歴
ロック問題の調査に向けた事前設定
(1) アラートの設定
ロック関連のアラート通知を受け取るには、以下の手順でモニタリング・プロファイルの設定を有効化します。
【設定手順】
- 左側ナビゲーションメニューから [設定(歯車アイコン)] > [データベース] > [監視対象データベース接続] を開きます。
- 対象の [モニタリング・プロファイル](デフォルトは
default)を選択します。 - アラート設定の [すべて表示] > [パフォーマンス] タブを開き、以下の項目を ON にして [保存] します。
表のデッドロックの発生表のロック待機とロック・タイムアウト・イベントのヒット率の上昇要求時間に対してロック待機時間が長すぎるアプリケーション接続
(2) ロッキング・イベント・モニターの有効化と表示
デッドロックやロックタイムアウト発生時の詳細データ(実行SQLやステートメント情報)を自動記録するために、ロッキング・イベント・モニター を有効化してモニター画面に配置します。
【表示パネルの追加】
- [モニター(グラフアイコン)] を開き、画面下部パネルのメニューで [編集(鉛筆アイコン)] をクリックします。
- [ロッキング・イベント・モニター] にチェックを入れます(あわせて [ロックされたオブジェクトの検索] のチェックも推奨します)。
- [Save] をクリックします。
【イベント・モニターの有効化】
追加した [ロッキング・イベント・モニター] タブを開いた際、未有効化の場合は案内メッセージが表示されます。[有効化する] をクリックしてください。
作成オプション画面が表示されるので、イベント表を格納する表スペース(既存の USERSPACE1 や新規作成した表スペース)を指定し、有効化して保存します。
問題発生!
(1) デッドロック
デッドロックが発生すると、モニター画面にアラートが通知されます。
通知を受け取るには、前述の「(1) アラートの設定」が必要です。
デッドロックのアラートを検知したら、アラート内の [AIアシスタントとの連携] をクリックしてみましょう。
クリックすると、AIアシスタントが即座に応答を開始します。
AIがイベントデータを自動分析し、デッドロックの原因となった接続やSQLの特定結果を提示してくれます。
さらに、ロッキング・イベント・モニターの証拠データに基づき、具体的な原因と対策を提示してくれます。
【特定された根本原因】
db2bp(ハンドル41867)と DBeaver(ハンドル41865)が、DEPARTMENT 表と EMPLOYEE 表に対して逆順で排他的アクセスを行ったこと
複数表を更新するトランザクションにおいて「表の更新順序を統一する」ことはデッドロック防止の鉄則です。AIアシスタントも設計の基本を踏まえた的確な改善アドバイスをしてくれます。
(2) ロックタイムアウト
並行処理を行うデータベースにおいてロック競合自体は起こり得るものですが、タイムアウトが多発している場合はアプリケーション設計やインデックス不足などの問題が疑われます。
タイムアウト急増のアラートを受け取ったら、同様に [AIアシスタントとの連携] をクリックします。
通知を受け取るには、前述の「(1) アラートの設定」が必要です。
デッドロック時と同様に、AIが状況を解析して原因と対応策を導き出します。
業務継続のために緊急対応が必要な場合は、ブロックしている保持元アプリケーションを強制終了(FORCE APPLICATION)する方法も案内してくれます。
さらに、再発防止に向けた恒久対策(インデックス追加、分離レベルの見直し、定期的なコミット等)も提案してくれます。
(3) もしかしてロック待ち?
「エラーは出ていないが、アプリケーションの応答が返ってこない」「普段よりレスポンスが極端に遅い」という場合、長時間ロック待ちに陥っている可能性があります。
ロック待ちが長引いた場合、モニター画面に 「要求時間に対してロック待機時間が長すぎるアプリケーション接続」 アラートが通知されます。この場合もAIアシスタントによる診断が有効です。
また、AIを使わずにモニター画面からリアルタイムに状況を把握・調査することも可能です。
① ロックされたオブジェクトと待機している接続
現在ロック待ちが発生しているオブジェクトと待機接続数を確認できます。
下図の例では、python.exe が CATALOG_SALES_UKTEST1 表の行ロックを、DBeaver が DEPARTMENT 表の行ロックを保持しており、後続のアプリケーションが待機していることが一目で分かります。
② ロックされたオブジェクトの検索
どのアプリケーションがどのSQLでロックを保持しているのかを詳細に追跡できます。
右側の「SQL」列をクリックすると、ロックを保持している具体的なSQL文が表示されます。
従来であれば、db2pd -wlock コマンドや db2pd -applications -apinfo -dynamic など複数のCUIコマンドを実行し、ハンドル番号やトランザクションIDを突き合わせる必要がありました。
Db2 Genius Hubなら、ブラウザ画面上で関係するSQLまで数クリックで特定できます。
まとめ
本記事では、Db2 Genius Hubを使ってロック問題(デッドロック、ロックタイムアウト、ロック待ち)を検知し、原因を分析する手順をご紹介しました。
- アラート検知: ロック待ちやデッドロックをダッシュボードで迅速にキャッチ
- AIアシスタント: 競合する複数トランザクションやアクセス順序の不整合を自動解析し、原因と対策を即座に提示
- GUIモニタリング: コマンドを駆使することなく、GUI上でブロック元・待機元のSQLを瞬時に追跡
従来は熟練のDBAがコマンドやイベントモニター表のSQL照会を駆使して行っていた高度な問題判別が、Webブラウザから直感的に行えるようになります。
まずは無料のTrialエディションで、そのスムーズなトラブルシューティングを体験してみてください!
参考情報
📖シリーズ一覧
🌱 基礎編
🚀 導入構成編
- 【Db2 Genius Hub】インストール手順
- 【Db2 Genius Hub】ライセンス適用方法
- 【Db2 Genius Hub】導入前に知っておきたいサイジングの考え方 ~実環境から見積もってみた~
- 【Db2 Genius Hub】モニター対象DBに作成されるオブジェクト
⚙️ 運用編
- 【Db2 Genius Hub】起動・停止・稼働確認方法
- 【Db2 Genius Hub】モニタリング・ダッシュボードを使ってみた
- 【Db2 Genius Hub】Log Analysis機能を使ってみた
🚨 トラブルシューティング編




















