轉載:學習Oracle動態性能表-(4)-V$SESSTAT
按照OracleOnlineBook中的描述,v$sesstat存儲session從login到logout的詳細資源使用統計。
類似于v$sysstat,該視圖存儲下列類別的統計:
l 事件發生次數的統計,如用戶提交數。
l 數據產生,存取或者操作的total列(如:redo size)
l 執行操作所花費的時間累積,例如session CPU占用(如果TIMED_STATISTICS值為true)
注意:
如果初始參數STATISTICS_LEVEL被設置為TYPICAL或ALL,時間統計被數據庫自動收集如果STATISTICS_LEVEL被設置為BASIC,你必須設置TIMED_STATISTICS值為TRUE以打開收集功能。
如果你已設置了DB_CACHE_ADVICE,TIMED_STATISTICS或TIMED_OS_STATISTICS,或在初始參數文件或使用ALTER_SYSTEM或ALTER SESSION,那么你所設定的值的值將覆蓋STATISTICS_LEVEL的值。
v$sysstat和v$sesstat差別如下:
n v$sesstat只保存session數據,而v$sysstat則保存所有sessions的累積值。
n v$sesstat只是暫存數據,session退出后數據即清空。v$sysstat則是累積的,只有當實例被shutdown才會清空。
n v$sesstat不包括統計項名稱,如果要獲得統計項名稱則必須與v$sysstat或v$statname連接查詢獲得。
v$sesstat可被用于找出如下類型session:
n 高資源占用
n 高平均資源占用比(登陸后資源使用率)
n 默認資源占用比(兩快照之間)
在V$SESSTAT中使用統計
多數v$sesstat中的統計參考是v$sysstat描述的子集,包括session logical reads, CPU used by this session, db block changes, redo size, physical writes, parse count (hard), parse count (total), sorts (memory), and sorts (disk).
V$SESSTAT常用列說明
n SID:session唯一ID
n STATISTIC#:資源唯一ID
n VALUE:資源使用
示例1:下列找出當前session中最高的logical和Physical I/O比率.
下列SQL語句顯示了所有連接到數據庫的session邏輯、物理讀比率(每秒)。logical和physical I/O比率是通過自登陸后的時間消耗計算得出。對于sessions連接到數據庫這種長周期操作而言也許不夠精確,不過做個示例卻足夠了。
先獲得session邏輯讀和物理讀統計項的STATISTIC#值:
SELECTname, statistic#
FROM V$STATNAME
WHEREnameIN ('session logical reads','physical reads') ;
NAME STATISTIC#
------------------------------ ----------
session logical reads 9
physical reads 40
通過上面獲得的STATISTIC#值執行下列語句:
SELECT ses.sid
, DECODE(ses.action,NULL,'online','batch') "User"
, MAX(DECODE(sta.statistic#,9,sta.value,0))
/greatest(3600*24*(sysdate-ses.logon_time),1) "Log IO/s"
, MAX(DECODE(sta.statistic#,40,sta.value,0))
/greatest(3600*24*(sysdate-ses.logon_time),1) "Phy IO/s"
, 60*24*(sysdate-ses.logon_time) "Minutes"
FROM V$SESSION ses
, V$SESSTAT sta
WHERE ses.status = 'ACTIVE'
AND sta.sid = ses.sid
AND sta.statistic# IN (9,40)
GROUP BY ses.sid, ses.action, ses.logon_time
ORDER BY
SUM( DECODE(sta.statistic#,40,100*sta.value,sta.value) )
/ greatest(3600*24*(sysdate-ses.logon_time),1) DESC;
SID User Log IO/s Phy IO/s Minutes
----- ------ -------- -------- -------
1951 batch 291 257.3 1
470 online 6,161 62.9 0
730 batch 7,568 43.2 197
2153 online 1,482 98.9 10
2386 batch 7,620 35.6 35
1815 batch 7,503 35.5 26
1965 online 4,879 42.9 19
1668 online 4,318 44.5 1
1142 online 955 69.2 35
1855 batch 573 70.5 8
1971 online 1,138 56.6 1
1323 online 3,263 32.4 5
1479 batch 2,857 35.1 3
421 online 1,322 46.8 15
2405 online 258 50.4 8
示例2:又例如通過v$sesstat和v$statname連接查詢某個SID各項信息。
select a.*,b.name
from v$sesstat a,v$statname b
where a.sid=10and a.statistic#=b.statistic#;
(2)-v$mystat
本視圖是v$sesstat的一個子集,返回當前session的統計項。當通過觸發器審計session資源使用,可以使用v$mystat來捕獲資源使用,這將比直接掃描v$sesstat的列要節省資源的多。