監控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 order by索引是否使用的情況Oracle索引
- 在oracle中監視索引的使用情況Oracle索引
- oracle rac監控oswatch詳細使用教學Oracle
- 使用zabbix監控oracle的後臺日誌Oracle
- 使用Shell指令碼程式監控網站URL是否正常指令碼網站
- win10系統如何檢視自己電腦有沒有被監控_win10怎麼檢視自己電腦是否被監控Win10
- ORACLE監控之OSW部署Oracle
- 分享實用監控指令碼:使用Shell檢查程式是否存在指令碼
- Oracle 指令碼 線上哪些索引從來沒有被使用過Oracle指令碼索引
- shell監控服務程式是否啟動
- 教你如何監控網站URL是否正常網站
- Zabbix透過Orabbix監控OracleOracle
- 使用Admin監控
- centos 監控web站點是否500 指令碼CentOSWeb指令碼
- shell指令碼:監控MySQL服務是否正常指令碼MySql
- Mysql利用explain確認是否使用索引MySqlAI索引
- 分散式監控系統之Zabbix主動、被動及web監控分散式Web
- ORACLE OGG運維及日常監控Oracle運維
- 惠普監控元件被爆LPE,可使用系統許可權元件
- 使用免費的Oracle雲服務-使用並監控ATP資料庫Oracle資料庫
- 【Zabbix】使用dbforbbix 2.2-beta監控Redhat 7.0上的Oracle、MysqlORBRedhatOracleMySql
- 使用Prometheus監控FlinkPrometheus
- SpringBoot使用prometheus監控Spring BootPrometheus
- Oracle檢視歸檔是否被備庫應用Oracle
- Oracle 12.2中的索引統計被呼叫情況Oracle索引
- Zabbix如何監控Oracle的告警日誌Oracle
- Zabbix+Python監控Oracle資料庫PythonOracle資料庫
- Oracle“並行執行”——監控檢視Oracle並行
- 用了HTTPS,沒想到還是被監控了HTTP
- Oracle9i如何監視索引並清除監視資訊(轉)Oracle索引
- Oracle 自動化運維-Python監控Oracle告警日誌Oracle運維Python
- upptime:使用GitHub Actions監控你的網站健康監控Github網站
- Java 監控基礎 - 使用 JMX 監控和管理 Java 程式Java
- 【STAT】Oracle 表統計資訊被鎖,如何建立索引Oracle索引
- 使用Vmalert監控報警
- 如何使用 Glances 命令監控
- 使用Splunk監控SAP Dump
- Zabbix監控使用進階