修改oracle 的統計資訊
修改表/索引的統計資訊
資料庫在重新分析後,統計資訊可能會影響到現有的執行計劃,
影響到程式碼的執行效率。
還有一個情況是, 我們需要oracle 在解析sql的執行計劃的時候,能夠按照我們的意願走某個索引。
影響oracle 執行計劃的資料主要來自於表和索引的統計資訊,
我們可以手工修改這些統計值 ,
下面的指令碼是一個修改索引統計資訊的指令碼,
DECLARE
M_NUMROWS NUMBER; ---紀錄的行數
M_NUMLBLKS NUMBER; --- 資料塊的數目
M_NUMDIST NUMBER; --number of distinct key 唯一鍵的數目,
M_AVGLBLK NUMBER; --leaf 平均塊數, 一個dist-key 的資料佔據幾個索引的葉子資料塊。
M_AVGDBLK NUMBER; --data 平均塊數, 一個dist-key 對應的資料表的塊數。
M_CLSTFCT NUMBER; --這個這個值,不太好理解,先放下
M_INDLEVEL NUMBER; --索引的level 數。
BEGIN
DBMS_STATS.GET_INDEX_STATS(OWNNAME => NULL,INDNAME => '&source_index_name',
NUMROWS => M_NUMROWS,NUMLBLKS => M_NUMLBLKS,
NUMDIST => M_NUMDIST,AVGLBLK => M_AVGLBLK,
AVGDBLK => M_AVGDBLK,CLSTFCT => M_CLSTFCT,
INDLEVEL => M_INDLEVEL);
M_CLSTFCT := M_CLSTFCT-3000;
DBMS_STATS.SET_INDEX_STATS(OWNNAME => NULL,INDNAME => '&target_index_name',
NUMROWS => M_NUMROWS,NUMLBLKS => M_NUMLBLKS,
NUMDIST => M_NUMDIST,AVGLBLK => M_AVGLBLK,
AVGDBLK => M_AVGDBLK,CLSTFCT => M_CLSTFCT,
INDLEVEL => M_INDLEVEL);
END;
/
對於唯一索引 numdist == numrows key 的數目跟行數是一致的,
avglblk = numlblks / numdist 預設的計算方式。
avgdblk = clstfct /numdist 預設的計算方式。
ownername => null ,表示分析當前schema .
clstfct 代表的意思,不很好表達,這個值比較重要,會影響到執行計劃的cost值,
大體的意思就是,舉個例子:
select name from tab where id =1 ;
id =1 的 資料假設分配在兩個資料塊裡(blk1 ,blk2) , 如果 clsfct 的值很大,(這個值的計算我們以後再說)
資料的實際計算路徑應該類似於: 先從blk1 取一筆資料,然後去 blk2裡再取一筆資料,然後兩個資料merge
然後再從blk1 取一筆資料,然後再從blk2取一筆資料,就這樣來回的在兩個資料塊間切換,
如果 blk1 跟blk2 是連在一起的,那麼會在一個disk i/0 中讀入記憶體,然後產生了大量的consistent get
如果不好採, 這個資料庫塊間間隔了幾十個資料塊,那麼就會產生比較頻繁的物理i/0切換,
這個值大體的就是這個意思了。 這個對應於all_indexes 檢視的CLUSTERING_FACTOR 欄位的解釋:
( Indicates the amount of order of the rows in the table based on the values of the index.
* If the value is near the number of blocks, then the table is very well ordered. In this case, the index entries in a single leaf block tend to point to rows in the same data blocks.
* If the value is near the number of rows, then the table is very randomly ordered. In this case, it is unlikely that index entries in the same leaf block point to rows in the same data blocks. )
這個值比較理想的狀態下應該跟 numblk 的數量查不多。
等對這個東西看的差不多了,再寫個文件,先這樣看著吧。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/133735/viewspace-2923496/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【統計資訊】Oracle統計資訊Oracle
- Oracle的統計資訊Oracle
- 【統計資訊】Oracle常用的收集統計資訊方式Oracle
- ORACLE表統計資訊與列統計資訊、索引統計資訊Oracle索引
- Oracle 統計資訊Oracle
- Oracle統計資訊Oracle
- ORACLE表統計資訊與列統計資訊Oracle
- Oracle系統統計資訊Oracle
- Oracle 11g 修改表級別的自動收集統計資訊比率Oracle
- Oracle收集統計資訊Oracle
- Oracle 統計資訊收集Oracle
- 收集oracle統計資訊Oracle
- ORACLE 收集統計資訊Oracle
- oracle統計資訊(四)Oracle
- oracle統計資訊(三)Oracle
- oracle統計資訊(二)Oracle
- oracle統計資訊(一)Oracle
- [Oracle] Oracle收集統計資訊的取樣比例Oracle
- ORACLE 統計資訊的收集與管理Oracle
- Oracle 統計資訊介紹Oracle
- Oracle多列統計資訊Oracle
- [統計資訊系列7] Oracle 11g的自動統計資訊收集Oracle
- 批量修改資料後應收集統計資訊
- oracle統計資訊--直方圖的收集:Oracle直方圖
- 重新收集oracle表的統計資訊Oracle
- ORACLE統計資訊的匯出、匯入Oracle
- Oracle統計資訊的收集和維護Oracle
- Oracle統計資訊自動收集Oracle
- oracle收集統計資訊job停止Oracle
- oracle之autotrace統計資訊分析Oracle
- Oracle11g 統計資訊-----統計資訊自動收集任務Oracle
- Oracle11g 統計資訊——統計資訊自動收集任務Oracle
- 關於ORACLE自動統計CBO統計資訊Oracle
- 【ASK_ORACLE】Oracle如何恢復舊的統計資訊Oracle
- Oracle的自動統計資訊不收集直方圖的資訊Oracle直方圖
- Oracle錶的歷史統計資訊檢視Oracle
- Oracle直方圖統計資訊的應用Oracle直方圖
- 【oracle】統計資訊的恢復和備份Oracle