今回は

みなさん、こんにちはMaxGaugeを販売しております日本エクセムの製品担当です。

今回はOracle Databaseで発生したロック待機をMaxGaugeで分析する方法を紹介します。
ロックに関する事象は調査が難航するケースが多いですが、
MaxGaugeを使えばロックが発生したセッションやSQLを比較的簡単に調査することが可能で調査時間の短縮などの効果も期待できます。

待望の日本エクセム様の技術連載第6弾です!
前回の記事も是非ご覧ください!

 

「enq: TX – row lock contention」どうやって調べてます?

AWRレポートなどで「enq: TX – row lock contention」(行ロックの待機時間が多くなっている場合、「どのSQLでロック待機が発生しているのか?」と確認したいときがあると思います。

AWRレポートなら “Segments by Row Lock Waits” セクション辺りの情報から競合しているセグメントを探したり、ASHで「enq: TX – row lock contention」が発生しているセッションを探したりするケースが多いと思います。

MaxGaugeではロック待機の確認は簡単です。
ロック待機の状況をツリー状に表示して、ロックの原因となっているセッション、ロック待機しているセッション、ロック待機中のSQL、
などの情報を元にロックの発生状況を簡単に分析することができます。

①ロック待機セッションをツリー状で表示します。
一番上の行がロックしているセッション(フォルダ)で2行目以降がロックで待たされているセッション(ウェイター)です。Oracle RAC環境では複数のノード間で発生したロックの状況を表示します。

MaxGaugeはロック待機の状況を1秒毎に取得しています。
数字の秒数をクリックすることでロック・ツリーを1秒毎に確認することができます。

MaxGaugeでのロック待機の調査方法

MaxGaugeでは「現在発生しているロック待機状況」「過去に発生したロックの機状況」を確認することができます。

現在発生しているロック待機状況を確認する

MaxGaugeのリアルタイムモニタでロック待機の状況を確認することができます。

リアルタイムモニタではロック待機の分析に役立つフレームがあります。
このフレームを組み込むことでロック待機の状況をリアルタイムに確認/分析することが可能です。

ロック待機の確認/分析で役立つフレーム

ロック待機待ちセッション数・フレーム : インスタンス毎にロック待機中のセッション数をグラフで表示します。待機時間に応じてグラフの色が変化します。

ロック待機待ちセッション・フレーム : ロック待機中のセッションの一覧を表示しするフレーム、ロック待機中のセッションの詳細を調べます。

ロックツリー・フレーム : ロックの状態をツリー状で表示します、ロックを保持しているセッションを先頭にインデントのロック待機セッションを確認します。

過去に発生したロック待機の状況を確認する

MaxGaugeのパフォーマンスアナライザで過去に発生したロック待機の状況を確認することができます。
ロック待機の確認にはパフォーマンスアナライザの「性能トレンド」画面で詳細を分析できるタブがあります。

性能トレンドのロック待機分析に役立つタブ

ロック待機セッション数グラフ : ロック待機セッション数の推移のグラフ、ロック待機の発生状況をグラフから確認します。

ロック・ツリー : ロックの状態をツリー状で表示します、ロックを保持しているセッションを先頭にインデントのロック待機セッションを確認します。

パフォーマンスアナライザでの調査手順の詳細は(https://www.ex-em.co.jp/blog/lockcheck/ )で紹介しています。

MaxGaugeを使ったロック待機の確認ポイント

MaxGaugeを使用するとロックの状況がツリー状で表示されるのでロック待機によるトラブルの調査では簡単かつ短時間に状況を把握することが可能です。ロック待機の確認ポイントを以下にまとめました。

確認ポイント
  • ロック・ツリーに表示されたロック待機中セッションのEvent Nameを確認してください。
    Event Nameはロックの種類を示すものでロックの種類により原因や対処方法が異なります。
    例えば、「enq: TX – row lock contention」、「enq: TX – Index contention」のようにEvent Nameにより原因と対処方法は異なります。
  • ロック・ツリーで表示されるロックを保持しているセッション(ツリーの一番上)のSQL実行状況を確認してください。
    通常よりもSQLの処理が遅くロック保持時間が長期化してロック待機セッションが増えているケースも考えられます。

MaxGaugeでのデッドロック発生の表示

デッドロックが発生したセッションはMaxGaugeでも識別できるように表示します。

リアルタイムモニタ

デッドロックが発生すると対象セッションの「Lock Name」列に「Dead Lock」と表示されます。

パフォーマンスアナライザ

デッドロックが発生したセッションの行は文字が赤色で表示されます。

最後に

今回はMaxGaugeを使用したロック待機の調査/分析方法について紹介しました。

ロック待機の調査は一般的にはデータベース管理者が調査する必要がありますが、
MaxGaugeを利用すると簡単に調査できることからアプリケーション開発者、システム運用者でも調査が可能になると考えております。

日本エクセムではロック待機に関する待機イベントの詳細を紹介しています、少々難しいですが待機イベントを詳しく理解したい方はご参照ください。


いかがでしたでしょうか?
次回の記事もお楽しみにしていてください♪

投稿者プロフィール

日本エクセム株式会社
日本エクセム株式会社
日本エクセム株式会社 プロダクトソリューション部
MaxGaugeの製品販売、およびDBAサービス(データベース管理サービス)、データベースチューニング支援、障害解析支援など幅広いサービスを実施しています。弊社でもデータベースに関する記事など書いていますがOracleデータベースの待機イベントの記事がおすすめです。