合理的为数据库表上创建战略性索引,可以极大程度的提高了查询性能。但事实上日常中我们所创建的索引并非战略性索引,恰恰是大量冗余或是根本没有用到的索引耗用了大量的存储空间,导致DML性能低下。Oracle 提供了索引监控特性来初略判断未使用到的索引。本文描述如何使用Oracle 索引的监控。1、冗余索引的弊端大量冗余和无用的索引导致整个数据库性能低下,耗用了大量的CPU与I/O开销,具体表现如下:a、耗用大量的存储空间(索引段的维护与管理)b、增加了DML完成的时间c、耗用大量统计信息(索引)收集的时间d、结构性验证时间f、增加了恢复所需的时间2、单个索引监控a、对于单个索引的监控,可以使用下面的命令来完成alter index <INDEX_NAME> monitoring usage;b、关闭索引监控alter index <INDEX_NAME> nomonitoring usage;c、观察监控结果(查询v$object_usage视图)select * from v$object_usage3、schema级别索引监控(不含SYS用户)a、直接执行脚本来开启索引监控
robin@SZDB:~/dba_scripts/custom/sql> more idx_monitor_on.sql
SET HEADING OFF FEEDBACK OFF TERMOUT OFF ECHO OFF;
SET PAGESIZE 0;
SPOOL /tmp/mnt_idx.sqlSELECT "ALTER INDEX " || owner || "." || index_name || " MONITORING USAGE;"
FROM dba_indexes
WHERE owner IN (SELECT username
FROM dba_users
WHERE account_status = "OPEN")
AND owner NOT IN ("SYS", "SYSTEM", "PERFSTAT", "MGMT_VIEW", "MONITOR", "SYSMAN", "DBSNMP");SPOOL OFF;
@/tmp/mnt_idx.sql;
SET HEADING ON FEEDBACK ON TERMOUT ON;
SET PAGESIZE 80;SELECT index_name,
monitoring,
used,
start_monitoring,
end_monitoring
FROM v$object_usage;ho rm -rf /tmp/mnt_idx.sqlb、禁用索引监控
robin@SZDB:~/dba_scripts/custom/sql> more idx_monitor_off.sql
SET HEADING OFF FEEDBACK OFF TERMOUT OFF ECHO OFF;
SET PAGESIZE 0;
SPOOL /tmp/un_mnt_idx.sql
SELECT "ALTER INDEX " || owner || "." || index_name || " NOMONITORING USAGE;"
FROM dba_indexes
WHERE owner IN (SELECT username
FROM dba_users
WHERE account_status = "OPEN")
AND owner NOT IN ("SYS", "SYSTEM", "PERFSTAT", "MGMT_VIEW", "MONITOR", "SYSMAN", "DBSNMP");SPOOL OFF;
@/tmp/un_mnt_idx.sql;
SET HEADING ON FEEDBACK ON TERMOUT ON;
SET PAGESIZE 80;--> Author : Robinson
--> Blog : http://blog.csdn.net/robinson-0612SELECT index_name,
monitoring,
used,
start_monitoring,
end_monitoring
FROM v$object_usage;ho rm -rf /tmp/un_mnt_idx.sqlc、查看索引监控结果
set linesize 190
SELECT u.name owner,
io.name index_name,
t.name table_name,
DECODE (BITAND (i.flags, 65536), 0, "NO", "YES") monitoring,
DECODE (BITAND (ou.flags, 1), 0, "NO", "YES") used,
ou.start_monitoring start_monitoring,
ou.end_monitoring end_monitoring
FROM sys.user$ u,
sys.obj$ io,
sys.obj$ t,
sys.ind$ i,
sys.object_usage ou
WHERE i.obj# = ou.obj# AND io.obj# = ou.obj# AND t.obj# = i.bo# AND u.user# = io.owner#
AND u.name=decode(upper("&input_owner"),"ALL",u.name,upper("&input_owner"));
Oracle RAC 迁移OCR(10g)Oracle 11g不能连接报ORA-12537相关资讯 Oracle索引 monitor index
- Oracle跳跃式索引扫描测试 (08月09日)
- Oracle组合索引与回表 (08/07/2015 18:11:53)
- Oracle 索引基本原理 (04/12/2015 18:03:58)
| - 关于Oracle位图索引内部浅论 (09/17/2015 19:23:59)
- Oracle 索引的可见与隐藏(visible (07/18/2015 09:41:42)
- Oracle索引合并coalesce操作 (04/01/2015 20:21:34)
|
本文评论 查看全部评论 (0)