我在啟用索引監控時面臨一個問題,我執行了以下命令來啟用索引監控,然后檢查了v$object_usage視圖中的條目,但在其中找不到任何記錄:
alter index REPIP
alter index REPORT.DY_SUM_DLY_SCH_TRN_DIV 監控用量。
O/p是索引REPORT.DY_SUM_DLY_SCH_TRN_DIV改變了。
檢查v$object_usage中的條目:
SELECT index_name,table_name,monitoring,used,start_monitoring,end_monitoring
FROM v$object_usage
在輸出中沒有記錄出現。
如何除錯這個問題?
uj5u.com熱心網友回復:
如果你在v$object_usage中沒有看到記錄,是由于以下兩個原因之一:
- 索引沒有被使用。
- 該索引沒有被任何陳述句使用
。
- 你沒有用索引的所有者來查詢視圖
。
通常情況下,這是第二個原因。
V$OBJECT_USAGE視圖不包含OWNER列,所以你必須以物件所有者的身份登錄才能看到使用資料。從Oracle 12.1開始,V$OBJECT_USAGE視圖已經被廢棄,而采用{DBA|USER]}_OBJECT_USAGE視圖。其結構是相同的,但是DBA_OBJECT_USAGE視圖包括一個OWNER列。
以 SYS 的身份登錄
SQL> drop table t1 ;
Table dropped.
SQL> create table t1 ( c1 number , c2 varchar2(20) ) 。
表創建。
SQL> create index idx_t1 on t1 ( c1 ) 。
創建的索引。
SQL> declare。
2 begin
3 for h in 1 ... 10000
4 回圈
5 insert into t1 values ( h , round(dbms_random. value(1,100000) ) 。
6 end回圈。
7 commit;
8* end;
SQL> /
PL/SQL 程式成功完成。
SQL> select count(*) from t1 。
COUNT(*)
----------
10000
SQL>分析table t1計算統計。
表被分析。
SQL> analyze index idx_t1 compute statistics ;
已分析的索引。
SQL> set autotrace traceonly explain
SQL> set lines 220 pages 600
SQL> select * from t1 where c1 = 1009 ;
執行計劃
----------------------------------------------------------
計劃哈希值。3491035275
----------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 8 | 2 (0)| 00: 00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID BATCHED| T1 | 1 | 8 | 2 (0)| 00: 00:01 |
|* 2 |索引 RANGE 掃描 | IDX_T1 | 1 | | 1 (0)| 00: 00:01 |
----------------------------------------------------------------------------------------------
謂語資訊(通過操作ID識別)。
---------------------------------------------------
2 - access("C1"=1009)
SQL> alter index idx_t1 monitoring usage ;
索引被改變。
SQL> set autotrace off
SQL> select * from t1 where c1 = 1009 ;
C1 C2
---------- --------------------
1009 21639[/span
SQL> select index_name from v$object_usage where index_name = 'IDX_T1'/span> 。
no rows selected
以所有者身份登錄
SQL>/span> conn test1/Oracle_12
已連接。
SQL> col index_name for a30
SQL>col table_name for a30
SQL> col table_name
SQL> select index_name,table_name,monitoring,used,start_monitoring,end_monitoring
from v$object_usage where index_name = 'IDX_T1' ; 2
index_name table_name mon use start_monitoring end_monitoring
------------------------------ --- -- -------------------
IDX_T1 T1 YES YES 09/22/2021 08: 06:28.
SQL>
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/334032.html
標籤:
