監控Oracle索引是否被使用?
開發人員提出:需要對之前的索引監控 然後找出沒用的索引 找時間刪除 從而減少未用索引佔用空間 提高DML效率
此文只是 監控索引 對監控結果 需要進行統計分析 然後可以考慮先unusable 索引 觀察一段時間 再drop index
此文只是 監控索引 對監控結果 需要進行統計分析 然後可以考慮先unusable 索引 觀察一段時間 再drop index
索引監控Procedure
建立日誌表
create table tt (tname varchar2(32),vsql varchar2(500),vdate date);
建立監控資訊結果表
create table TMP_OBJECT_USAGE as
select trunc(sysdate) vdate,t.*from V$OBJECT_USAGE t where 0=1;
建立儲存過程
create or replace procedure P_IDX_MONITORING (V_SCHEMA varchar2,IS_ON number)
as
-- Create by yujx 2014/12/25
/* V_SCHEMA 需要監控索引的schema
IS_ON 1:開啟索引監控 2:關閉索引監控
-- LOG表
drop table tt purge;
create table tt (tname varchar2(32),vsql varchar2(500),vdate date);
-- 索引監控結果表
create table TMP_OBJECT_USAGE as
select trunc(sysdate) vdate,t.*from V$OBJECT_USAGE t where 0=1;
*/
V_SQL varchar2(1000);
v_error clob;
Begin
delete tt;
-- 監控索引
IF IS_ON=1 THEN
for i in (SELECT table_name,'ALTER INDEX ' || owner || '.' || index_name ||
' MONITORING USAGE' vtext
FROM dba_indexes where index_type<>'LOB' and owner in (V_SCHEMA)) loop
v_sql :=i.vtext;
execute immediate v_sql;
insert into tt values(i.table_name,v_sql,sysdate);
End loop;
END IF;
/* 檢視索引使用情況
select * from V$OBJECT_USAGE;*/
--關閉監控
IF IS_ON=2 THEN
for i in (SELECT table_name,
'ALTER INDEX ' || owner || '.' || index_name ||
' NOMONITORING USAGE' vtext
FROM dba_indexes where index_type<>'LOB' and owner in (V_SCHEMA)) loop
v_sql :=i.vtext;
execute immediate v_sql;
insert into tt values(i.table_name,v_sql,sysdate);
End loop;
-- 記錄本次監控資訊到結果表
insert into TMP_OBJECT_USAGE select trunc(sysdate),t.* from V$OBJECT_USAGE t;
END IF;
commit;
EXCEPTION
WHEN OTHERS THEN
v_error := SQLERRM;
.....此處根據實際情況處理異常(發郵件、插入異常日誌表等)
end;
使用說明
P_IDX_MONITORING(‘需要監控的schema’,’1或者2’);
--1表示開啟監控 2表示關閉監控
如
--對TEST開啟索引監控功能
BEGIN
P_IDX_MONITORING('TEST',1);
END;
--關閉索引監控功能
BEGIN
P_IDX_MONITORING('TEST',2);
END;
日誌檢視
索引監控JOB
開啟index監控
--每天晚上22點開啟索引監控
variable job number;
begin
sys.dbms_job.submit(job => :job,
what => ' P_IDX_MONITORING(''TEST'',1);',
next_date => sysdate,
interval => 'TRUNC(sysdate) + 1 +22/24');
commit;
end;
/
關閉index監控
--每天早上8點關閉索引監控
variable job number;
begin
sys.dbms_job.submit(job => :job,
what => ' P_IDX_MONITORING(''TEST'',2);',
next_date => sysdate,
interval => 'TRUNC(sysdate) + 1 +8/24');
commit;
end;
/
檢視監控結果
select * from TMP_OBJECT_USAGE;
--可以查詢到每天監控時間段內的使用情況
--USED為yes表示監控期間 對應的索引被使用
基於上面的監控結果 可以進行統計分析 從而評估索引有沒有被使用
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27000195/viewspace-1380770/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何監控oracle的索引是否使用Oracle索引
- 監控index是否被使用Index
- ORACLE 監控索引的使用Oracle索引
- 監控Index是否被使用過的方法Index
- Oracle 監控索引的使用率Oracle索引
- 監控Oracle索引的使用情況Oracle索引
- Oracle索引的監控Oracle索引
- 官方mysql中檢視索引是否被使用到MySql索引
- linux下監控某個目錄是否被更改Linux
- 索引監控-查詢從未被使用過的索引索引
- 監控mysql索引使用效率的指令碼MySql索引指令碼
- oracle order by索引是否使用的情況Oracle索引
- 使用nagios監控oracleiOSOracle
- 從例項看oracle的索引監控與無效索引維護Oracle索引
- Oracle Undo使用情況監控Oracle
- nagios的配置(監控端和被監控端)iOS
- 使用Shell指令碼程式監控網站URL是否正常指令碼網站
- 被動式監控oracle的rman備份情況Oracle
- Oracle-監控使用者鎖Oracle
- oracle空間使用監控指令碼Oracle指令碼
- win10系統如何檢視自己電腦有沒有被監控_win10怎麼檢視自己電腦是否被監控Win10
- oracle監控工具ignite使用圖解Oracle圖解
- 【INDEX】使用“alter index ××× monitoring usage;”語句監控索引使用與否Index索引
- ORACLE索引被抑制情況Oracle索引
- shell監控服務程式是否啟動
- 教你如何監控網站URL是否正常網站
- 分享實用監控指令碼:使用Shell檢查程式是否存在指令碼
- 使用zabbix監控oracle的後臺日誌Oracle
- oracle使用監控指令碼_ck_tablespace.shOracle指令碼
- oracle監控軟體Oracle
- oracle 長sql監控OracleSQL
- Oracle常用監控SQLOracleSQL
- oracle 監控指令碼Oracle指令碼
- 分散式監控系統之Zabbix主動、被動及web監控分散式Web
- Process Monitor監控目錄 - 監控檔案被哪個程式操作了
- 用zabbix監控oracle dg從庫是否應用日誌的指令碼Oracle應用日誌指令碼
- shell指令碼:監控MySQL服務是否正常指令碼MySql
- Linux 監控程式是否存在的指令碼Linux指令碼