選出需要rebuild的索引
自己編寫的一個指令碼,該指令碼的主要功能是列出需要rebuild的索引,列出狀態為unusable的索引。我沒有將ORACLE內建賬戶的索引考慮在內。
需要rebuild的索引遵循如下原則:
1.索引高度大於等於4
2.索引中被刪除的資料超過索引資料的20%。
3.索引的狀態為VALID
警告:別胡亂在生產庫中執行該指令碼,千萬別在繁忙的時候執行該指令碼,慎重,慎重
set serveroutput on
set linesize 200
set pagesize 100
declare
cursor spetial is
select index_name,owner from dba_indexes where owner not in
('SYS','SYSMAN','SYSTEM','MDSYS','OLAPSYS','DMSYS','ORDSYS','EXFSYS','XDB','CTXSYS','WMSYS','OUTLN','ISMSYS','DBSNMP','TSMSYS') and status='UNUSABLE';
cursor index_name is
select index_name,owner from dba_indexes where owner not in
('SYS','SYSMAN','SYSTEM','MDSYS','OLAPSYS','DMSYS','ORDSYS','EXFSYS','XDB','CTXSYS','WMSYS','OUTLN','ISMSYS','DBSNMP','TSMSYS') and status='VALID';
height index_stats.height%TYPE :=0;
lf_rows index_stats.lf_rows%TYPE :=0;
del_lf_rows index_stats.del_lf_rows%TYPE :=0;
distinct_keys index_stats.distinct_keys%TYPE :=0;
begin
for c_spetial in spetial loop
dbms_output.put_line(c_spetial.owner ||'.' || c_spetial.index_name ||' is unusable.');
end loop;
for indexname in index_name loop
execute immediate 'analyze index '|| indexname.owner ||'.'|| indexname.index_name ||' validate structure';
select height,decode(lf_rows,0,1,lf_rows),del_lf_rows,decode(distinct_keys,0,1,distinct_keys)
into height,lf_rows,del_lf_rows,distinct_keys from index_stats;
if(height>=4) or ((del_lf_rows/lf_rows)>0.2) then
dbms_output.put_line(' The height of '|| indexname.owner || '.'|| indexname.index_name || ' is '||
height || ' and the DEL_LF_ROWS/LF_ROWS is ' || del_lf_rows/lf_rows || ' needs rebuild!!!');
end if;
end loop;
exception
when others then
null;
end;
/
例子:
SQL> declare
2 cursor spetial is
3 select index_name,owner from dba_indexes where owner not in
4 ('SYS','SYSMAN','SYSTEM','MDSYS','OLAPSYS','DMSYS','ORDSYS','EXFSYS','XDB','CTXSYS','WMSYS','OUTLN','ISMSYS','DBSNMP','TSMSYS') and status='UNUSA
5 cursor index_name is
6 select index_name,owner from dba_indexes where owner not in
7 ('SYS','SYSMAN','SYSTEM','MDSYS','OLAPSYS','DMSYS','ORDSYS','EXFSYS','XDB','CTXSYS','WMSYS','OUTLN','ISMSYS','DBSNMP','TSMSYS') and status='VALID
8 height index_stats.height%TYPE :=0;
9 lf_rows index_stats.lf_rows%TYPE :=0;
10 del_lf_rows index_stats.del_lf_rows%TYPE :=0;
11 distinct_keys index_stats.distinct_keys%TYPE :=0;
12 begin
13 for c_spetial in spetial loop
14 dbms_output.put_line(c_spetial.owner ||'.' || c_spetial.index_name ||' is unusable.');
15 end loop;
16 for indexname in index_name loop
17 execute immediate 'analyze index '|| indexname.owner ||'.'|| indexname.index_name ||' validate structure';
18 select height,decode(lf_rows,0,1,lf_rows),del_lf_rows,decode(distinct_keys,0,1,distinct_keys)
19 into height,lf_rows,del_lf_rows,distinct_keys from index_stats;
20 if(height>=4) or ((del_lf_rows/lf_rows)>0.2) then
21 dbms_output.put_line(' The height of '|| indexname.owner || '.'|| indexname.index_name || ' is '||
22 height || ' and the DEL_LF_ROWS/LF_ROWS is ' || del_lf_rows/lf_rows || ' needs rebuild!!!');
23 end if;
24 end loop;
25 end;
26 /
SCOTT.LOWERNAME is unusable.
PL/SQL 過程已成功完成。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16978544/viewspace-705699/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MSSQL Rebuild(重建)索引SQLRebuild索引
- Rebuild TreeRebuild
- 唯一索引和普通索引的選擇索引
- MySQL 選錯索引的原因?MySql索引
- [Mysql]索引選型MySql索引
- MySQL 選錯索引MySql索引
- 哪些情況下需要/不需要建立索引索引
- flutter中的rebuild一些理解FlutterRebuild
- Excel如何篩選出自己想要的資料 excel怎麼篩選出需要的內容Excel
- MySQL哪些情況需要新增索引?MySql索引
- C# 基於索引的篩選C#索引
- Elasticsearch 中為什麼選擇倒排索引而不選擇 B 樹索引Elasticsearch索引
- 什麼情況下需要建立索引? 索引的作用?為什麼能夠提高查詢速度?(索引的原理) 索引有什麼副作用嗎?索引
- 普通索引和唯一索引,應該怎麼選擇?索引
- 資料庫索引選擇策略資料庫索引
- pandas索引和選擇資料索引
- 【ASK_ORACLE】關於Oracle索引分裂你需要知道的Oracle索引
- 深入淺出Mysql索引的那些事兒MySql索引
- Oracle一次“選錯索引”問題的分析Oracle索引
- 淺入淺出 MySQL 索引MySql索引
- 如何選擇普通索引和唯一索引《死磕MySQL系列 五》索引MySql
- MySQL索引選擇及規則整理MySql索引
- ERR: node-gyp rebuild No Xcode or CLT version detectedRebuildXCode
- OGG複製程式延遲高,優化方法二(存在索引),SQL選擇不好的索引優化索引SQL
- MYSQL索引建立需要注意以下幾點細節MySql索引
- 表資料量影響MySQL索引選擇MySql索引
- [20190827]函式索引與選擇率.txt函式索引
- filebeat輸出結果到elasticsearch的多個索引Elasticsearch索引
- flutter防止widget rebuild終極解決辦法FlutterRebuild
- 記一次排查Flutter中預期外rebuild的過程FlutterRebuild
- 觀察下面的選項,選出正確的選項。
- 挑選好用的HTTP代理需要關注的三點HTTP
- 【TUNE_ORACLE】列出SQL謂詞中需要建立索引的列SQL參考OracleSQL索引
- TreeSelect 篩選後的全選是否支援僅全選篩選出來的列表
- 44 pandas DataFrame分層索引切片選擇(tcy)索引
- MySQL innodb如何選擇一個聚簇索引MySql索引
- [20200326]為什麼選擇這個索引.txt索引
- 索引選擇度問題最佳化整理索引
- 主鍵索引 (聚集索引) 和普通索引 (輔助索引) 的區別索引