檢視錶和索引碎片情況相關資訊
-
查詢碎片程度高的表(可以收縮的表)
SELECT TABLE_NAME,(BLOCKS*8192/1024/1024)"理論大小M",
(NUM_ROWS*AVG_ROW_LEN/1024/1024/0.9)"實際大小M",
round((NUM_ROWS*AVG_ROW_LEN/1024/1024/0.9)/(BLOCKS*8192/1024/1024),3)*100||'%' "實際使用率%"
FROM DBA_TABLES where blocks>100 and (NUM_ROWS*AVG_ROW_LEN/1024/1024/0.9)/(BLOCKS*8192/1024/1024)<0.3
order by (NUM_ROWS*AVG_ROW_LEN/1024/1024/0.9)/(BLOCKS*8192/1024/1024) desc -
查詢索引碎片的比例
索引刪除行數除以索引總行數的百分比>30%即認為索引碎片大,也就是需要重建的索引。
select name,
del_lf_rows,
lf_rows,
round(del_lf_rows / decode(lf_rows, 0, 1, lf_rows) * 100, 0) || '%' frag_pct
from index_stats
where round(del_lf_rows / decode(lf_rows, 0, 1, lf_rows) * 100, 0) > 30; -
叢集因子clustering_factor高的表
select tab.table_name,tab.blocks,tab.num_rows,ind.index_name,ind.clustering_factor,
round(nvl(ind.clustering_factor,1)/decode(tab.num_rows,0,1,tab.num_rows),3)*100||'%' "叢集因子接近行數"
from dba_tables tab, dba_indexes ind where tab.table_name=ind.table_name
and tab.blocks>100
and nvl(ind.clustering_factor,1)/decode(tab.num_rows,0,1,tab.num_rows) between 0.35 and 3 -
附:聚簇因子(Clustering factor)簡介
聚簇因子是 Oracle 統計資訊中在CBO最佳化器模式下用於計算cost的引數之一,決定了當前的SQL語句是否走索引,還是全表掃描以及是否作為巢狀連線外部表等
1)堆表的儲存方式
Oralce 資料庫系統中最普通,最為常用的即為堆表。
堆表的資料儲存方式為無序儲存,也就是任意的DML操作都可能使得當前資料塊存在可用的空閒空間。
處於節省空間的考慮,塊上的可用空閒空間會被新插入的行填充,而不是按順序填充到最後被使用的塊上。
上述的操作方式導致了資料的無序性的產生。
當建立索引時,會根據指定的列按順序來填充到索引塊,預設的情況下為升序。
新建或重建索引時,索引列上的順序是有序的,而表上的順序是無序的,也就是存在了差異,即表現為聚簇因子。
2)什麼是聚簇因子(clustering factor/CF)
聚簇因子是基於表上索引列上的一個值,每一個索引都有一個聚簇因子。
用於描述索引塊上與表塊上儲存資料在順序上的相似程度,也就說表上的資料行的儲存順序與索引列上順序是否一致。
在全索引掃描中,CF的值基本上等同於物理I/O或塊訪問數,如果相同的塊被連續讀,則Oracle認為只需要1次物理I/O。
好的CF值接近於表上的塊數,而差的CF值則接近於表上的行數。
聚簇因子在索引建立時就會透過表上存存在的行以及索引塊計算獲得。
3)Oracle 如何計算聚簇因子
執行或預估一次全索引掃描。
檢查索引塊上每一個rowid的值,檢視是否前一個rowid的值與後一個指向了相同的資料塊,如果指向了不相同的資料塊則CF的值增加1。
當索引塊上的每一個rowid被檢查完畢,即得到最終的CF值。
4)提高聚簇因子
堆表的資料儲存是無序儲存,因此需要使無序變為有序。下面是提高聚簇因子的辦法。
a、對於表上的多個索引以及組合索引的情形,索引的建立應考慮按應該按照經常頻繁讀取的大範圍資料的讀取順序來建立索引。
b、定期重構表(針對堆表),也就是使得表與索引上的資料順序更接近。注意,是重構表,而不是重建索引。
重建索引並不能顯劇提高CF的值,因為索引列通常是有序的,無序的是原始表上的資料。
提取原始表上的資料到一個臨時表,禁用依賴於該表的相關約束,truncate原始表,再將臨時表的資料按索引訪問順序填充到原始表。
c、使用聚簇表來代替堆表。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69994536/viewspace-2760154/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【TUNE_ORACLE】檢視錶,列和索引的統計資訊SQL參考Oracle索引SQL
- Linux檢視相關係統資訊Linux
- Linux 檢視程式情況Linux
- Linux根據程式號,檢視相關資訊Linux
- 轉:Linux檢視GPU資訊和使用情況LinuxGPU
- Mysql 顯示錶的相關資訊 --命令MySql
- 檢視SQLServer的LCK資源等待情況SQLServer
- 【統計資訊】全面檢視錶所有統計資訊SQLSQL
- Oracle相關資料字典檢視Oracle
- Oracle錶的歷史統計資訊檢視Oracle
- ubuntu檢視硬碟掛載情況Ubuntu硬碟
- 關於轉儲Oracle索引資訊的相關命令Oracle索引
- 兩種檢視錶空間使用情況的方法
- DB2檢視索引的使用情況DB2索引
- 檢視mysql資料庫連線數、併發數相關資訊MySql資料庫
- mysql建立索引和檢視MySql索引
- 檢視錶大小
- mysql索引失效的情況MySql索引
- 檢視錶名和表的行數
- MySQL索引統計資訊更新相關的引數MySql索引
- 【TUNE_ORACLE】檢視系統CPU和IO情況SQL參考OracleSQL
- 微信相關資源索引索引
- MySQL哪些情況需要新增索引?MySql索引
- linux系統檢視網路連線情況Linux
- 如何快速檢視Linux系統重啟情況Linux
- 索引碎片整理索引
- 利用VS(Visual Studio)自帶的工具檢視DLL檔案相關資訊
- 19 Oracle Data Guard 相關檢視Oracle
- mysql 索引相關MySql索引
- 檢視錶的定義
- oracle 檢視錶空間Oracle
- Android下檢視SO庫被依賴的情況Android
- 檢視temp表空間的消耗明細情況
- OceanBase學習之路41|如何檢視資源池的分佈情況?
- oracle order by索引是否使用的情況Oracle索引
- mysql索引不會命中的情況MySql索引
- 聊聊Mysql索引和redis跳錶MySql索引Redis
- eMarketer:美國網民視訊收視情況彙總