2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Db2 Genius Hub】ロック問題を解決する

2
Last updated at Posted at 2026-10-02

目次


はじめに

データベースを運用する中で、ロック競合 は避けて通れない代表的なトラブルの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) アラートの設定」をご参照ください)。

  1. 要求時間に対してロック待機時間が長すぎるアプリケーション接続
  2. 表のロック待機とロック・タイムアウト・イベントのヒット率の上昇(ロックタイムアウト発生)
  3. 表のデッドロックの発生

image.png

モニターアラートに見当たらないとき
Db2 Genius Hubの定期モニタリングはデフォルトで5分間隔です。そのため、問題が発生した直後はまだアラートが上がっていない場合があります。
また、モニター画面には最新のアラートが表示されるため、過去のアラートを見逃した場合は 「通知センター」 から履歴を確認できます。

image.png

(2) ロック状況モニター

モニター画面の下部には、リソース使用状況などの情報がグラフや表形式でリアルタイムに表示されます。
デフォルトで確認できる主なロック関連情報は以下の通りです。

  • ブロッキングおよび待機している接続:ロック待ちが発生している際、ロックを保持している接続(BLOCKER)とロック待ちをしている接続(WAITER)の情報を表示します。
    image.png

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

追加設定を行うことで、以下の情報も下部パネルに表示できます。

  • 接続統計:接続ごとのロック保持数、ロックタイムアウト、デッドロック、ロックエスカレーション発生数などの統計
  • ロックされたオブジェクトの検索:ロックされているオブジェクトと、ロック保持元のアプリケーションおよび実行SQLの詳細
  • ロッキング・イベント・モニター:ロッキング・イベント・モニター表に記録された過去イベント履歴

ロック問題の調査に向けた事前設定

(1) アラートの設定

ロック関連のアラート通知を受け取るには、以下の手順でモニタリング・プロファイルの設定を有効化します。

【設定手順】

  1. 左側ナビゲーションメニューから [設定(歯車アイコン)] > [データベース] > [監視対象データベース接続] を開きます。
  2. 対象の [モニタリング・プロファイル](デフォルトは default)を選択します。
  3. アラート設定の [すべて表示] > [パフォーマンス] タブを開き、以下の項目を ON にして [保存] します。
    • 表のデッドロックの発生
    • 表のロック待機とロック・タイムアウト・イベントのヒット率の上昇
    • 要求時間に対してロック待機時間が長すぎるアプリケーション接続

image.png

image.png

image.png

image.png

(2) ロッキング・イベント・モニターの有効化と表示

デッドロックやロックタイムアウト発生時の詳細データ(実行SQLやステートメント情報)を自動記録するために、ロッキング・イベント・モニター を有効化してモニター画面に配置します。

【表示パネルの追加】

  1. [モニター(グラフアイコン)] を開き、画面下部パネルのメニューで [編集(鉛筆アイコン)] をクリックします。
  2. [ロッキング・イベント・モニター] にチェックを入れます(あわせて [ロックされたオブジェクトの検索] のチェックも推奨します)。
  3. [Save] をクリックします。

image.png

image.png

【イベント・モニターの有効化】
追加した [ロッキング・イベント・モニター] タブを開いた際、未有効化の場合は案内メッセージが表示されます。[有効化する] をクリックしてください。

image.png

作成オプション画面が表示されるので、イベント表を格納する表スペース(既存の USERSPACE1 や新規作成した表スペース)を指定し、有効化して保存します。

image.png


問題発生!

(1) デッドロック

デッドロックが発生すると、モニター画面にアラートが通知されます。

通知を受け取るには、前述の「(1) アラートの設定」が必要です。

デッドロックのアラートを検知したら、アラート内の [AIアシスタントとの連携] をクリックしてみましょう。

image.png

クリックすると、AIアシスタントが即座に応答を開始します。

image.png

AIがイベントデータを自動分析し、デッドロックの原因となった接続やSQLの特定結果を提示してくれます。

image.png

さらに、ロッキング・イベント・モニターの証拠データに基づき、具体的な原因と対策を提示してくれます。

image.png

【特定された根本原因】
db2bp(ハンドル41867)と DBeaver(ハンドル41865)が、DEPARTMENT 表と EMPLOYEE 表に対して逆順で排他的アクセスを行ったこと

image.png

複数表を更新するトランザクションにおいて「表の更新順序を統一する」ことはデッドロック防止の鉄則です。AIアシスタントも設計の基本を踏まえた的確な改善アドバイスをしてくれます。


(2) ロックタイムアウト

並行処理を行うデータベースにおいてロック競合自体は起こり得るものですが、タイムアウトが多発している場合はアプリケーション設計やインデックス不足などの問題が疑われます。

タイムアウト急増のアラートを受け取ったら、同様に [AIアシスタントとの連携] をクリックします。

通知を受け取るには、前述の「(1) アラートの設定」が必要です。

image.png

デッドロック時と同様に、AIが状況を解析して原因と対応策を導き出します。

image.png

image.png

業務継続のために緊急対応が必要な場合は、ブロックしている保持元アプリケーションを強制終了(FORCE APPLICATION)する方法も案内してくれます。

さらに、再発防止に向けた恒久対策(インデックス追加、分離レベルの見直し、定期的なコミット等)も提案してくれます。

image.png


(3) もしかしてロック待ち?

「エラーは出ていないが、アプリケーションの応答が返ってこない」「普段よりレスポンスが極端に遅い」という場合、長時間ロック待ちに陥っている可能性があります。

ロック待ちが長引いた場合、モニター画面に 「要求時間に対してロック待機時間が長すぎるアプリケーション接続」 アラートが通知されます。この場合もAIアシスタントによる診断が有効です。

また、AIを使わずにモニター画面からリアルタイムに状況を把握・調査することも可能です。

① ロックされたオブジェクトと待機している接続

現在ロック待ちが発生しているオブジェクトと待機接続数を確認できます。
下図の例では、python.exe が CATALOG_SALES_UKTEST1 表の行ロックを、DBeaver が DEPARTMENT 表の行ロックを保持しており、後続のアプリケーションが待機していることが一目で分かります。

image.png

② ロックされたオブジェクトの検索

どのアプリケーションがどのSQLでロックを保持しているのかを詳細に追跡できます。

image.png

右側の「SQL」列をクリックすると、ロックを保持している具体的なSQL文が表示されます。

image.png

従来であれば、db2pd -wlock コマンドや db2pd -applications -apinfo -dynamic など複数のCUIコマンドを実行し、ハンドル番号やトランザクションIDを突き合わせる必要がありました。
Db2 Genius Hubなら、ブラウザ画面上で関係するSQLまで数クリックで特定できます。


まとめ

本記事では、Db2 Genius Hubを使ってロック問題(デッドロック、ロックタイムアウト、ロック待ち)を検知し、原因を分析する手順をご紹介しました。

  • アラート検知: ロック待ちやデッドロックをダッシュボードで迅速にキャッチ
  • AIアシスタント: 競合する複数トランザクションやアクセス順序の不整合を自動解析し、原因と対策を即座に提示
  • GUIモニタリング: コマンドを駆使することなく、GUI上でブロック元・待機元のSQLを瞬時に追跡

従来は熟練のDBAがコマンドやイベントモニター表のSQL照会を駆使して行っていた高度な問題判別が、Webブラウザから直感的に行えるようになります。

まずは無料のTrialエディションで、そのスムーズなトラブルシューティングを体験してみてください!


参考情報


📖シリーズ一覧

🌱 基礎編

🚀 導入構成編

⚙️ 運用編

🚨 トラブルシューティング編


2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?