ORACLE 12.2新特性-索引监控

本文内容摘自Oracle 12.2 中的索引监控功能 (Doc ID 2469640.1)

目标

本文档介绍了Oracle 12.2中索引监控的新功能。

解决方案

Oracle 12.2中的索引监控有了很大改进。

在以前的版本中,我们可以如下监视索引使用情况。

1.为索引启用MONITORING。

SQL> alter index <Index_Name> monitoring usage;

2.通过查询v $ object_usage查看索引是否已被使用。

参考:

Document 136642.1 Identifying Unused Indexes with the ALTER INDEX MONITORING USAGE Command

这个旧功能有一些限制,例如不知道索引的使用次数。

在12.2中,默认情况下启用索引监视,可以更准确地跟踪索引使用情况。

相关参数
~~~~~~~~~~~~~~~~~~~
隐含参数“_iut_stat_collection_type”控制索引使用情况监视类型。
它有两个值SAMPLED和ALL。默认为SAMPLED。
可以设置为ALL以获得最准确的结果。 但是它会导致一些开销。
因此,建议仅在特定监控期间设置ALL。

ALTER SYSTEM SET "_iut_stat_collection_type" = ALL;

相关视图
~~~~~~~~~~~~~~
V$INDEX_USAGE_INFO跟踪自上次刷新以来的索引使用情况。 每15分钟刷新一次。 每次刷新后,ACTIVE_ELEM_COUNT将重置为0,LAST_FLUSH_TIME将更新为当前时间。

INDEX_STATS_COLLECTION_TYPE=1 如果_iut_stat_collection_type = SAMPLED.
INDEX_STATS_COLLECTION_TYPE=0 如果 _iut_stat_collection_type = ALL.

SQL> DESC v$index_usage_info
Name Null? Type
----------------------------------------- -------- ----------------------------
INDEX_STATS_ENABLED NUMBER
INDEX_STATS_COLLECTION_TYPE NUMBER
ACTIVE_ELEM_COUNT NUMBER
ALLOC_ELEM_COUNT NUMBER
MAX_ELEM_COUNT NUMBER
FLUSH_COUNT NUMBER
TOTAL_FLUSH_DURATION NUMBER
LAST_FLUSH_TIME TIMESTAMP(3)
STATUS_MSG VARCHAR2(256)
CON_ID NUMBER

DBA_INDEX_USAGE 显示对象级别的索引使用情况(当这个信息被刷新到磁盘上后)

SQL> DESC dba_index_usage
Name Null? Type
----------------------------------------- -------- ----------------------------
OBJECT_ID NOT NULL NUMBER
NAME NOT NULL VARCHAR2(128)
OWNER NOT NULL VARCHAR2(128)
TOTAL_ACCESS_COUNT NUMBER
TOTAL_EXEC_COUNT NUMBER
TOTAL_ROWS_RETURNED NUMBER
BUCKET_0_ACCESS_COUNT NUMBER
BUCKET_1_ACCESS_COUNT NUMBER
BUCKET_2_10_ACCESS_COUNT NUMBER
BUCKET_2_10_ROWS_RETURNED NUMBER
BUCKET_11_100_ACCESS_COUNT NUMBER
BUCKET_11_100_ROWS_RETURNED NUMBER
BUCKET_101_1000_ACCESS_COUNT NUMBER
BUCKET_101_1000_ROWS_RETURNED NUMBER
BUCKET_1000_PLUS_ACCESS_COUNT NUMBER
BUCKET_1000_PLUS_ROWS_RETURNED NUMBER
LAST_USED DATE

HR 中的演示
~~~~~~~~~~~~~~~~~~~~~~

SQL> conn hr/hr

SQL> alter session set nls_date_format = 'DD-MON-RR hh24:mi:ss';

INDEX_STATS_ENABLED INDEX_STATS_COLLECTION_TYPE ACTIVE_ELEM_COUNT LAST_FLUSH_TIME
------------------- --------------------------- ----------------- -----------------------------------
1 1 0 29-AUG-17 12.16.32.572 PM

SQL> alter session set "_iut_stat_collection_type" = all;

SQL> select INDEX_STATS_ENABLED, INDEX_STATS_COLLECTION_TYPE, ACTIVE_ELEM_COUNT, LAST_FLUSH_TIME from v$index_usage_info;

