GV$OB_SQL_AUDITはグローバルSQL監査テーブルであり、クライアントのリクエスト元、実行サーバー情報、実行状態情報、待機時間、および各実行段階での所要時間などを確認するために使用できます。
SQL Audit関連の設定
SQL Auditのスイッチを設定します。
obclient> ALTER SYSTEM SET enable_sql_audit = true; /*SQL Auditを有効にする*/ obclient> ALTER SYSTEM SET enable_sql_audit = false; /*SQL Auditを無効にする*/SQL Auditが使用するメモリをテナントメモリの割合で設定します。デフォルトのメモリ割合は3で、設定範囲は[0,80]です。
obclient> SET global ob_sql_audit_percentage = 3; Query OK, 0 rows affected
SQL Auditのスクラップメカニズム
テナントのバックグラウンドタスクは、1秒ごとにOBServerノードおよびSQL Auditのメモリ使用状況を確認し、SQLのスクラッピングをトリガーするかどうかを判断します。SQL Auditのメモリ上限は、ob_sql_audit_percentageに基づいて割り当てられる利用可能な最大メモリです。
SQL Auditの実際のメモリ使用量が指定されたしきい値に達すると、スクラッピングを開始する条件が満たされ、スクラッピングが開始されます。SQL Auditの実際のメモリ使用量が指定されたしきい値まで下がると、スクラッピングを停止する条件が満たされ、スクラッピングが停止します。SQL Auditのスクラッピングメカニズムは以下の表のとおりです。
トリガーメカニズム |
SQL Auditメモリ範囲 |
削除をトリガーする条件 |
削除を停止する条件 |
|---|---|---|---|
| メモリ使用量 | [0,64M] | メモリ上限 *50% | 0 M |
| メモリ使用量 | [64M,100M] | メモリ上限-20M | メモリ上限-40 M |
| メモリ使用量 | [100M,5G] | メモリ上限 *80% | メモリ上限 *60% |
| メモリ使用量 | [5G,+∞) | メモリ上限-1G | メモリ上限-2 G |
| レコード数 | なし | 900 万 | 800万 |
GV$OB_SQL_AUDIT フィールド説明
フィールド名 |
タイプ(MySQLモード) |
タイプ(Oracleモード) |
説明 |
|---|---|---|---|
| SVR_IP | varchar(46) | varchar(46) | IPアドレス |
| SVR_PORT | bigint(20) | number(38) | ポート番号 |
| REQUEST_ID | bigint(20) | number(38) | リクエストID |
| SQL_EXEC_ID | bigint(20) | number(38) | SQL計画が実行されている場合、対応するSQL IDを表示します |
| TRACE_ID | varchar(128) | varchar(128) | このステートメントのTrace ID |
| SID | bigint(20) unsigned | number(38) | セッションID |
| CLIENT_IP | varchar(46) | varchar(46) |
|
| CLIENT_PORT | bigint(20) | number(38) | リクエストを送信したClient Port |
| TENANT_ID | bigint(20) | number(38) | リクエストを送信したテナントID |
| TENANT_NAME | varchar(64) | varchar(46) | リクエストを送信したテナント名 |
| EFFECTIVE_TENANT_ID | bigint(20) | number(38) | テナントID |
| USER_ID | bigint(20) | number(38) | リクエストを送信したユーザーID |
| USER_NAME | varchar(64) | varchar(46) | リクエストを送信したユーザー名 |
| USER_GROUP | bigint(20) | number(38) | ユーザーが属するリソースグループのID |
| USER_CLIENT_IP | varchar(32) | varchar(32) | リクエストを送信したクライアントのIP |
| DB_ID | bigint(20) unsigned | number(38) | データベースID |
| DB_NAME | varchar(128) | varchar(128) | データベース名 |
| SQL_ID | varchar(32) | varchar(32) | このSQLのID |
| QUERY_SQL | longtext | CLOB | 実際のSQLステートメント |
| PLAN_ID | bigint(20) | number(38) | 実行計画ID |
| AFFECTED_ROWS | bigint(20) | number(38) | 影響行数 |
| RETURN_ROWS | bigint(20) | number(38) | 返される行数 |
| PARTITION_CNT | bigint(20) | number(38) | このリクエストに関連するパーティション数 |
| RET_CODE | bigint(20) | number(38) | 実行結果の戻りコード |
| QC_ID | bigint(20) unsigned | number(38) | 並列クエリ内のqc_id |
| DFO_ID | bigint(20) | number(38) | 並列クエリ内のdfo_id |
| SQC_ID | bigint(20) | number(38) | 並列クエリ内のsqc_id |
| WORKER_ID | bigint(20) | number(38) | スレッドID |
| EVENT | varchar(64) | varchar(64) | 最長待機イベント名 |
| P1TEXT | varchar(64) | varchar(64) | 待機イベントパラメータ1 |
| P1 | bigint(20) unsigned | number(38) | 待機イベントパラメータ1の値 |
| P2TEXT | varchar(64) | varchar(64) | 待機イベントパラメータ2 |
| P2 | bigint(20) unsigned | number(38) | 待機イベントパラメータ2の値 |
| P3TEXT | varchar(64) | varchar(64) | 待機イベントパラメータ3 |
| P3 | bigint(20) unsigned | number(38) | 待機イベントパラメータ3の値 |
| LEVEL | bigint(20) | number(38) | 待機イベントのLevelレベル |
| WAIT_CLASS_ID | bigint(20) | number(38) | 待機イベントが属するClass ID |
| WAIT_CLASS# | bigint(20) | number(38) | 待機イベントが属するClassのインデックス |
| WAIT_CLASS | varchar(64) | varchar(64) | 待機イベントが属するClass名 |
| STATE | varchar(19) | varchar(19) | 待機イベントの状態 |
| WAIT_TIME_MICRO | bigint(20) | number(38) | この待機イベントが待っていた時間、単位:マイクロ秒 |
| TOTAL_WAIT_TIME_MICRO | bigint(20) | number(38) | 実行プロセス全体の待機時間の合計、単位:マイクロ秒 |
| TOTAL_WAITS | bigint(20) | number(38) | 実行プロセスの合計待機回数 |
| RPC_COUNT | bigint(20) | number(38) | 送信されたRPCの数 |
| PLAN_TYPE | bigint(20) | number(38) | 実行計画タイプ:
|
| IS_INNER_SQL | tinyint(4) | number(38) | 内部SQLリクエストかどうか |
| IS_EXECUTOR_RPC | tinyint(4) | number(38) | 現在のリクエストがRPCリクエストかどうか |
| IS_HIT_PLAN | tinyint(4) | number(38) | 計画キャッシュにヒットしたかどうか |
| REQUEST_TIME | bigint(20) | number(38) | 実行開始時刻、単位:マイクロ秒 |
| ELAPSED_TIME | bigint(20) | number(38) | リクエスト受信から実行終了までの総時間、単位:マイクロ秒 |
| NET_TIME | bigint(20) | number(38) | RPC送信からリクエスト受信までの時間、単位:マイクロ秒 |
| NET_WAIT_TIME | bigint(20) | number(38) | リクエスト受信からキューへの投入までの時間、単位:マイクロ秒 |
| QUEUE_TIME | bigint(20) | number(38) | リクエストのキュー待ち時間、単位:マイクロ秒 |
| DECODE_TIME | bigint(20) | number(38) | キューから出た後のDecode時間、単位:マイクロ秒 |
| GET_PLAN_TIME | bigint(20) | number(38) | 実行開始から計画取得までの時間、単位:マイクロ秒 |
| EXECUTE_TIME | bigint(20) | number(38) | Plan実行に要した時間、単位:マイクロ秒 |
| APPLICATION_WAIT_TIME | bigint(20) unsigned | number(38) | すべてのApplication系イベントの合計時間、単位:マイクロ秒 |
| CONCURRENCY_WAIT_TIME | bigint(20) unsigned | number(38) | すべてのConcurrency系イベントの合計時間、単位:マイクロ秒 |
| USER_IO_WAIT_TIME | bigint(20) unsigned | number(38) | すべてのuser_io系イベントの合計時間、単位:マイクロ秒 |
| SCHEDULE_TIME | bigint(20) unsigned | number(38) | すべてのSchedule系イベントの時間、単位:マイクロ秒 |
| ROW_CACHE_hit | bigint(20) | number(38) | 行キャッシュヒット数 |
| BLOOM_FILTER_CACHE_HIT | bigint(20) | number(38) | Bloom Filterキャッシュヒット数 |
| BLOCK_CACHE_HIT | bigint(20) | number(38) | ブロックキャッシュヒット数 |
| DISK_READS | bigint(20) | number(38) | 物理読み取り数 |
| RETRY_CNT | bigint(20) | number(38) | 再試行回数 |
| TABLE_SCAN | tinyint(4) | number(38) | リクエストにフルテーブルスキャンが含まれているかどうかを判断するために使用されます |
| CONSISTENCY_LEVEL | bigint(20) | number(38) | 一貫性レベル |
| MEMSTORE_READ_ROW_COUNT | bigint(20) | number(38) | MemStoreで読み取った行数 |
| SSSTORE_READ_ROW_COUNT | bigint(20) | number(38) | SSSTOREで読み取った行数 |
| DATA_BLOCK_READ_CNT | bigint(20) | NO | アクセスしたデータマイクロブロック数 |
| DATA_BLOCK_CACHE_HIT | bigint(20) | NO | ヒットしたデータマイクロブロック Cache数 |
| INDEX_BLOCK_READ_CNT | bigint(20) | NO | アクセスした中間層マイクロブロック数 |
| INDEX_BLOCK_CACHE_HIT | bigint(20) | NO | ヒットした中間層マイクロブロック Cache数 |
| BLOCKSCAN_BLOCK_CNT | bigint(20) | NO | 単一方向スキャンのデータマイクロブロック数 |
| BLOCKSCAN_ROW_CNT | bigint(20) | NO | 単一方向スキャンのデータ行数 |
| PUSHDOWN_STORAGE_FILTER_ROW_CNT | bigint(20) | NO | プッシュダウンストレージ Filterフィルタリング後の行数 |
| REQUEST_MEMORY_USED | bigint(20) | number(38) | このリクエストが消費するメモリ |
| EXPECTED_WORKER_COUNT | bigint(20) | number(38) | リクエストが期待するワーカースレッド数 |
| USED_WORKER_COUNT | bigint(20) | number(38) | リクエストが実際に使用するワーカースレッド数 |
| SCHED_INFO | varchar(16384) | varchar(16384) | リクエストのスケジューリング情報 |
| PS_CLIENT_STMT_ID | bigint(20) | NUMBER(38) | リクエストに対応するクライアントのPrepare IDを記録します:
|
| PS_INNER_STMT_ID | bigint(20) | NUMBER(38) | リクエストに対応する内部(データベース内部)Prepare IDを記録します:
|
| TX_ID | bigint(20) | NO | リクエストに対応するトランザクションのHash値 |
| SNAPSHOT_VERSION | bigint(20)unsigned | NO | 現在のステートメントのスナップショット読み取りバージョン番号 |
| REQUEST_TYPE | bigint(20) | number(38) | リクエストに対応するタイプ:
|
| IS_BATCHED_MULTI_STMT | tinyint(4) | number(38) | Batch Multi Stmtの最適化を有効にするかどうか |
| OB_TRACE_INFO | VARCHAR2(4096) | VARCHAR2(4096) | ユーザー設定のTrace情報 |
| PLAN_HASH | bigint(20) unsigned | number(38) | 実行計画のHash値 |
| PARAMS_VALUE | longtext | CLOB | パラメータ値 |
| RULE_NAME | varchar(256) | VARCHAR2(256) | ルール名 |
| TX_INTERNAL_ROUTING | bigint(20) | NUMBER | 現在のトランザクションでトランザクションルーティングが有効かどうか |
| TX_STATE_VERSION | bigint(20) unsigned | NUMBER(38) | 現在のトランザクション状態のバージョン番号 |
| FLT_TRACE_ID | varchar(1024) | varchar(1024) | フルリンクトレースのTrace IDを記録します。空の場合は、フルリンクトレースでモニタリングされていないことを意味します。このフィールドはUUIDであり、Traceとは異なります。その表現例は次のとおりです:000600d6-a5de-038c-6c80-df07e4e79149 |
| PL_TRACE_ID | varchar(128) | VARCHAR2(128) | 現在のSQLステートメントの外部PLのTrace ID |
| PLSQL_EXEC_TIME | bigint(20) | NUMBER(38) | PL実行にかかった時間 |
| TOTAL_MEMSTORE_READ_ROW_COUNT | bigint(20) | NUMBER(38) | 全作業プロセス中にMemStoreから読み出された総行数 |
| TOTAL_SSSTORE_READ_ROW_COUNT | bigint(20) | NUMBER(38) | 全作業プロセス中にSSSTOREから読み出された総行数 |
| PROXY_USER | varchar(128) | VARCHAR2(128) | プロキシユーザーログインシナリオで、プロキシユーザーの名前を返します |
| FUSE_ROW_CACHE_HIT | bigint(20) | number(38) | このフィールドは現在サポートされていません。デフォルト値はNULLです。 |
| LOCK_FOR_READ_TIME | bigint(20) |
注意OceanBaseデータベースのOracleモードでは、 |
データ読み取り時のロック待ち時間。単位:マイクロ秒 |
| PARTITION_HIT | tinyint(4) | - | ローカルパーティションにヒットしたかどうか |
| PLSQL_COMPILE_TIME | bigint(20) | NUMBER(38) | PLコンパイルにかかった時間。 |
| INSERT_DUPLICATE_ROW_COUNT | bigint(20) | NUMBER(38) | insertupまたはreplace into時の重複行数を記録します。 |
| USER_CLIENT_PORT | bigint(20) | NUMBER(38) | クライアントポート番号を表示するために使用されます。 |
| TRANS_STATUS | varchar(256) | VARCHAR2(256) | トランザクションが明示的に開始されたか、暗黙的に開始されたか、または開始されていないかを表示するために使用されます。 |
| TX_TABLE_READ_CNT | bigint(20) | NUMBER(38) | トランザクション状態テーブルの読み取り回数。 |
| OUTROW_LOB_CNT | bigint(20) | NUMBER(38) | クエリ処理中に読み取られたoutrow lob列の数。 |
| COMMIT_TIME | bigint(20) | NUMBER(38) | トランザクション内でコミットをトリガーしたSQLによって、コミットにかかった時間が記録されます。SQLがコミットをトリガーしなかった場合、デフォルト値は0です。 |
重要なイベント間の時間差関係
このビューにおける重要なイベントに対応するフィールド ELAPSED_TIME、REQUEST_TIME、NET_WAIT_TIME、QUEUE_TIME、DECODE_TIME、GET_PLAN_TIME、EXECUTE_TIME および COMMIT_TIME の関係は、以下の図のとおりです。

