Difference between revisions of "Index Monitoring"
Jump to navigation
Jump to search
(Created page with "Enable monitoring: <source lang="sql"> select 'alter index ' || owner || '.' || index_name || ' monitoring usage;' from dba_indexes where owner = '?' and index_type not...") |
|||
Line 1: | Line 1: | ||
+ | =Setting up= | ||
Enable monitoring: | Enable monitoring: | ||
<source lang="sql"> | <source lang="sql"> | ||
Line 21: | Line 22: | ||
select * | select * | ||
from v$object_usage; | from v$object_usage; | ||
+ | </source> | ||
+ | |||
+ | =Querying= | ||
+ | Total list | ||
+ | <source lang="sql"> | ||
+ | select * | ||
+ | from v$object_usage | ||
+ | where used = 'NO'; | ||
+ | </source> | ||
+ | |||
+ | List of indexes with segment size (query won't work nicely for partitioned objects) | ||
+ | <source lang="sql"> | ||
+ | select u.index_name, u.table_name, round(s.bytes / 1048576) "MB", u.used | ||
+ | from v$object_usage u | ||
+ | , user_segments s | ||
+ | where u.used = 'NO' | ||
+ | and s.segment_name = u.index_name | ||
+ | order by s.bytes desc; | ||
+ | </source> | ||
+ | |||
+ | List of indexes without segments (count of this query + previous query should equal the total) | ||
+ | <source lang="sql"> | ||
+ | select u.index_name, i.segment_created | ||
+ | from v$object_usage u | ||
+ | , user_indexes i | ||
+ | where u.used = 'NO' | ||
+ | and u.index_name not in (select segment_name from user_segments) | ||
+ | and i.index_name = u.index_name; | ||
</source> | </source> |
Latest revision as of 15:13, 6 April 2016
Setting up
Enable monitoring:
select 'alter index ' || owner || '.' || index_name || ' monitoring usage;'
from dba_indexes
where owner = '?'
and index_type not in ('LOB');
Validate it has been enabled on all indexes (in case some were locked):
select index_name
from user_indexes
where index_type not in ('LOB')
minus
select index_name
from v$object_usage;
Verify, make sure to connect as the owner of the objects you are monitoring:
select *
from v$object_usage;
Querying
Total list
select *
from v$object_usage
where used = 'NO';
List of indexes with segment size (query won't work nicely for partitioned objects)
select u.index_name, u.table_name, round(s.bytes / 1048576) "MB", u.used
from v$object_usage u
, user_segments s
where u.used = 'NO'
and s.segment_name = u.index_name
order by s.bytes desc;
List of indexes without segments (count of this query + previous query should equal the total)
select u.index_name, i.segment_created
from v$object_usage u
, user_indexes i
where u.used = 'NO'
and u.index_name not in (select segment_name from user_segments)
and i.index_name = u.index_name;