一、索引的分析
根據ORACLE文檔所描述,如下情況要考慮重建索引
1. analyze index your_index_name validate structure;
2. 查詢索引片段:
select name,del_lf_rows, lf_rows, round((del_lf_rows/(lf_rows+0.0000000001))*100)
frag_pct from index_stats
一般如果該索引的frag_pct>10%,那麼就需要rebuild index
當然analyze index your_index_name validate structure除了可以分析素因是否需要重建外,還可以讓還能獲得其他有用資訊,能讓瞭解當前索引的大小結構高度等等,以確定最佳化方案。還要特別留意另一個知識點:“該命令將會導致鎖!”而且操作大表,該命令執行時間會相當長,會導致生產因此掛起一堆處理該表的進程!
二、索引問題
這裡要注意索引有一個不利的地方,就是索引一定會影響DML的效能,往不帶索引表中插入值的速度和帶索引的表中插入的速度相比,不帶索引的表的插入速度一定更快,原因很明顯,DML語句要進行維護索引的開銷,所以會慢,這無須做實驗就能證明了。另外隨著索引的不斷增大,維護的開銷將越來越大,如果一張表的索引數量再一增多,開銷將會進一步增大!
三:控制索引數量
生產中要嚴格控制索引的數量,避免某些更新頻繁的表更新的效能太低影響了系統的正常運行,如何控制索引的數量呢?
1、首先可以執行如下命令擷取需要監控的索引的語句,然後執行提取出來的語句
select 'alter index '||owner||'.'||index_name||' monitoring usage;'
from dba_indexes
where table_owner='BILL'
2、保證上面提取的語句執行過後,通過一段時間的觀察,查看下列語句得出索引使用的情況,擷取那些索引不常用的資訊
select io.name index_name, t.name table_name,
decode(bitand(i.flags, 65536), 0, 'NO', 'YES') monitoring,
decode(bitand(ou.flags, 1), 0, 'NO', 'YES') used,
ou.start_monitoring start_monitoring,
ou.end_monitoring end_monitoring
from sys.obj$ io, sys.obj$ t, sys.ind$ i, sys.object_usage ou
where io.owner# = (select user# from sys.user$ where name='&使用者名稱')
and i.obj# = ou.obj#
and io.obj# = ou.obj#
and t.obj# = i.bo#
3、觀察第2步查詢出來的結果,刪除不常使用的索引,控制索引的數量。
對此大家應該掌握了如何觀察和控制索引的方法,希望大家能熟悉並經常在工作中應用。
4.在匯入匯出中最好禁用索引和nologging
使用EXP/IMP工具進行資料移轉時,可以考慮對索引進行兩種方式控制以提高EXP/IMP的速度。
1、就是不使用索引,等資料移轉過來後,在新的資料庫中手動建立自己需要的索引,畢竟資料更重要,索引可以慢慢建,選擇性的建。這樣就在EXP的選項中設定INDEXES=N,這樣加快了匯出的速度也加快的匯入的速度。
2、在IMP的時候選擇INDEXFILE參數,讓索引先組建檔案,先不要匯入資料庫中,等資料全部匯入庫後再建選擇性的從INDEXFILE中建索引,即便把INDEXFILE的索引全部建到新庫中,大資料移轉時,分步操作的速度也更快。
本文出自 “無雙城” 部落格,請務必保留此出處http://929044991.blog.51cto.com/1758347/1303884