[20211104]12cR2 new index usage tracking.txt --//Oracle12.2引入了索引使用跟踪,以取代以前的索引监控。而不是只判断是否使用了索引(DBA_OBJECT_USAGE.used),使用跟踪提供 --//了一个量化的索引使用统计数据,如访问次数、每次访问返回的行数。 --//11g使用V$OBJECT_USAGE视图,我估计很少人使用。 --//有两个视图V$INDEX_USAGE_INFO 和DBA_INDEX_USAGE 以及3个隐藏参数,用于报告和控制索引使用情况的跟踪: --//V$INDEX_USAGE_INFO --//跟踪自上次刷新以来的索引使用情况。每15分钟冲洗一次。每次刷新后,ACTIVE_ELEM_COUNT被重置为0,LAST_FLUSH_TIME被更新为 --//当前时间。 --//DBA_INDEX_USAGE --//将对象刷新到磁盘后,显示对象级索引使用情况。 --//在生产系统简单探究看看: 1.环境: SYS@127.0.0.1:xxxxx/ddhhh> @ prxx ============================== PORT_STRING : x86_64/Linux 2.4.xx VERSION : 19.0.0.0.0 BANNER : Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production BANNER_FULL : Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.9.0.0.0 BANNER_LEGACY : Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production CON_ID : 0 PL/SQL procedure successfully completed. SYS@127.0.0.1:xxxxx/ddhhh> @ hide _iut_ NAME DESCRIPTION DEFAULT_VALUE SESSION_VALUE SYSTEM_VALUE ISSES ISSYS_MOD ------------------------- ---------------------------------------- ------------- ------------- ------------ ----- --------- _iut_enable Control Index usage tracking TRUE TRUE TRUE FALSE IMMEDIATE _iut_max_entries Maximum Index entries to be tracked TRUE 30000 30000 FALSE IMMEDIATE _iut_stat_collection_type Specify Index usage stat collection type TRUE SAMPLED SAMPLED TRUE IMMEDIATE --//缺省_iut_enable=true,也就是缺省索引监控是打开的。 --//如果需要获得准确的统计可以设置_iut_stat_collection_type=ALL. SYS@127.0.0.1:xxxxx/ddhhh> @ bg m00 ADDR PID SPID PROGRAM ---------------- ------- ------ -------------------------- 00000002A0E005A8 9 20287 oracle@oda1 (M001) 00000002C0D72868 62 17664 oracle@oda1 (M000) 00000002C0D7BE78 97 20291 oracle@oda1 (M002) 00000002D0EE4FD0 311 62640 oracle@oda1 (M003) --//感觉oracle设计不好,后台进程没有简单的说明。 $ cat bgx.sql select s.program, s.module, s.action, s.sid, p.pid, p.spid from v$session s, v$process p where s.paddr=p.addr and S.PROGRAM like upper('%&1%') order by s.program; SYS@127.0.0.1:xxxxx/ddhhh> @ bgx m00 PROGRAM MODULE ACTION SID PID SPID -------------------------- ------------ ----------------------------- ----- ------- ------ oracle@oda1 (M000) MMON_SLAVE Intensive AutoTask Dispatcher 608 62 17664 oracle@oda1 (M001) MMON_SLAVE Automatic Report Flush 2719 9 20287 oracle@oda1 (M002) MMON_SLAVE KDILM background EXEcution 5139 97 20291 oracle@oda1 (M003) MMON_SLAVE KDILM background CLeaNup 3330 311 62640 --//猜测后台进程M000 完成这项工作。 SYS@127.0.0.1:xxxxx/ddhhh> select * from v$index_usage_info 2 @ prxx ============================== INDEX_STATS_ENABLED : 1 INDEX_STATS_COLLECTION_TYPE : 1 ACTIVE_ELEM_COUNT : 121 ALLOC_ELEM_COUNT : 210 MAX_ELEM_COUNT : 30000 FLUSH_COUNT : 52 TOTAL_FLUSH_DURATION : 850315 LAST_FLUSH_TIME : 2021-11-04 11:08:06.424 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ STATUS_MSG : CON_ID : 0 PL/SQL procedure successfully completed. --//等15分钟看看。 SYS@127.0.0.1:xxxxx/ddhhh> select * from v$index_usage_info 2 @ prxx ============================== INDEX_STATS_ENABLED : 1 INDEX_STATS_COLLECTION_TYPE : 1 ACTIVE_ELEM_COUNT : 92 ALLOC_ELEM_COUNT : 210 MAX_ELEM_COUNT : 30000 FLUSH_COUNT : 53 TOTAL_FLUSH_DURATION : 881731 LAST_FLUSH_TIME : 2021-11-04 11:23:09.270 STATUS_MSG : CON_ID : 0 PL/SQL procedure successfully completed. --//基本可以确定15分钟刷新1次。 select * from dba_index_usage; --//结果不输出了,以后可以利用它确定索引是否有效,当然也存在一些问题。 SYS@127.0.0.1:xxxxx/ddhhh> @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 --//还建立几个bucket分别确定访问以及返回的次数,这样可以简单确定索引是否有效。 --//查看视图DBA_INDEX_USAGE定义,可以确定写入wri$_index_usage表。 CREATE OR REPLACE FORCE VIEW SYS.DBA_INDEX_USAGE (OBJECT_ID, NAME, OWNER, TOTAL_ACCESS_COUNT, TOTAL_EXEC_COUNT, TOTAL_ROWS_RETURNED, BUCKET_0_ACCESS_COUNT, BUCKET_1_ACCESS_COUNT, BUCKET_2_10_ACCESS_COUNT, BUCKET_2_10_ROWS_RETURNED, BUCKET_11_100_ACCESS_COUNT, BUCKET_11_100_ROWS_RETURNED, BUCKET_101_1000_ACCESS_COUNT, BUCKET_101_1000_ROWS_RETURNED, BUCKET_1000_PLUS_ACCESS_COUNT, BUCKET_1000_PLUS_ROWS_RETURNED, LAST_USED) BEQUEATH DEFINER AS (SELECT o.obj# ,o.name ,u.name ,iu.total_access_count ,iu.total_exec_count ,iu.total_rows_returned ,iu.bucket_0_access_count ,iu.bucket_1_access_count ,iu.bucket_2_10_access_count ,iu.bucket_2_10_rows_returned ,iu.bucket_11_100_access_count ,iu.bucket_11_100_rows_returned ,iu.bucket_101_1000_access_count ,iu.bucket_101_1000_rows_returned ,iu.bucket_1000_plus_access_count ,iu.bucket_1000_plus_rows_returned ,iu.last_used FROM sys.wri$_index_usage iu, sys.obj$ o, sys.user$ u WHERE (o.obj# = iu.obj# AND o.owner# = u.user#)); CREATE OR REPLACE PUBLIC SYNONYM DBA_INDEX_USAGE FOR SYS.DBA_INDEX_USAGE; GRANT SELECT ON SYS.DBA_INDEX_USAGE TO SELECT_CATALOG_ROLE; --//扫描共享池可以发现执行DML语句如下: --//5cu0x10yu88sw MERGE INTO sys.wri$_index_usage iu USING DUAL ON (iu.obj# = :objn) WHEN MATCHED THEN UPDATE SET iu.total_access_count = iu.total_access_count + :ns ,iu.total_rows_returned = iu.total_rows_returned + :rr ,iu.total_exec_count = iu.total_exec_count + :ne ,iu.bucket_0_access_count = iu.bucket_0_access_count + :nsh0 ,iu.bucket_1_access_count = iu.bucket_1_access_count + :nsh1 ,iu.bucket_2_10_access_count = iu.bucket_2_10_access_count + :nsh2_10 ,iu.bucket_2_10_rows_returned = iu.bucket_2_10_rows_returned + :nrh2_10 ,iu.bucket_11_100_access_count = iu.bucket_11_100_access_count + :nsh11_100 ,iu.bucket_11_100_rows_returned = iu.bucket_11_100_rows_returned + :nrh11_100 ,iu.bucket_101_1000_access_count = iu.bucket_101_1000_access_count + :nsh101_1000 ,iu.bucket_101_1000_rows_returned = iu.bucket_101_1000_rows_returned + :nrh101_1000 ,iu.bucket_1000_plus_access_count = iu.bucket_1000_plus_access_count + :nsh1000plus ,iu.bucket_1000_plus_rows_returned = iu.bucket_1000_plus_rows_returned + :nrh1000plus ,last_used = SYSDATE WHEN NOT MATCHED THEN INSERT ( iu.obj# ,iu.total_access_count ,iu.total_rows_returned ,iu.total_exec_count ,iu.bucket_0_access_count ,iu.bucket_1_access_count ,iu.bucket_2_10_access_count ,iu.bucket_2_10_rows_returned ,iu.bucket_11_100_access_count ,iu.bucket_11_100_rows_returned ,iu.bucket_101_1000_access_count ,iu.bucket_101_1000_rows_returned ,iu.bucket_1000_plus_access_count ,iu.bucket_1000_plus_rows_returned ,iu.last_used ) VALUES ( :objn , :ns , :rr , :ne , :nsh0 , :nsh1 , :nsh2_10 , :nrh2_10 , :nsh11_100 , :nrh11_100 , :nsh101_1000 , :nrh101_1000 , :nsh1000plus , :nrh1000plus ,SYSDATE ) SYS@127.0.0.1:xxxxx/ddhhh> @ ashtop session_id,PROGRAM,module,action,event sql_id='5cu0x10yu88sw' trunc(sysdate)-100 sysdate Total Seconds AAS %This SESSION_ID PROGRAM MODULE ACTION EVENT FIRST_SEEN LAST_SEEN --------- ------- ------- ---------- -------------------------- ------------ ------------------------------------- ----- ------------------- ------------------- 1 .0 100% | 913 oracle@oda2 (M002) MMON_SLAVE Index usage tracking statistics flush 2021-11-04 04:21:02 2021-11-04 04:21:02 --//在实例2抓取到1次等待时间,噢前面说明是M002执行的而且在实例2上执行的。 --//在实例2执行如下: SYS@ddhhh> @ bgx m00 PROGRAM MODULE ACTION SID PID SPID -------------------------- ------------ ------------------------------------- ---- ------- ------ oracle@oda2 (M000) MMON_SLAVE Monitor FRA Space 608 62 17135 oracle@oda2 (M001) MMON_SLAVE Index usage tracking statistics flush 612 122 20809 oracle@oda2 (M002) MMON_SLAVE Auto-Flush Slave Action 913 123 20815 oracle@oda2 (M003) MMON_SLAVE Automatic Report Flush 1216 124 20821 --//sid=913可以对上。 --//在实例1执行如下: SYS@127.0.0.1:xxxxx/ddhhh> @ bgx m00 PROGRAM MODULE ACTION SID PID SPID -------------------------- ------------ ----------------------------- ----- ------- ------ oracle@oda1 (M000) MMON_SLAVE Intensive AutoTask Dispatcher 608 62 17664 oracle@oda1 (M001) MMON_SLAVE Automatic Report Flush 2719 9 20287 oracle@oda1 (M002) MMON_SLAVE KDILM background EXEcution 5139 97 20291 oracle@oda1 (M003) MMON_SLAVE KDILM background CLeaNup 3330 311 62640 --//oracle rac 两台机器还分工,M00N后台进程两边的任务还不同。 --//链接:blog.dbi-services.com/12cr2-new-index-usage-tracking/给出一些讨论,比如分析索引,可能导致统计增加以及主外键因 --//素导致因素给特别注意,自己应该引起注意。
[20211104]12cR2 new index usage tracking.txt
来源:这里教程网
时间:2026-03-03 17:09:30
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- SD卡与TF卡的区别是什么?哪个更耐用?
SD卡与TF卡的区别是什么?哪个更耐用?
26-03-03 - win10系统还原和重装系统一样吗?win10系统还原怎么操作?
win10系统还原和重装系统一样吗?win10系统还原怎么操作?
26-03-03 - 电脑文件夹需要权限才能删除怎么处理?(已解决)
电脑文件夹需要权限才能删除怎么处理?(已解决)
26-03-03 - 如何实现高效运维?来谈谈性能优化那些事(含直播回顾 Q&A)
如何实现高效运维?来谈谈性能优化那些事(含直播回顾 Q&A)
26-03-03 - 计算机基础知识
计算机基础知识
26-03-03 - Oracle bbed一键安装工具分享
Oracle bbed一键安装工具分享
26-03-03 - 一键安装Oracle11g/19C/21C_单机版_工具分享_开放源码
一键安装Oracle11g/19C/21C_单机版_工具分享_开放源码
26-03-03 - 【AWR】Oracle awr相关视图及体系介绍
【AWR】Oracle awr相关视图及体系介绍
26-03-03 - word自动保存的文件怎么恢复,word文件恢复
word自动保存的文件怎么恢复,word文件恢复
26-03-03 - xbbed一键读取ASM block到文件系统
xbbed一键读取ASM block到文件系统
26-03-03
