轉(zhuǎn)載:學(xué)習(xí)Oracle動態(tài)性能表-(4)-V$SESSTAT
按照OracleOnlineBook中的描述,v$sesstat存儲session從login到logout的詳細(xì)資源使用統(tǒng)計(jì)。
類似于v$sysstat,該視圖存儲下列類別的統(tǒng)計(jì):
l 事件發(fā)生次數(shù)的統(tǒng)計(jì),如用戶提交數(shù)。
l 數(shù)據(jù)產(chǎn)生,存取或者操作的total列(如:redo size)
l 執(zhí)行操作所花費(fèi)的時(shí)間累積,例如session CPU占用(如果TIMED_STATISTICS值為true)
注意:
如果初始參數(shù)STATISTICS_LEVEL被設(shè)置為TYPICAL或ALL,時(shí)間統(tǒng)計(jì)被數(shù)據(jù)庫自動收集如果STATISTICS_LEVEL被設(shè)置為BASIC,你必須設(shè)置TIMED_STATISTICS值為TRUE以打開收集功能。
如果你已設(shè)置了DB_CACHE_ADVICE,TIMED_STATISTICS或TIMED_OS_STATISTICS,或在初始參數(shù)文件或使用ALTER_SYSTEM或ALTER SESSION,那么你所設(shè)定的值的值將覆蓋STATISTICS_LEVEL的值。
v$sysstat和v$sesstat差別如下:
n v$sesstat只保存session數(shù)據(jù),而v$sysstat則保存所有sessions的累積值。
n v$sesstat只是暫存數(shù)據(jù),session退出后數(shù)據(jù)即清空。v$sysstat則是累積的,只有當(dāng)實(shí)例被shutdown才會清空。
n v$sesstat不包括統(tǒng)計(jì)項(xiàng)名稱,如果要獲得統(tǒng)計(jì)項(xiàng)名稱則必須與v$sysstat或v$statname連接查詢獲得。
v$sesstat可被用于找出如下類型session:
n 高資源占用
n 高平均資源占用比(登陸后資源使用率)
n 默認(rèn)資源占用比(兩快照之間)
在V$SESSTAT中使用統(tǒng)計(jì)
多數(shù)v$sesstat中的統(tǒng)計(jì)參考是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:下列找出當(dāng)前session中最高的logical和Physical I/O比率.
下列SQL語句顯示了所有連接到數(shù)據(jù)庫的session邏輯、物理讀比率(每秒)。logical和physical I/O比率是通過自登陸后的時(shí)間消耗計(jì)算得出。對于sessions連接到數(shù)據(jù)庫這種長周期操作而言也許不夠精確,不過做個(gè)示例卻足夠了。
先獲得session邏輯讀和物理讀統(tǒng)計(jì)項(xiàng)的STATISTIC#值:
SELECTname, statistic#
FROM V$STATNAME
WHEREnameIN ('session logical reads','physical reads') ;
NAME STATISTIC#
------------------------------ ----------
session logical reads 9
physical reads 40
通過上面獲得的STATISTIC#值執(zhí)行下列語句:
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連接查詢某個(gè)SID各項(xiàng)信息。
select a.*,b.name
from v$sesstat a,v$statname b
where a.sid=10and a.statistic#=b.statistic#;
(2)-v$mystat
本視圖是v$sesstat的一個(gè)子集,返回當(dāng)前session的統(tǒng)計(jì)項(xiàng)。當(dāng)通過觸發(fā)器審計(jì)session資源使用,可以使用v$mystat來捕獲資源使用,這將比直接掃描v$sesstat的列要節(jié)省資源的多。