数多くある待機イベントはとても覚えきれるものではないですが、「待機イベントクラス」に分類されているのでこれをみれば概ねその意味はわかります。AWRレポートの「Top 10 Foreground Events by Total Wait Time」にも「Wait Class」項目として出力されています。
‘buffer busy waits’ は複数セッションから同一ブロックへのアクセスが発生する場合発生する待機イベントですが、「待機イベントクラス」は ‘Concurrency’ である事がわかります
SELECT e.EVENT#,e.NAME,e.PARAMETER1,e.PARAMETER2,e.PARAMETER3,e.WAIT_CLASS,e.DISPLAY_NAME FROM V$EVENT_NAME e where e.NAME = 'buffer busy waits' ;
EVENT# | NAME | PARAMETER1 | PARAMETER2 | PARAMETER3 | WAIT_CLASS | DISPLAY_NAME |
106 | buffer busy waits | file# | block# | class# | Concurrency | buffer busy waits |
-- 待機イベントクラス一覧 select e.WAIT_CLASS,count(*) from V$EVENT_NAME e group by e.WAIT_CLASS ;
この表はOracleサイトから引用しています。
https://docs.oracle.com/cd/F19136_01/refrn/classes-of-wait-events.html#GUID-B30B0811-0FDC-40FC-92FC-F6726CE94736
No. | WAIT_CLASS | 概要 |
1 | Concurrency | 内部データベース・リソースの待機(たとえば、ラッチ) |
2 | User I/O | ユーザーI/Oの待機(たとえば、db file sequential read) |
3 | System I/O | バックグラウンド・プロセスI/Oの待機(たとえば、db file parallel writeのDBWR待機) |
4 | Administrative | ユーザーが待機する原因となるDBAコマンドによる待機(たとえば、索引再作成) |
5 | Other |
通常、システムでは発生しない待機(たとえば、wait for EMON to spawn) |
6 | Scheduler | リソース・マネージャに関連する待機(たとえば、resmgr: become active) |
7 | Configuration | データベースの構成またはインスタンスのリソースが十分でないことによる待機(たとえば、ログ・ファイル・サイズ、共有プール・サイズなどが小さい) |
8 | Cluster | Real Application Clustersリソースに関連する待機(たとえば、gc cr block busyなどのグローバル・キャッシュ・リソース) |
9 | Application | ユーザーのアプリケーション・コードによる待機(たとえば、行レベル・ロックまたは明示的ロック・コマンドが原因のロック待機) |
10 | Queueing | パイプライン化された環境における追加データ取得での遅延を示すイベントが含まれる。これらの待機イベントで費やされる時間は、パイプラインに非効率性などの問題があることを示す。この問題は、Oracle Streams、パラレル問合せ、DBMS_PIPE PL/SQLパッケージなどの機能に影響を与える。 |
11 | Idle | セッションがアクティブでない、すなわち作業(SQL*Net message from clientなど)の待機中であることを示す待機 |
12 | Network | ネットワーク・メッセージ(SQL*Net more data to dblinkなど)に関連する待機 |
13 | Commit | 1つの待機イベントのみで構成される待機クラス: コミット後のREDOログ書込み確認用待機(log file sync) |
※1 Otherに含まれる待機イベントの一つである『enq: SV – contention』は、あるシーケンスを複数のセッションから同時に取得要求がかかった場合に発生しますが、これが「通常、システムでは発生しない待機」と言えるのかなぁ、、
SQL> set sqlformat ansiconsole
SQL> SELECT e.EVENT#,e.NAME,e.PARAMETER1,e.PARAMETER2,e.PARAMETER3,e.WAIT_CLASS FROM V$EVENT_NAME e
2* where e.NAME = 'enq: SV - contention';
EVENT# NAME PARAMETER1 PARAMETER2 PARAMETER3 WAIT_CLASS
_________ ________________________ _____________ _____________ _____________ _____________
995 enq: SV - contention type|mode id1 id2 Other
SQL>
簡単に待機イベントを確認する方法として以下あります。(diagnostics pack ライセンス契約がされている必要あります)