利用v$session_longops監控long RUN操作
一、什麼情況下,操作資訊會出現在V$SESSION_LONGOPS
同時滿足以下幾個條件,操作資訊才會出現在V$SESSION_LONGOPS中。
1、操作是以下幾種操作之一
# Table scan;
# Index Fast Full Scan;
# Hash join;
# Sort/Merge;
# Sort Output;
# Rollback;
# Gather Table's Index Statistics
不同的版本下V$SESSION_LONGOPS記錄的操作可能會不一樣。
2、操作時間大於6秒
3、讀取的block數目大於一定量
1)如果是TABLE FULL SCAN,讀取的block數目至少大於10000
2)如果是Index Fast Full Scan,讀取的block數目至少大於1000
3)其他操作讀取block的數目不明
二、如何監控耗時長的操作
舉例說明。
會話1:發出查詢
suk@SUK> select * from t2;
已選擇826112行。
已用時間: 00: 00: 29.89
執行計劃
----------------------------------------------------------
0 SELECT STATEMENT ptimizer=CHOOSE (Cost=123 Card=103264 Byte
s=8880704)
1 0 TABLE ACCESS (FULL) OF 'T2' (Cost=123 Card=103264 Bytes=88
80704)
統計資訊
----------------------------------------------------------
0 recursive calls
0 db block gets
64505 consistent gets
0 physical reads
會話2:在會話1查詢過後一小段時間後(大於6s),查詢V$SESSION_LONGOPS檢視
SQL> SELECT SE.SID,
2 OPNAME,
3 TRUNC(SOFAR / TOTALWORK * 100, 2) || '%' AS PCT_WORK,
4 ELAPSED_SECONDS ELAPSED,
5 ROUND(ELAPSED_SECONDS * (TOTALWORK - SOFAR) / SOFAR) REMAIN_TIME,
6 SQL_TEXT
7 FROM V$SESSION_LONGOPS SL, V$SQLAREA SA, V$SESSION SE
8 WHERE SL.SQL_HASH_VALUE = SA.HASH_VALUE
9 AND SL.SID = SE.SID
10 AND SOFAR != TOTALWORK
11 ORDER BY START_TIME
12 ;
(
SELECT SE.SID,OPNAME,TRUNC(SOFAR / TOTALWORK * 100, 2) || '%' AS PCT_WORK,ELAPSED_SECONDS ELAPSED,ROUND(ELAPSED_SECONDS * (TOTALWORK - SOFAR) / SOFAR) REMAIN_TIME,SQL_TEXT
FROM V$SESSION_LONGOPS SL, V$SQLAREA SA, V$SESSION SE
WHERE SL.SQL_HASH_VALUE = SA.HASH_VALUE
AND SL.SID = SE.SID
AND SOFAR != TOTALWORK
ORDER BY START_TIME;
)
SID OPNAME PCT_WORK ELAPSED REMAIN_TIME SQL_TEXT
---------- ----------------------------- ------------ ---------- ----------- --------------------------
------------------------
10 Table Scan 67.07% 21 10 select * from t2
會話1的真實執行時間:29.89s
會話2從V$SESSION_LONGOPS的估算時間:21 + 10 = 31s
可以看到,時間執行和估算的有誤差,但是大體是正確的。
在實際中,你可能通過這個查詢估算到某個SQL執行的剩餘時間很短了,但實際上操作過了很久才結束。
這是因為V$SESSION_LONGOPS只記錄部分操作的資訊,但是一個SQL可能會包含很多個操作步驟,V$SESSION_LONGOPS記錄的只是這個SQL要執行眾多操作的一步。
同時滿足以下幾個條件,操作資訊才會出現在V$SESSION_LONGOPS中。
1、操作是以下幾種操作之一
# Table scan;
# Index Fast Full Scan;
# Hash join;
# Sort/Merge;
# Sort Output;
# Rollback;
# Gather Table's Index Statistics
不同的版本下V$SESSION_LONGOPS記錄的操作可能會不一樣。
2、操作時間大於6秒
3、讀取的block數目大於一定量
1)如果是TABLE FULL SCAN,讀取的block數目至少大於10000
2)如果是Index Fast Full Scan,讀取的block數目至少大於1000
3)其他操作讀取block的數目不明
二、如何監控耗時長的操作
舉例說明。
會話1:發出查詢
suk@SUK> select * from t2;
已選擇826112行。
已用時間: 00: 00: 29.89
執行計劃
----------------------------------------------------------
0 SELECT STATEMENT ptimizer=CHOOSE (Cost=123 Card=103264 Byte
s=8880704)
1 0 TABLE ACCESS (FULL) OF 'T2' (Cost=123 Card=103264 Bytes=88
80704)
統計資訊
----------------------------------------------------------
0 recursive calls
0 db block gets
64505 consistent gets
0 physical reads
會話2:在會話1查詢過後一小段時間後(大於6s),查詢V$SESSION_LONGOPS檢視
SQL> SELECT SE.SID,
2 OPNAME,
3 TRUNC(SOFAR / TOTALWORK * 100, 2) || '%' AS PCT_WORK,
4 ELAPSED_SECONDS ELAPSED,
5 ROUND(ELAPSED_SECONDS * (TOTALWORK - SOFAR) / SOFAR) REMAIN_TIME,
6 SQL_TEXT
7 FROM V$SESSION_LONGOPS SL, V$SQLAREA SA, V$SESSION SE
8 WHERE SL.SQL_HASH_VALUE = SA.HASH_VALUE
9 AND SL.SID = SE.SID
10 AND SOFAR != TOTALWORK
11 ORDER BY START_TIME
12 ;
(
SELECT SE.SID,OPNAME,TRUNC(SOFAR / TOTALWORK * 100, 2) || '%' AS PCT_WORK,ELAPSED_SECONDS ELAPSED,ROUND(ELAPSED_SECONDS * (TOTALWORK - SOFAR) / SOFAR) REMAIN_TIME,SQL_TEXT
FROM V$SESSION_LONGOPS SL, V$SQLAREA SA, V$SESSION SE
WHERE SL.SQL_HASH_VALUE = SA.HASH_VALUE
AND SL.SID = SE.SID
AND SOFAR != TOTALWORK
ORDER BY START_TIME;
)
SID OPNAME PCT_WORK ELAPSED REMAIN_TIME SQL_TEXT
---------- ----------------------------- ------------ ---------- ----------- --------------------------
------------------------
10 Table Scan 67.07% 21 10 select * from t2
會話1的真實執行時間:29.89s
會話2從V$SESSION_LONGOPS的估算時間:21 + 10 = 31s
可以看到,時間執行和估算的有誤差,但是大體是正確的。
在實際中,你可能通過這個查詢估算到某個SQL執行的剩餘時間很短了,但實際上操作過了很久才結束。
這是因為V$SESSION_LONGOPS只記錄部分操作的資訊,但是一個SQL可能會包含很多個操作步驟,V$SESSION_LONGOPS記錄的只是這個SQL要執行眾多操作的一步。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12361284/viewspace-620163/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 利用v$session_longops監控long RUN操作(轉)SessionGo
- [zt] 用v$session_longops監控long RUN操作SessionGo
- 利用v$session_longops監控長操作SessionGo
- 使用v$session_longops來監控rman備份進度SessionGo
- 監控Oracle長時間執行的工作(v$session_longops)OracleSessionGo
- V$SESSION_LONGOPSSessionGo
- V$SESSION_LONGOPS bugSessionGo
- 監控批量操作進度
- 效能檢視 V$Session_LONGOPSSessionGo
- 利用觸發器監控對某個表操作的使用者資訊觸發器
- 利用nsca監控oracle的session數OracleSession
- 操作LONG型別型別
- V$SESSION_LONGOPS 檢視的用法SessionGo
- V$SESSION_LONGOPS bug 【Blog 搬家】SessionGo
- 利用btrace線上監控java程式狀態Java
- 【監控】open-falcon v0.2 部署、小米開源監控部署
- 對table的操作進行監控
- Process Monitor監控目錄 - 監控檔案被哪個程式操作了
- 利用superlance監控supervisor執行狀態
- 利用shell指令碼監控網站狀態指令碼網站
- 利用OSW工具監控作業系統效能作業系統
- Zabbix監控阿里雲SLB操作指引阿里
- v$session_longops 檢視回滾進度SessionGo
- 動態檢視V$SESSION_LONGOPS學習SessionGo
- V$SESSION_LONGOPS超過系統時間SessionGo
- 分散式監控系統Zabbix3.4-針對MongoDB效能監控操作筆記分散式MongoDB筆記
- 利用TICK搭建Docker容器視覺化監控中心Docker視覺化
- 利用Resource Timing監控資源載入速度
- 如何高效利用 Grafana 監控分析 TiDB 指標GrafanaTiDB指標
- SpringBoot如何利用Actuator來監控應用?Spring Boot
- 利用AFNetworking監控網路狀態 - iOSiOS
- 利用Loadrunner來監控Linux伺服器Linux伺服器
- 【檢視】利用USER_TAB_MODIFICATIONS檢視輔助監控表的增刪改等操作
- STANDBY中NOLOGGING操作的監控
- 學習動態效能表(十)--V$SESSION_LONGOPSSessionGo
- 利用監控寶網站監控服務功能快速知曉網站/伺服器穩定性網站伺服器
- 滲透技巧——如何巧妙利用PSR監控Windows桌面Windows
- 聊聊如何利用p6spy進行sql監控SQL