Oracle 索引維護

2021-06-19 03:42:56 字數 2404 閱讀 2965

一、索引的分析

根據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除了可以分析素因是否需要重建外,還可以讓還能獲得其他有用資訊,能讓了解當前索引的大小結構高度等等,以確定優化方案。還要特別留意另乙個知識點:「該命令將會導致鎖!」而且操作大表,該命令執行時間會相當長,會導致生產因此掛起一堆處理該錶的程序!

二、索引高度

oracle在表示從索引根塊到葉子塊遍歷所涉及的塊數時用了兩個含義稍有不同的術語。第乙個是高度(height),這是指從根塊到葉子塊遍歷所需的塊數。使用analyze index validate structure命令分析索引後,可以從index_stats檢視找到這個高度(height)值。另乙個術語是blevel,這是指分支層數,與height相差1(blevel不把葉子塊層算在內)。收集統計資訊後,可以在諸如user_indexes之類的常規字典表中找到blevel值。

select index_name, blevel, num_rows from user_indexes where table_name = 'big_table';

index_name blevel num_rows

big_table_pk 2 10441513

blevel為2,這說明height為3,要找到葉子需要兩個i/o(訪問葉子本身還需要第三個i/o)。所以,要從這個索引中獲取任何給定的鍵值,共需要3個i/o:

三、索引問題

這裡要注意索引有乙個不利的地方,就是索引一定會影響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的索引全部建到新庫中,大資料遷移時,分步操作的速度也更快。

本文出自 「無雙城」 部落格,請務必保留此出處

Oracle 索引維護

一 索引的分析 根據oracle文件所描述,如下情況要考慮重建索引 1.analyze index your index name validate structure 2.查詢索引碎片 select name,del lf rows,lf rows,round del lf rows lf row...

Oracle索引的維護

二.索引的儲存情況檢查 oracle為資料庫中的所有資料分配邏輯結構空間。資料庫空間的單位是block extent和segment。block 是oracle使用和分配的最小儲存單位。它是由資料庫建立時設定的db block size決定的。一旦資料庫生成了,資料塊的大小不能改變。要想改變只能重新...

Oracle資料庫中索引的維護 1

本文只討論oracle中最常見的索引,即是b tree索引。本文中涉及的 資料庫 版本是oracle8i。一.檢視系統表中的使用者索引 在oracle中,system表是安裝資料庫時自動建立的,它包含資料庫的全部資料字典,儲存過程 包 函式和觸發器的定義以及系統回滾段。一般來說,應該盡量避免在sys...