V$INDEX_USAGE_INFO中找不到監(jiān)控索引數(shù)據(jù)的尷尬經(jīng)歷
2023-05-10 22:08 瀟湘隱者 閱讀(171) 評(píng)論(0) 收藏 舉報(bào)在一個(gè)Oracle 12.1實(shí)例中,想監(jiān)控一個(gè)表的索引使用情況,在system用戶下執(zhí)行了下面腳本以及輸出的監(jiān)控索引腳本后,發(fā)現(xiàn)V$OBJECT_USAGE下一直沒(méi)有對(duì)應(yīng)的記錄(在system用戶下查詢)
SELECT
'ALTER INDEX '||OWNER||'.'||INDEX_NAME||' MONITORING USAGE;'
FROM
DBA_INDEXES
WHERE
INDEX_TYPE != 'LOB' AND OWNER NOT IN ('SYS', 'SYSMAN', 'SYSTEM', 'MDSYS', 'WMSYS', 'TSMSYS', 'DBSNMP', 'OUTLN')
AND OWNER=UPPER('&OWNER')
AND TABLE_NAME=UPPER('&TABLE_NAME')
;
許久沒(méi)有使用這個(gè)功能了,還以為我遇到bug了,一通折騰下來(lái),居然是時(shí)間太久了,自己也忘記了一些細(xì)節(jié):V$OBJECT_USAGE只能查看/顯示當(dāng)前用戶下被監(jiān)控的索引使用統(tǒng)計(jì)信息。即使sys、system用戶也不能查看其它用戶的數(shù)據(jù)。這個(gè)跟視圖V$OBJECT_USAGE的定義有關(guān),如下所示,它在查詢條件中過(guò)濾了記錄集,只顯示當(dāng)前用戶下的記錄。
create or replace view V$OBJECT_USAGE
(INDEX_NAME,
TABLE_NAME,
MONITORING,
USED,
START_MONITORING,
END_MONITORING)
as
select io.name, t.name,
decode(bitand(i.flags, 65536), 0, 'NO', 'YES'),
decode(bitand(ou.flags, 1), 0, 'NO', 'YES'),
ou.start_monitoring,
ou.end_monitoring
from sys.obj$ io, sys.obj$ t, sys.ind$ i, sys.object_usage ou
where io.owner# = userenv('SCHEMAID')
and i.obj# = ou.obj#
and io.obj# = ou.obj#
and t.obj# = i.bo#
/
從Oracle 12.2開始,Oracle默認(rèn)會(huì)監(jiān)控索引的使用情況,而不用特意去設(shè)置監(jiān)控索引使用情況,我們只需從DBA_INDEX_USAGE查看索引的使用情況,而自己的忘性也越來(lái)越大,真是廉頗老矣尚能飯否。悲催啊!
掃描上面二維碼關(guān)注我
如果你真心覺得文章寫得不錯(cuò),而且對(duì)你有所幫助,那就不妨幫忙“推薦"一下,您的“推薦”和”打賞“將是我最大的寫作動(dòng)力!
本文版權(quán)歸作者所有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接.
浙公網(wǎng)安備 33010602011771號(hào)