INDEX_STATS_ENABLED INDEX_STATS_COLLECTION_TYPE ACTIVE_ELEM_COUNT LAST_FLUSH_TIME
------------------- --------------------------- ----------------- -----------------------------------
1 0 0 29-AUG-17 12.16.32.572 PM

SQL> select OBJECT_ID, NAME, OWNER, TOTAL_ACCESS_COUNT, TOTAL_EXEC_COUNT, LAST_USED from dba_index_usage;

no rows selected

SQL> select first_name from employees where employee_id = 100;

FIRST_NAME
--------------------
Steven

SQL> select INDEX_STATS_ENABLED, INDEX_STATS_COLLECTION_TYPE, ACTIVE_ELEM_COUNT, LAST_FLUSH_TIME from v$index_usage_info;

INDEX_STATS_ENABLED INDEX_STATS_COLLECTION_TYPE ACTIVE_ELEM_COUNT LAST_FLUSH_TIME
------------------- --------------------------- ----------------- -----------------------------------
1 0 1 29-AUG-17 12.31.35.020 PM

SQL> select OBJECT_ID, NAME, OWNER, TOTAL_ACCESS_COUNT, TOTAL_EXEC_COUNT, LAST_USED from dba_index_usage;

no rows selected

-- 等待15分钟

SQL> select INDEX_STATS_ENABLED, INDEX_STATS_COLLECTION_TYPE, ACTIVE_ELEM_COUNT, LAST_FLUSH_TIME from v$index_usage_info;

INDEX_STATS_ENABLED INDEX_STATS_COLLECTION_TYPE ACTIVE_ELEM_COUNT LAST_FLUSH_TIME
------------------- --------------------------- ----------------- ---------------------------------------------------------------------------
1 0 1 29-AUG-17 12.46.37.381 PM

SQL> select OBJECT_ID, NAME, OWNER, TOTAL_ACCESS_COUNT, TOTAL_EXEC_COUNT, LAST_USED from dba_index_usage;

OBJECT_ID NAME OWNER TOTAL_ACCESS_COUNT TOTAL_EXEC_COUNT LAST_USED
---------- -------------------- ------------------------ ------------------ ---------------- ------------------
73347 EMP_EMP_ID_PK HR 1 1 29-AUG-17 12:46:37

SQL> select first_name from employees where employee_id = 100;

FIRST_NAME
--------------------
Steven

SQL> select INDEX_STATS_ENABLED, INDEX_STATS_COLLECTION_TYPE, ACTIVE_ELEM_COUNT, LAST_FLUSH_TIME from v$index_usage_info;

INDEX_STATS_ENABLED INDEX_STATS_COLLECTION_TYPE ACTIVE_ELEM_COUNT LAST_FLUSH_TIME
------------------- --------------------------- ----------------- -------------------------------------
1 0 1 29-AUG-17 12.46.37.381 PM

SQL> select OBJECT_ID, NAME, OWNER, TOTAL_ACCESS_COUNT, TOTAL_EXEC_COUNT, LAST_USED from dba_index_usage;

OBJECT_ID NAME OWNER TOTAL_ACCESS_COUNT TOTAL_EXEC_COUNT LAST_USED
---------- -------------------- ------------------------ ------------------ ---------------- ------------------
73347 EMP_EMP_ID_PK HR 1 1 29-AUG-17 12:46:37

-- 等待15分钟

SQL> select INDEX_STATS_ENABLED, INDEX_STATS_COLLECTION_TYPE, ACTIVE_ELEM_COUNT, LAST_FLUSH_TIME from v$index_usage_info;

INDEX_STATS_ENABLED INDEX_STATS_COLLECTION_TYPE ACTIVE_ELEM_COUNT LAST_FLUSH_TIME
------------------- --------------------------- ----------------- -------------------------------------
1 0 1 29-AUG-17 01.01.39.587 PM

SQL> select OBJECT_ID, NAME, OWNER, TOTAL_ACCESS_COUNT, TOTAL_EXEC_COUNT, LAST_USED from dba_index_usage;

OBJECT_ID NAME OWNER TOTAL_ACCESS_COUNT TOTAL_EXEC_COUNT LAST_USED
---------- -------------------- ------------------------ ------------------ ---------------- ------------------
73347 EMP_EMP_ID_PK HR 2 2 29-AUG-17 13:01:39

猜你喜欢

转载自blog.csdn.net/j_ychen/article/details/96831154
今日推荐