收集统计信息导致索引被监控
时间:2022-06-06
本文章向大家介绍收集统计信息导致索引被监控,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
对于索引的调整,我们可以通过Oracle提供的索引监控特性来跟踪索引是否被使用。尽管该特性并未提供索引使用的频度,但仍不失为我们参考的方式之一。然而,最近在Oracle 10.2.0.3中发现收集统计信息时导致索引也被监控,而不是用于sql查询引发的索引监控。如此这般,索引监控岂不是鸡肋?
1、基于Oracle 10g 收集统计信息索引被监控情形
scott@CNMMBO> select * from v$version where rownum<2;
BANNER
----------------------------------------------------------------
Oracle Database 10g Release 10.2.0.3.0 - 64bit Production
--创建临时表t
scott@CNMMBO> create table t(id number constraint t_pk primary key);
Table created.
--启用索引监控
scott@CNMMBO> alter index t_pk monitoring usage;
Index altered.
--查看对象的使用情况
scott@CNMMBO> select * from v$object_usage where index_name='T_PK';
INDEX_NAME Table Name MON USE START_MONITORING END_MONITORING
------------------------------ ----------------- --- --- ------------------- -------------------
T_PK T YES NO 03/22/2013 20:53:23
--收集表t上的统计信息
scott@CNMMBO> exec dbms_stats.gather_table_stats('SCOTT','T',cascade=>true);
PL/SQL procedure successfully completed.
--下面的查询中提示索引没有被使用
--这应该是由于表上没有数据的缘故,也就不存在对应的索引段
scott@CNMMBO> select * from v$object_usage where index_name='T_PK';
INDEX_NAME Table Name MON USE START_MONITORING END_MONITORING
------------------------------ ----------------- --- --- ------------------- -------------------
T_PK T YES NO 03/22/2013 20:53:23
--下面尝试插入两条数据
scott@CNMMBO> insert into t select 1 from dual;
1 row created.
scott@CNMMBO> insert into t select 2 from dual;
1 row created.
--再次收集统计信息
scott@CNMMBO> exec dbms_stats.gather_table_stats('SCOTT','T',cascade=>true);
PL/SQL procedure successfully completed.
--Author : Robinson
--Blog : http://blog.csdn.net/robinson_0612
--这下子,索引变成了已经被使用
scott@CNMMBO> select * from v$object_usage where index_name='T_PK';
INDEX_NAME Table Name MON USE START_MONITORING END_MONITORING
------------------------------ ------------------ --- --- ------------------- -------------------
T_PK T YES YES 03/22/2013 20:53:23
2、基于Oracle 11g收集统计信息索引被监控情形
SQL> select * from v$version where rownum<2;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
--下面的操作与上面雷同
SQL> create table t(id number constraint t_pk primary key);
Table created.
SQL> alter index t_pk monitoring usage;
Index altered.
SQL> set linesize 190
SQL> select * from v$object_usage where index_name='T_PK';
INDEX_NAME TABLE_NAME MON USE START_MONITORING END_MONITORING
------------------------------ ----------------- --- --- ------------------- -------------------
T_PK T YES NO 03/22/2013 20:37:57
SQL> exec dbms_stats.gather_table_stats('SCOTT','T',cascade=>true);
PL/SQL procedure successfully completed.
SQL> select * from v$object_usage where index_name='T_PK';
INDEX_NAME TABLE_NAME MON USE START_MONITORING END_MONITORING
------------------------------ ---------------- --- --- ------------------- -------------------
T_PK T YES NO 03/22/2013 20:37:57
SQL> insert into t select 111 from dual;
1 row created.
SQL> insert into t select 222 from dual;
1 row created.
SQL> commit;
Commit complete.
SQL> exec dbms_stats.gather_table_stats('SCOTT','T',cascade=>true);
PL/SQL procedure successfully completed.
--可以看出,插入数据后,收集统计信息并不会导致索引被使用
SQL> select * from v$object_usage where index_name='T_PK';
INDEX_NAME TABLE_NAME MON USE START_MONITORING END_MONITORING
------------------------------ ---------------- --- --- ------------------- -------------------
T_PK T YES NO 03/22/2013 20:37:57
SQL> select index_name,NUM_ROWS,SAMPLE_SIZE,LAST_ANALYZED from dba_indexes where index_name='T_PK';
INDEX_NAME NUM_ROWS SAMPLE_SIZE LAST_ANALYZED
------------------------------ ---------- ----------- -------------------
T_PK 2 2 2013/03/22 20:39:10
--发布sql查询语句
SQL> select * from t where id=222;
ID
----------
222
--再次查看,索引监控提示该索引已经被使用
SQL> select * from v$object_usage where index_name='T_PK';
INDEX_NAME TABLE_NAME MON USE START_MONITORING END_MONITORING
------------------------------ ---------------- --- --- ------------------- -------------------
T_PK T YES YES 03/22/2013 20:37:57
SQL> alter index t_pk nomonitoring usage;
3、小结 a、对于索引监控,在Oracle 10g中当收集统计信息时,如果当前索引的统计信息也被收集则导致该索引被监控 b、注意索引能否被收集到还依赖于estimate_percent以及method_opt等收集时的相关参数 c、由于上述情形存在因此索引监控在10g中功能有限,不过对于索引的使用情况也可以通过查询DBA_HIST_SQL_PLAN来获得 d、在Oracle 11g中,不会出现上述情况
- 四字母.com域名均以五位数结拍
- mybatis 3.2.7 与 spring mvc 3.x、logback整合
- spring 3.2.x + struts2 + mybatis 3.x + logback 整合配置
- struts2使用Convention Plugin在weblogic上以war包部署时,找不到Action的解决办法
- 使用xfce4桌面系统
- 号外!号外!Python纳入高考内容了!人工智能时代就要来临了!
- 高颜值!域名5h.net和jb.cc纷纷易主
- 认识ASP.NET 5项目结构和项目文件xproj
- weblogic下部署应用时slf4j与logbak冲突的解决办法
- 介绍一位OWin服务器新成员TinyFox
- javascript: 带分组数据的Table表头排序
- 域名资讯:昨日域名成交2897个,成交额达300多万元
- 2017年12月编程语言排行榜:C语言再次崛起,有望成为2017年度编程语言
- WordPress 免插件仅代码实现 Gravatar 头像缓存
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 二叉树的前中后序遍历
- 【tensorflow2.0】处理结构化数据-titanic生存预测
- 【pandas】pandas中的常见函数
- 走进STL - 哈希表,散装称重么
- 第八届蓝桥杯省赛javaB组题目解析
- 拥抱STL - 类/结构体元素查询与排序
- 【tensorflow2.0】处理图片数据-cifar2分类
- 操作系统实验多线程编程中的读者优先和写者优先
- 【python】使用csv库以字典格式读写csv文件
- 基于TypeScript封装Axios笔记(八)
- springmvc之HttpMessageConverter<T>
- django-模板之静态文件加载(十四)
- springmvc之使用JstlView
- django-模板之include标签(十五)
- 【pytorch】改造mobilenet_v2进行multi-class classification(多标签分类)