TOP 第四章 之 保持統計資訊時效性的策略

2021-08-30 00:16:42 字數 1987 閱讀 3400

繼續貼出 troubleshooting oracle performance 一書第四章《系統和物件統計資訊》的翻譯稿的部分節錄。在前面幾章的部分章節放出來後,收到了很多朋友的意見和建議,在此一併謝過!翻譯更多是考量譯者的中文水平,現在我們幾位譯者對此是深有體會。本章初稿譯者朱一(@mujiang)

保持統計資訊時效性的策略(strategies for keeping object statistics up-to-date)

工具包dbms_stats提供了很多管理物件統計資訊的功能。那麼我們該如何使用它來達到最佳配置呢?這個問題很難回答。很可能就沒有確定的答案。就是說,沒有一種方式適用於所有情況。讓我們研究一下該如何著手解決這個問題。

基本準則是,或許是最重要的乙個,查詢優化器需要通過物件統計資訊知道資料在資料庫裡面是如何儲存的。因此,修改資料以後,同樣需要重新整理物件統計資訊。我提倡定期收集統計資訊。反對者的理由是資料庫執行好好的,沒必要重新收集統計資訊。這種策略引起的常見問題是,一些物件統計資訊依賴於實際儲存的資料值,比如修改了最大/最小值,這樣的修改不會經常發生在一些典型的表裡面,但是這些資料改變是危險的,它們被應用程式頻繁的使用(引用過時的統計資訊)。實踐當中,太多的問題是因為物件統計資訊過時引起的。

顯而易見,反覆收集靜態資料的物件統計資訊是沒有意義的。只應該對統計資訊陳舊的物件進行收集。所以,需要利用好每張表的修改次數的統計記錄。這樣,我們只需要收集哪些資料發生了顯著變化的表的統計資訊。預設情況下,當乙個表裡面有超過10%的行被修改後,就認為它的統計資訊是過時的(陳舊的)。預設值就不錯,在oracle 11g以後,這個預設值可以修改。

收集統計資訊的頻率也值得**。從每個小時收集到每個月,或是更少,均看到過成功案例。其實這個真的依賴於資料。當用並不陳舊的表統計資訊作為基準時,太長的時間間隔引起過多表的統計資訊陳舊,就要花更多的時間收集統計資訊。因此我喜歡收集得稍微頻繁一些,分散負載,盡量縮短每次收集任務的時間。如果你的系統每天或每週有一些時段負荷比較低,就在這些時段執行計畫的收集作業。如果你的系統是真正的7x24的系統,最好頻繁的執行收集任務(注),每天執行多次,盡量多分散負載。

如果有好的理由不需要收集一些表的統計資訊,在oracle 10g以後,可以鎖定物件統計資訊。計畫收集作業就會跳過這些物件。這樣遠遠好於禁止收集整個資料庫的統計資訊。遺憾的是,在oracle 9i中不能鎖定物件統計資訊,變通方法是,利用表的監控屬性,禁止這些不需要收集統計資訊的表的監控,收集模式(schema)或者資料庫的統計資訊的作業就會跳過這些表。

從oracle 10g開始,應該盡可能的利用預設的收集作業。為滿足需求,應該進行檢查預設的配置,如果必要的話,進行必要的變更。既然只有oracle 11g以後可以在物件級別配置收集任務,你可以在預設收集作業之前執行自定義的作業以收集一些有特殊需求的表的統計資訊。這樣,預設收集作業僅操作統計資訊過時的表,跳過有特殊需求的表。鎖定特性也可以確保只有特定的收集作業才可以重新收集那些關鍵表的統計資訊。

如果收集統計資訊導致了低效的執行計畫,有兩個辦法。一是恢復以前合適的統計資訊來修復問題。二是診斷查詢優化器為何使用新收集的統計資訊得出了低效的執行計畫。首先要檢查統計資訊是否正確的描述了資料的分布。比如,取樣新的資料分布得到了不同的直方圖。有可能是收集本身,或者是收集用到的乙個引數的問題,導致了壞的統計資訊。如果統計資訊是可信的,有兩種可能導致低效的執行計畫:錯誤的配置了查詢優化器,或者優化器犯了乙個錯誤。對於後者我們無能為力,而對於前者,我們能找到解決辦法。無論如何,你應該避免倉促的下結論,推斷說是收集統計資訊引起的問題,進而停止收集統計資訊。

最佳實踐是使用工具包dbms_stats收集物件統計資訊。然而,有些情況下,正確的物件統計資訊反而誤導查詢優化器。有乙個常見的案例,比如歷史資料必須保留很長一段時間(比如有些型別的資料在瑞士必須保留十年),如果隨著時間的推移,資料分布基本不變,用工具包dbms_stats收集物件統計資訊會執行良好。相反,如果每個時期有不同的資料分布,應用程式僅僅使用全部資料的乙個子集,那麼手工修改統計資訊使它反映最相關的資料就是明智之舉。換句話說,如果你知道工具包dbms_stats忽略了或者不能發現最相關的資料分布,告訴查詢優化器迴避物件統計資訊就是恰當的。

九十年前的今天,是個特殊的日子。

讀《白話統計》筆記 第四章

資料 data 定性資料 qualitative data 選擇分析方法的時候,需要注意資料型別。同時要結合研究目的,有序還是無序 定量還是分類,有時候研究目的不同,可以選擇不同的方法進行分析 4.1 計數資料等於分類資料嗎 由此可見,進行分析時,應當注意資料型別 代表的現實意義 4.2 計數資料可...

第四章 繼承

一 為什麼要繼承 在物件導向中我們將具有很多重複內容的類中的內容提取出來,寫成乙個單獨的類 其他類只需要繼承就能取得這些功能,同時可以在自己類中寫入獨特的自定義方法 二 繼承語法 inte ce circle nsobject 繼承是在介面中定義的 冒號後的類名是要整合的類,nsobject 是co...

第四章 物件

三個特性 身份 型別 值 每個物件都有唯一的身份來標識自己,使用內建函式id 得到。例子 usr bin env python coding utf 8 a 32 print a b a print id a id b 結果 d python27 python.exe e workp python ...