ITPub博客

首页 > 数据库 > Oracle > index monitoring

index monitoring

原创 Oracle 作者:zhangjihang 时间:2009-12-17 15:47:03 0 删除 编辑

今天在查看索引监控情况的时候发现v$object_usage视图其实是个比较特殊的v$视图,因为它只能查看本用户下索引的情况,即使是SYS用户也查不到其他用户的情况,该视图的创建语句如下:

create or replace view v$object_usage

(index_name, table_name, monitoring, used, start_monitoring, end_monitoring)

as

select io.name, t.name,

decode(bitand(i.flags, 65536), 0, 'NO', 'YES'),

decode(bitand(ou.flags, 1), 0, 'NO', 'YES'),

ou.start_monitoring,

ou.end_monitoring

from sys.obj$ io, sys.obj$ t, sys.ind$ i, sys.object_usage ou

where io.owner# = userenv('SCHEMAID')

and i.obj# = ou.obj#

and io.obj# = ou.obj#

and t.obj# = i.bo#;

可以看到确实只能查到自己拥有的索引情况。

如果要查看所有的索引监控情况,可以创建如下视图:

create or replace view sys.v$all_object_usage

(owner,index_name,table_name,monitoring,used,start_monitoring,end_monitoring)

as

select u.name, io.name, t.name,

decode(bitand(i.flags, 65536), 0, 'NO', 'YES'),

decode(bitand(ou.flags, 1), 0, 'NO', 'YES'),

ou.start_monitoring,

ou.end_monitoring

from sys.obj$ io, sys.obj$ t, sys.ind$ i, sys.object_usage ou, sys.user$ u

where i.obj# = ou.obj#

and io.obj# = ou.obj#

and t.obj# = i.bo#

and io.owner# = u.user#;

另外一个注意的地方是,被开启监控的索引如果rebuild,监控会停止,并且是否使用会变成NO,以下为实验过程:

[@more@]

SCOTT@ora10g>create table idx_mon as select * from emp;

表已创建。

SCOTT@ora10g>create index empno_idx on idx_mon(empno);

索引已创建。

SCOTT@ora10g>alter index empno_idx monitoring usage;

索引已更改。

SCOTT@ora10g>select * from v$object_usage;

INDEX_NAME TABLE_NAME MON USE START_MONITORING END_MONITORING

------------------------------ ------------------------------ --- --- ------------------- -------------------

EMPNO_IDX IDX_MON YES NO 12/17/2009 15:59:33

SCOTT@ora10g>conn / as sysdba

已连接。

SYS@ora10g>select * from v$object_usage; sys无法使用v$object_usage查看scott的索引监控

未选定行

SYS@ora10g>conn scott/tiger

已连接。

SCOTT@ora10g>alter index empno_idx rebuild;

索引已更改。

SCOTT@ora10g>select * from v$object_usage;

INDEX_NAME TABLE_NAME MON USE START_MONITORING END_MONITORING

------------------------------ ------------------------------ --- --- ------------------- -------------------

EMPNO_IDX IDX_MON NO YES 12/17/2009 15:59:33

SCOTT@ora10g>drop index empno_idx;

索引已删除。

SCOTT@ora10g>select * from v$object_usage; 索引drop后信息删除

未选定行

oracle9i的BUG:

在9205之前,如果你不慎监控了SYS.I_OBJAUTH1索引,并且不幸在重起数据库之前没有停止它,那么你的数据库将会无法启动,并且不会给出任何错误信息。

alter index sys.i_objauth1 monitoring usage;

索引监控开启命令:

alter index name_idx monitoring usage;

索引监控关闭命令:

alter index name_idx nomonitoring usage;

清理v$object_usage视图:

如果想清理v$object_usage只需清理object_usage即可,但是生产库请慎用!

最后附上开启某schema下所有索引监控的脚本:

set pages 999

set heading off

spool run_idx_mon.sql

select 'alter index '||index_name||' monitoring usage;'

from dba_indexes

where owner = 'SCOTT';

spool off

@run_idx_mon

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10176825/viewspace-1029766/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    16
  • 访问量
    89004