例
GV$OB_SQL_AUDIT ビューを使用すると、SQL実行のさまざまな観点からの情報を簡単に照会できます。以下の例では、実行時間が100ミリ秒を超えるSQLとその FLT_TRACE_ID を照会します。
/* 全リンクトレースを有効にし、セッションレベルのトレースを開始します。これにより、現在のセッションで実行されるすべてのSQLの関連時間などの情報が記録されます。サンプリング頻度は50%です。*/
obclient> CALL DBMS_MONITOR.OB_SESSION_TRACE_ENABLE(null,1,0.5,'ALL');
Query OK, 0 rows affected
obclient [oceanbase]> SELECT request_id,usec_to_time(request_time),ELAPSED_TIME,QUEUE_TIME,EXECUTE_TIME,FLT_TRACE_ID,QUERY_SQL FROM v$OB_SQL_AUDIT where ELAPSED_TIME > 100000 limit 10 ;
+------------+----------------------------+--------------+------------+--------------+--------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| request_id | usec_to_time(request_time) | ELAPSED_TIME | QUEUE_TIME | EXECUTE_TIME | FLT_TRACE_ID | QUERY_SQL |
+------------+----------------------------+--------------+------------+--------------+--------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 5950244 | 2023-09-07 16:20:47.465958 | 127623 | 26 | 127206 | 000604c0-8981-9184-518a-e234439d873c | CREATE TABLE tbl2(c1 INT PRIMARY KEY,c2 INT) |
| 5951861 | 2023-09-07 16:21:07.887121 | 333776 | 38 | 310298 | | ALTER TABLE tbl2 ADD CONSTRAINT fk1 FOREIGN KEY (c2) REFERENCES tbl3(c1) ON UPDATE SET NULL |
| 5953177 | 2023-09-07 16:21:28.215377 | 174416 | 24 | 174186 | 000604c0-8bef-5afb-f9d3-2ee0dfab4c8f | SELECT request_id,usec_to_time(request_time),ELAPSED_TIME,QUEUE_TIME,EXECUTE_TIME,FLT_TRACE_ID,QUERY_SQL FROM v$OB_SQL_AUDIT where ELAPSED_TIME > 100000 |
| 5954522 | 2023-09-07 16:21:48.317360 | 128803 | 27 | 128542 | 000604c0-8d22-1659-7b0c-a0ac0645894d | SELECT request_id,usec_to_time(request_time),ELAPSED_TIME,QUEUE_TIME,EXECUTE_TIME,FLT_TRACE_ID,QUERY_SQL FROM v$OB_SQL_AUDIT where ELAPSED_TIME > 100000 limit 10 |
+------------+----------------------------+--------------+------------+--------------+--------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+
4 rows in set