1. 程式人生 > >高效能sql優化-執行計劃

高效能sql優化-執行計劃

一、序言

    執行計劃是sql調優必不可少的一部分,如果你還是簡單的認為我們向資料庫發出一條sql語句,資料庫只是根據我們的需求解析sql語句,然後返回我們想要的結果,那你真的是太天真了,因為資料庫還會對每條通過會話發出的sql進行一系列的檢查、分析和處理,然後由優化器選擇生成護著選定出一個成本最低的執行計劃,然後執行這個執行計劃得到我們的結果的。

二、詳解

    1、執行計劃的概念

          使用者成功連線資料庫,也就是意味著,使用者個數據庫之間成功建立起了會話。伺候,使用者每通過會話發出一條sql語句,資料庫系統就會對其進行一系列的檢查分析和處理。

          首先,會話申請系統對使用者發出sql語句進行語法、語義等分析檢查

                  如果沒通過,會報錯,並且終止該sql語句的執行;

                  如果通過,會話將咋自己的服務程序空間內查詢該sql語句的相關的資訊

                         如果發現,則進入執行等後續的步驟,

      這個對話在其服務程序空間內查詢sql語句相關的資訊的過程我們稱之為快速解析或者軟軟解析

                        如果未發現,在其服務程序空間內沒有發現該sql相關的資訊,那麼系統將會向系統申請在例項共享池中查詢該sql語句的相關的資訊

                               如果發現,則將其複製到繪畫的服務程序空間,然後執行後續的步驟,

      這個會話在例項共享池中查詢sql語句的相關資訊,並將其複製到會話服務程序空間的過程,被稱為軟解析。

                               如果沒有發現,在會話的例項共享池中沒有發現該sql的相關資訊,那麼會話將向系統申請將該sql語句載入進例項共享池,同時,優化器會根據資料庫內各種相關的資訊,對該sql語句進行分析和計算等一系列的操作,最後優化器會為該sql語句選擇一個它認為最優的執行計劃,接著,繼續執行後續的步驟。

     這個將sql語句載入進例項共享池,並且對sql語句分析和計算等操作,最後為之生成執行計劃等資訊的過程,稱之為硬解析。

    快速軟解析、軟解析和硬解析三種情況下,進入執行等後續的步驟都是一樣的,即執行查詢到的或者生成的sql語句的執行計劃中標識的每個步驟,最終獲取該sql語句的結果,並將結果返回為使用者。快速軟解析、軟解析和硬解析三種情況他們消耗的資源一次增加,尤其是硬解析,會消耗大量的系統資源,因此特別是在生產環境的OLTP業務系統中,應該儘量避免大量的硬解析操作。

     目前,幾乎所有的高版本的關係庫的優化器都是基於成本的,所以絕大多數情況下,sql語句不會成為影響最終執行計劃的決定性因素,但有些場景,針對同一語義和解結果的sql語句,不同的寫法會影響優化器為之生成和選定的執行計劃,因此sql調優時,我們可以通過改寫sql語句來改變其執行計劃,從而達到提升sql語句效能的目的。

    (優化器分為兩種,一種是基於成本的,一種是規則的)

    2、系統統計資料

         簡單來說,系統統計資料反應了資料庫系統的處理能力,會對執行計劃中所有的操作的成本計算產生重要的影響,Oracle資料庫中相關係統包的相關儲存過程負責對系統統計資料進行收集,系統統計資料主要包含CPU轉速、單塊讀消耗的時間、多塊讀消耗的時間、多塊讀平均每次都去的資料塊數等。

         系統統計資料收集分為兩種:一種是非負載模式,另一種是負載模式。兩種模式下,系統統計資料包含有不同的資料項,同時也針對不同的場景,前者適用於各種負載場景;後者主要適用於典型負載場景。

          系統統計資料是非常的重要的,它們不但會影響優化器計算分析sql語句執行計劃相關成本時所採用的演算法,同時還會影響最終sql語句生成和選擇的執行計劃。

    3、物件統計資料

           優化器對使用者提交過來的sql語句進行硬解析時,會格局系統統計資料和物件統計資料等各種資訊,計算出所有或者部分候選執行計劃的成本,最後,選擇出成本最低的作為該sql語句的最終執行計劃。因此物件統計資料時優化器計算成本時的重要依據。單就sql語句執行計劃來說,其可能比系統統計資料產生更大的影響。

           物件統計資料主要包含三部分:表(包括分割槽和子分割槽)相關統計資料、索引(包括分割槽和子分割槽)相關統計資料和欄位相關統計資料。通過相關關係包中相關儲存過程,可以對這些物件統計資料程序收集。

三、總結

    執行計劃是調優必備的,希望大家能夠加大對執行計劃的重視程度。過程就是這樣的,實踐起來還是比較麻煩的,希望你能夠堅持。