高效能sql優化 執行計畫

2021-08-28 04:01:54 字數 1885 閱讀 6661

一、序言

執行計畫是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語句執行計畫來說,其可能比系統統計資料產生更大的影響。

三、總結

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

高效能mongodb之執行計畫

mongodb 3.0之後,explain的返回與使用方法與之前版本有了不少變化,介於3.0之後的優秀特色,本文僅針對mongodb 3.0 的explain進行討論。現版本explain有三種模式,分別如下 其中 queryplanner 是現版本explain的預設模式,queryplanner...

高效能mongodb之執行計畫

mongodb 3.0之後,explain的返回與使用方法與之前版本有了不少變化,介於3.0之後的優秀特色,本文僅針對mongodb 3.0 的explain進行討論。現版本explain有三種模式,分別如下 其中 queryplanner 是現版本explain的預設模式,queryplanner...

Sql優化 執行計畫

一段sql 寫好以後,可以通過檢視sql的執行計畫,初步 該sql在執行時的效能好壞,尤其是在發現某個sql語句的效率較差時,我們可以通過檢視執行計畫,分析出該sql 的問題所在。1 開啟熟悉的檢視工具 pl sql developer。在pl sql developer中寫好一段sql 後,按f5...