2017年2月13日 星期一

[oracle]REBUILD INDEX



alter index INDEX_NAME rebuild;

dbms_stats.gather_table_stats('OWNER','TABLE_NAME',degree => 4,cascade => true);

定期更新表格的統計資料(statistics)對於Oracle成本優化器(CBO)產生的存取方式優劣有著舉足輕重的地位.
SQL> exec dbms_stats.gather_schema_stats(‘owner’);
or
SQL> exec dbms_stats.gather_table_stats(‘owner’,’table_name’);

索引(index)是另一個影響Oracle資料庫效能的關鍵因素.使用者根據SQL之選擇條件(where condition)建立適當的索引,加速表格(table)資料的存取速度.過多與不適的索引,不但對於資料的存取沒有幫助,甚至會增加更新類交易之負擔.在Oracle9i以後的版本,使用alter index monitoring usage來監控表格索引的使用,使用者根據v$object_usage視觀(view)中uesd欄位值(Yes or No),判斷與刪除冗贅不必要的索引.
SQL> ALTER INDEX index_name MONITORING USAGE;

針對異動頻繁的表格,常常在系統運作一段時間後,發現資料的存取速度突然變慢很多,發生這種現象普遍的原因為索引區塊(index blocks)中產生過多的刪除記錄(entries)所致.Oracle中analyze index validate structure指令就是用來判讀索引的使用狀況,透過index_stats視觀中leaf rows的刪除比率(del_lf_rows / lf_rows * 100 > 15%)決定是否需要重建(rebuild)索引,讓管理人員提早發現問題,預防效能不佳的情形發生.
SQL> ANALYZE INDEX index_name VALIDATE STRUCTURE。

--partition table index rebuild
Step 1:  Look-up the partition name in dba_ind_partitions.
select * from dba_ind_partitions where index_name = 'XXX'
Step 2:  specify the partition name in the index rebuild statement:
SQL> alter index idx_hist_i3 rebuild partition p3;

Index altered.

select 'alter index '||index_name||' rebuild partition '||partition_name||';' from dba_ind_partitions where index_name = 'XXX';

沒有留言: