千家信息网

oracle索引监控-----未使用的索引

发表于:2024-12-13 作者:千家信息网编辑
千家信息网最后更新 2024年12月13日,oracle索引监控-----未使用的索引oracle索引是用来优化DML处理速度,但是索引是会占用表空间,有时会占用比被索引表占用还要多的表空间。所以,索引监控未使用索引就显得很重要。打开某个索引监
千家信息网最后更新 2024年12月13日oracle索引监控-----未使用的索引

oracle索引监控-----未使用的索引


oracle索引是用来优化DML处理速度,但是索引是会占用表空间,有时会占用比被索引表占用还要多的表空间。所以,索引监控未使用索引就显得很重要。

打开某个索引监控:

alter index owner.index_name monitoring usage;

关闭某个索引监控:

alter index owner.index_name nomonitoring usage;

在v$object_usage视图中包含有索引监控的使用信息。下面v$object_usage在oracle中的ddl语句:

create or replace view sys.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#;


这个试图只能查当前登录数据库的用户所创建的索引。

所以我们可以依葫芦画瓢,自己写sql语句。不过你必须要有相应的权限才行,具体权限自己加就行了。

只要是这几个表的查询权限(sys.obj$, sys.obj$, sys.ind$, sys.object_usage)。

sql略去。。。



alter index INDEX_USER monitoring usage;

select table_name,index_name,used from v$object_usage;



alter index pk_emp nomonitoring usage;




select * from v$object_usage;

只是当前用户下有效,只能看到当前用户下的监视索引。




SQL> COL INDEX_NAME FOR A20

SQL> COL TABLE_NAME FOR A10

SQL> COL MONITORING FOR A10

SQL> COL USED FOR A10

SQL> COL START_MONITORING FOR A20

SQL> COL END_MONITORING FOR A20

SQL> SELECT * FROM V$OBJECT_USAGE;



select z.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$ z

Where i.obj# = ou.obj#

and io.obj# = ou.obj# and io.owner#=z.user#

and t.obj# = i.bo#

Order By 4 Desc,2 Desc;



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#;



COMMENT ON TABLE SYS.V$ALL_OBJECT_USAGE IS 'Record of all index usage';

GRANT SELECT ON SYS.V$ALL_OBJECT_USAGE TO "PUBLIC";

CREATE PUBLIC SYNONYM V$ALL_OBJECT_USAGE FOR SYS.V$ALL_OBJECT_USAGE;


V$OBJECT_USAGE

You can use this view to monitor index usage. The view displaysstatistics about index usage gathered from the database. Allindexes that have been used at least once can be monitored anddisplayed in this view.



注意:

1、$object_usage只包括当前用户所拥有索引的使用记录,即索引的创建者或者是索引的拥有者(owner),已这个用户登录后,看到的是此用户下拥有的索引在整个数据库的使用情况。如果使用了该索引,视图V$OBJECT_USAGE的字段USED会标成YES。否则是NO。当然首先是这些索引被启用使用监视。SQL>alter index index_test_pk monitoring usage;

2、如果需要查出所有用户所拥有索引的使用记录,使用下面的sql,这个sql来自DBA日记:

SQL> select u.name owner, io.name index_name, t.nametable_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#;

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


索引 用户 监控 权限 数据 数据库 空间 视图 语句 登录 监视 有效 重要 依葫芦画瓢 会标 信息 创建者 只是 字段 情况 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 云监控视频需要流媒体服务器吗 和平精英服务器什么样子 中外文学术论文数据库有哪些 昆山操作性能好服务器货源充足 为什么服务器要安装插件 s w 图 软件开发 肇庆汽车软件开发联系方式 重庆优质软件开发报价 游戏软件开发技术 自考 各种数据库的主要检索途径一般是 贵州ai服务器多少钱 文档管理需要搭建服务器 runner服务器地址 美服lol服务器崩溃 数据库一键安装 无线传感器网络安全策略 网络安全法账号实名制 上海新屹软件开发有限公司 河南科技学院到互联网大厦 数据库还有哪些逻辑模型 本地数据库连接和远程服务器速度 网络安全法要求留存相关网络日志 幻塔只能加一个服务器的好友吗 中关村智慧互联网教育科技投资 孚能科技工业互联网 恒众软件开发有限公司 web服务器 是什么 无法为该用户检索数据库 供电公司网络安全红蓝队 客户资源采集软件开发公司
0