V$ACTIVE_SESSION_HISTORY檢視的使用
V$ACTIVE_SESSION_HISTORY 顯示資料庫中的取樣會話活動。ASH每秒從v$session中取快照,存在V$ACTIVE_SESSION_HISTORY中,並收集所有活動會話的等待資訊。若ASH資料被重新整理到磁碟,則需要從DBA_HIS_ACTIVE_SESS_HISTORY檢視中查詢相關資訊。
該檢視是ASH的核心,用以記錄活動SESSION的歷史等待資訊,每秒取樣一次,這部分內容記錄在記憶體中,期望值是記錄一個小時的內容。
用法舉例:查詢最近一分鐘內,最消耗CPU的sql語句
SELECT sql_id, count(*), round(count(*) / sum(count(*)) over(), 2) pctload
FROM V$ACTIVE_SESSION_HISTORY
WHERE sample_time > sysdate – 1 / (24 * 60)
AND session_type <> 'BACKGROUND’
AND session_state = 'ON CPU’
GROUP BY sql_id
ORDER BY count(*) desc;
用法舉例:查詢最近一分鐘內,最消耗I/O的sql語句
SELECT ash.sql_id,count(*)
FROM V$ACTIVE_SESSION_HISTORY ASH,V$EVENT_NAME EVT
WHERE ash.sample_time > sysdate -1/(24*60)
AND ash.session_state = 'WAITING’
AND ash.event_id = evt.event_id
AND evt.wait_class = 'USER I/O’
GROUP BY ash.sql_id
ORDER BY count(*) desc;
用法舉例:查詢最近一分鐘內,最消耗CPU的session
SELECT session_id,count(*)
FROM V$ACTIVE_SESSION_HISTORY
WHERE session_state = 'ON CPU’
AND sample_time > sysdate -1/(24*60)
GROUP BY session_id
ORDER BY count(*) desc;
用法舉例:查詢最近一分鐘內,最消耗資源的sql語句
SELECT ash.sql_id,
sum(decode(ash.session_state,'ON CPU’,1,0)) “CPU”,
sum(decode(ash.session_state,'WAITING’,1,0)) -
sum(decode(ash.session_state,'WAITING’,decode(en.wait_class,'USER I/O’,1,0),0)) “WAIT”,
sum(decode(ash.session_state,'WAITING’,decode(en.wait_class,'USER I/O’,1,0),0)) “IO”,
sum(decode(ash.session_state,'ON CPU’,1,1)) “TOTAL”
FROM V$ACTIVE_SESSION_HISTORY ASH,V$EVENT_NAME EN
WHERE SQL_ID is not null and en.event#=ash.event# and ash.sample_time > sysdate -1/(24*60)
GROUP BY ash.sql_id
ORDER BY sum(decode(ash.session_state,'ON CPU’,1,1)) desc;
用法舉例:查詢最近一分鐘內,最消耗資源的session
SELECT ash.session_id,ash.session_serial#,ash.user_id,ash.program,
sum(decode(ash.session_state,'ON CPU’,1,0)) “CPU”,
sum(decode(ash.session_state,'WAITING’,1,0)) -
sum(decode(ash.session_state,'WAITING’,decode(en.wait_class,'USER I/O’,1,0),0)) “WAITING”,
sum(decode(ash.session_state,'WAITING’,decode(en.wait_class,'USER I/O’,1,0),0)) “IO”,
sum(decode(ash.session_state,'ON CPU’,1,1)) “TOTAL”
FROM V$ACTIVE_SESSION_HISTORY ASH,V$EVENT_NAME EN
WHERE en.event# = ash.event# and ash.sample_time > sysdate -1/(24*60)
GROUP BY ash.session_id,ash.user_id,ash.session_serial#,ash.program
ORDER BY sum(decode(ash.session_state,'ON CPU’,1,1))
---------------------
在資料庫出現效能問題的時候使用awr,ash,addm都是不錯的選擇,實際上直接查詢v$active_session_history也能很快定位解決問題。
實際上如果檢視v$active_session_history檢視,結合一些檢視可以獲取許多資訊。
舉幾個例子來說明:
1.確定那個物件有高的等待:
SELECT a.current_obj#, o.object_name, o.object_type, a.event, SUM (a.wait_time + a.time_waited) total_wait_time
FROM v$active_session_history a, dba_objects o
WHERE a.sample_time BETWEEN SYSDATE - 30 / 1440 AND SYSDATE AND a.current_obj# = o.object_id
GROUP BY a.current_obj#, o.object_name, o.object_type, a.event
ORDER BY total_wait_time desc ;
2.看看一段時間主要是那些等待事件:
SELECT a.event, SUM (a.wait_time + a.time_waited) total_wait_time
FROM v$active_session_history a
WHERE a.sample_time BETWEEN SYSDATE - 30 / 1440 AND SYSDATE
GROUP BY a.event
ORDER BY total_wait_time DESC;
3.看看那個回話有問題:
SELECT s.SID, s.username, SUM (a.wait_time + a.time_waited) total_wait_time
FROM v$active_session_history a, v$session s
WHERE a.sample_time BETWEEN SYSDATE - 30 / 1440 AND SYSDATE AND a.session_id = s.SID
GROUP BY s.SID, s.username
ORDER BY total_wait_time DESC;
--當然這個只能查詢最近的會準一點,回話退出就不行了。
4.看看那個sql語句有問題。
SELECT a.user_id, d.username, s.sql_text, SUM (a.wait_time + a.time_waited) total_wait_time
FROM v$active_session_history a, v$sqlarea s, dba_users d
WHERE a.sample_time BETWEEN SYSDATE - 15 / 1440 AND SYSDATE AND a.sql_id = s.sql_id AND a.user_id = d.user_id
GROUP BY a.user_id, s.sql_text, d.username
order by SUM (a.wait_time + a.time_waited) desc
-- 這裡查詢的是v$sqlarea檢視。
同樣你可以使用檢視DBA_HIST_ACTIVE_SESS_HISTORY代替v$active_session_history查詢歷史的資訊。
select * from dba_objects where wner='SYS' and object_name like 'DBA_HIST%' and object_type='VIEW';
利用這些檢視定位許多資訊問題
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14377/viewspace-2286582/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20211214]檢視檢視V$ACTIVE_SESSION_HISTORY遇到奇怪問題.txtSession
- 檢視V$DATAGUARD_STATS
- odoo檢視入門學習- tree檢視的使用Odoo
- [20211019]V$DETACHED_SESSION檢視.txtSession
- linux:檢視使用中的埠Linux
- docker 容器的使用與檢視Docker
- 資料庫檢視的使用資料庫
- 使用Excel的2個檢視Excel
- [20200212]使用DBMS_SHARED_POOL.MARKHOT與檢視v$open_cursor.txt
- [20210528]V$INDEXED_FIXED_COLUMN檢視.txtIndex
- [20210418]查詢v$檢視問題.txt
- dwg檢視器使用技巧(方便好用的dwg檢視器推薦 )
- 使用netstat命令檢視埠的使用情況
- 檢視macOS下正在使用的zshMac
- 檢視oracle資料庫的連線數以及使用者檢視Oracle資料庫
- 選擇使用通用檢視(Generic Views)或檢視集(ViewSets)View
- 11 UML中的邏輯檢視、程序檢視、實現檢視、部署檢視
- 在DataLakeAnalytics中使用檢視
- 使用iostat檢視磁碟IOiOS
- 如何檢視網頁元素使用的js網頁JS
- Oracle物化檢視的建立及使用(二)Oracle
- Oracle物化檢視的建立及使用(一)Oracle
- 使用 gdb 檢視 coredump 檔案的 backtrace
- Tidb 運維--叢集檢視的使用TiDB運維
- 22. 使用MySQL之使用檢視MySql
- 如何使用win10自帶的照片檢視器 win10使用圖片檢視器的方法Win10
- [20181103]12c檢視V$EVENT_NAME.txt
- ORACLE 閃回檢視v$flashback_database_log/statOracleDatabase
- [20201207]12c v$open_cursor檢視.txt
- DB2檢視索引的使用情況DB2索引
- 使用 jstat 命令檢視 JVM 的GC資訊JSJVMGC
- 使用sysdig檢視容器裡的系統呼叫
- 檢視使用 MySQL Shell 的連線狀態MySql
- DRF檢視的使用及原始碼流程分析原始碼
- [20180503]檢視提示使用索引.txt索引
- 在檢視中使用會話會話
- Lumen 中使用 response 返回檢視
- Linux檢視CPU使用率Linux