应用alter index ××× monitoring usage;语句监控索引使用与否
随着时间的累积,在没有很好的规划的情况下,数据库中也许会存在大量长期不被使用的索引,如果快速的定位这些索引以便清理便摆在案头。我们可以使用"alter index ××× monitoring usage;"命令将索引至于监控状态下,经过一定的监控周期,那些不被使用到的索引便会在具体Schema下的v$object_usage视图中得以体现。展示一下这个过程,供参考。
友情提示:生产数据库中的索引添加和删除一定要慎重,需要做好充分的测试。
1.环境准备
--1、创建表T
SQL> create table t (x int); Table created. --2、初始化一条数据
SQL> insert into t values (1); 1 row created. SQL> select * from t; X
----------
1 --3、在表T的X字段上创建索引
SQL> create index i_t on t(x); Index created.
2.将索引I_T置于监控状态下
SQL> alter index I_T monitoring usage; Index altered.
3.查看v$object_usage视图中记录的信息
SQL> col INDEX_NAME for a10
SQL> col TABLE_NAME a10
SQL> col START_MONITORING for a20
SQL> col END_MONITORING for a20
SQL> select * from v$object_usage; INDEX_NAME TABLE_NAME MONITORING USED START_MONITORING END_MONITORING
---------- ---------- ---------- --------- -------------------- -----------------
I_T T YES NO 07/17/2010 22:27:13
此时MONITORING字段内容为“YES”,表示I_T已经处于被监控状态。USED字段内容为“NO”表示该索引还未被使用过。
4.模拟索引被使用
SQL> set autot on
SQL> select * from t where x = 1; X
----------
1 Execution Plan
----------------------------------------------------------
Plan hash value: 2616361825 -------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 13 | 1 (0)| 00:00:01 |
|* 1 | INDEX RANGE SCAN| I_T | 1 | 13 | 1 (0)| 00:00:01 |
------------------------------------------------------------------------- Predicate Information (identified by operation id):
--------------------------------------------------- 1 - access("X"=1) Note
-----
- dynamic sampling used for this statement Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
1 consistent gets
0 physical reads
0 redo size
508 bytes sent via SQL*Net to client
492 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
从执行计划上可以看出,该查询使用到了索引I_T
5.再次查看v$object_usage视图中记录的信息
SQL> set autot off
SQL> select * from v$object_usage; INDEX_NAME TABLE_NAME MONITORIN USED START_MONITORING END_MONITORING
---------- ---------- --------- --------- -------------------- -----------------
I_T T YES YES 07/17/2010 22:27:13
此时USED字段内容变为“YES”,表示I_T索引在监控的这段时间内被使用过。
如果在一个较科学的监控周期下USED字段一直处于“NO”的状态,则可以考虑将此类索引删掉。
6.停止对索引的监控,观察v$object_usage状态变化
SQL> alter index I_T nomonitoring usage; Index altered. sec@ora10g> select * from v$object_usage; INDEX_NAME TABLE_NAME MONITORIN USED START_MONITORING END_MONITORING
---------- ---------- --------- --------- -------------------- -------------------
I_T T NO YES 07/17/2010 22:27:13 07/17/2010 22:32:27
此时MONITORIN字段内容为“NO”,表示已经停止对索引I_T的监控。
7.再次启用索引监控,观察v$object_usage状态变化
SQL> alter index I_T monitoring usage; Index altered. sec@ora10g> select * from v$object_usage; INDEX_NAME TABLE_NAME MONITORIN USED START_MONITORING END_MONITORING
---------- ---------- --------- --------- -------------------- ------------------
I_T T YES NO 07/17/2010 22:36:40
MONITORIN字段内容为“YES”,表示索引I_T处于被监控中;USED字段为“NO”,表示再次启用监控后的这段时间内该索引没有被使用过。
停起对索引的监控的过程相当于索引监控重置的过程。
8.一次性生成当前用户下所有索引的监控语句
可以使用SQL生成SQL脚本的方法来完成。
以对SECOOLER用户下所有索引生成监控语句为例
SQL> select 'alter index '||owner||'.'||index_name||' monitoring usage;' as "Monitor Indices Script" from dba_indexes where owner in ('SECOOLER');
Monitor Indices Script
---------------------------------------------------------------
alter index SECOOLER.I_T monitoring usage;
…… 省略 ……
如果您对PL/SQL熟悉的话,可以更方便的完成批量将索引置为被监控状态。
SQL> conn secooler/secooler
SQL> begin
2 for rec in (select index_name from user_indexes)
3 LOOP
4 dbms_output.put_line(rec.index_name);
5 EXECUTE IMMEDIATE 'alter index '||rec.index_name||' monitoring usage';
6 end loop;
7 end;
8 / I_T
…… 省略其他索引名字 …… PL/SQL procedure successfully completed.
9.小结
一般生产数据库很少使用这种方法(前提是做好规划),多见于测试数据库。测试数据库中出于对各种索引组合的测试需求,可能创建众多的索引,使用这种方法可以比较便捷的确认那些不被用到的索引。
应用alter index ××× monitoring usage;语句监控索引使用与否的更多相关文章
- 重建索引:ALTER INDEX..REBUILD ONLINE vs ALTER INDEX..REBUILD
什么时候需要重建索引 1. 删除的空间没有重用,导致 索引出现碎片 2. 删除大量的表数据后,空间没有重用,导致 索引"虚高" 3.索引的 clustering_facto 和表不 ...
- 【SQL Server DBA】日常巡检语句3:特定监控(阻塞、top语句、索引、作业)
原文:[SQL Server DBA]日常巡检语句3:特定监控(阻塞.top语句.索引.作业) 1.查询阻塞信息.锁定了哪些资源 --1.查看阻塞信息 select spid,loginame,wai ...
- SQL Server ->> 关于究竟ALTER INDEX ... REBUILD会不会导致改变索引选项和Filegroup的验证
其实之前做过类型的验证,不过影响不是特别深,只是记得不会改变DATA COMPRESSION,那今天再次遇到这个问题就再拿出来验证一下.随便写个脚本验证下.ALTER INDEX ... REBUIL ...
- Oracle 监控索引使用
Oracle提供一个监控索引的方法,来确定索引是否被使用.如果索引没有被使用,就可以删除它们以减少不必要的语句的开销.因为表上的大量不必要的索引可能会降低DML语句的性能,给数据库性能产生压力.所以生 ...
- Oracle alter index rebuild 与 ORA-08104 说明
在ITPUB 论坛上看到的一个帖子,很不错.根据论坛的帖子重做整理了一下. 原文链接如下: alter index rebuild online引发的血案 http://www.itpub.net/t ...
- oracle alter index rebuild offline与online
oracle index build online与offline测试环境为oracle 11.2.0.4 --sql test SQL> conn test/test )); begin .. ...
- SQL语句-创建索引
语法:CREATE [索引类型] INDEX 索引名称ON 表名(列名)WITH FILLFACTOR = 填充因子值0~100 GO USE 库名GO IF EXISTS (SELECT * FRO ...
- MySql基础笔记(二)Mysql语句优化---索引
Mysql语句优化--索引 一.开始优化前的准备 一)explain语句 当MySql要执行一个查询语句的时候,它首先会对语句进行语法检查,然后生成一个QEP(Query Execution Plan ...
- 【详细解析】MySQL索引详解( 索引概念、6大索引类型、key 和 index 的区别、其他索引方式)
[详细解析]MySQL索引详解( 索引概念.6大索引类型.key 和 index 的区别.其他索引方式) MySQL索引的概念: 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分 ...
随机推荐
- SQL ALTER TABLE 语句在项目中的使用
1.在实际的项目开发过程中,之前已经创建好的实体类可能需要增加/删除字段,亦或是更改已有字段的属性,比如主键的增长策略从自增型改为UUID型,那么就会涉及到 SQL 中 alter table 语句的 ...
- js017-错误处理与调试
js017-错误处理与调试 本章内容 理解浏览器报告的错误 处理错误 调试JS代码 17.2 错误处理 17.2.1 try-catch语句 try{ //possible error code }c ...
- win8启动文件夹
进入C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp.鼠标右键选中粘贴,将软件快捷方式粘贴到启动目录 进入文件夹时路径可能是C: ...
- Python 系列:1 - Tuples and Sequences
5.3 Tuples and Sequences We saw that lists and strings have many common properties, e.g., indexing a ...
- 安装glue,用glue批量处理图片的步骤
glue批量处理图片:http://glue.readthedocs.io/en/latest/quickstart.html#and-why-those-css-class-names 首先需要安 ...
- authorization配置
在 Web.config 文件的<configuration>标记的子标记<authorization>和</authorization>之间用于设置应用程序的授权 ...
- JS 根据特定URL获取ID数组
工作中遇到的问题 咱是菜鸟 有更好的方法 求大神看到的指点 事情经过主要是后台返回商品ID 和 商品数量 然后做个卖光的遮罩 这样的效果 结果 后台返回的ID 数组不是后台输入的时候的排序 也就是 ...
- Scribe日志收集工具
Scribe日志收集工具 概述 Scribe是facebook开源的日志收集系统,在facebook内部已经得到大量的应用.它能够从各种日志源上收集日志,存储到一个中央存储系统(可以是NFS,分布式文 ...
- Effective Objective-C 2.0 — 第10条:在既有类中使用关联对象存放自定义数据
可以通过“关联对象”机制来把两个对象连起来 定义关联对象时可指定内存管理语义,用以模仿定义属性时所采用的“拥有关系”与“非拥有关系” 只有在其他做法不可行时才应选用关联对象,因为这种做法通常会引入难于 ...
- 微信小程序 教程及示例
作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有,转载请联系作者获得授权.微信小程序正式公测, ...