DB2 SQL性能優化相關的10大要素

下面提出了10條和DB2 SQL性能相關的10條因素:

1、提供適當的統計信息
對DB2優化管理器(otimizer)而言,如何更加有效的執行SQL語句是由存在於DB2 catalog中的統計信息決定的,優化器利用這些信息決定最優化的路徑。
因此,爲了保持系統能夠做出最佳選擇,需要經常的運行Runstats命令,來保持系統統計信息的及時有效。在工作負荷很大的生產環境中,經常運行Runstats是很必要的,爲了減少進行統計對系統帶來的影響,可以使用Sampling技術。

2、在SQL語句中儘量使用Stage 1的謂詞
屬於Stage 1的SQL謂詞由Data Manager處理,而屬於Stage 2的SQL由Relational Data Server執行。在處理效率上,Data Manager更有優勢,因此,如果可能的話儘量把SQL語句寫成能夠在Stage 1執行的。如果能夠結合Index來確定SQL語句中的謂詞,那麼將會更加提高SQL執行的效率。因此,在寫SQL查詢語句的時候,要結合Index的定義以及謂詞描寫的選擇,儘可能的讓SQL在Stage 1運行。

3、在SQL中僅選擇需要的列
在SQL語句中,僅指定程序需要的列會有利於提高SQL運行的性能。如果採用Select *這種模式,將會給客戶端的應用程序帶來額外的處理工作,並需要更多的內存等資源。對服務器端而言,多餘的列在排序過程中會增大Sort工作文件,並因此導致排序速度的下降,並需要更多的存儲資源。在網絡傳輸過程中,也將傳輸一些不必要的數據,降低網絡效率。

4、僅選擇需要的行
查詢的行越少,查詢的速度和響應速度就越快。查詢獲得的每一行數據,都經歷了從存儲設備-〉緩衝池-〉排序和轉換-〉網絡傳輸-〉應用程序等一系列過程。在數據的查詢過程中,數據庫管理器將會作很多數據的過濾工作,如果有許多並不需要的行從數據庫中檢索出來,將會浪費很多不必要的處理時間,因此,在SQL語句的撰寫過程中應該詳細的指定查詢條件,僅查詢需要的行。

5、如果數據庫中的數據很長時間不變,在SQL儘量使用常量或者字符。
在SQL中使用主機變量,是爲了使系統適應不斷變化的外部環境。在SQL程序中使用主機變量能夠使應用程序不需要重新綁定就可以直接執行新的SQL定義。但是這種靈活性是以降低DB2優化管理器的性能爲代價的。在包含主機變量的SQL語句中,DB2優化管理器以默認的估計值來進行SQL路徑的選擇,而不是根據Catalog中的統計信息,這種選擇很多時候都不是最優化的。因此,使用常量或者字符代替主機變量在長時間固定不變的環境中將會比使用主機變量更有優勢。

6、使數字、日期等數據類型相匹配
在DB2 V7以前,數字類型的數據比較過程中,如果數字的長度不同,則DB2將會把這種數字的比較和匹配放到Stage 2來做,這樣就降低了處理的效率。自從DB2 V7開始,系統提供了Cast的方法,能夠手動的改變數字長度,在某些情況下能夠避免在Stage 2種進行處理。

7、排序SQL語句的限制條件
DB2系統對SQL語句的處理過程是按照謂詞的類別進行分類的,例如:Stage 1 and Indexable屬於第一類,Stage 1 and On Index (index screening)屬於第二類,以此類推。而同一類別的情況下,系統在處理過程中按照其定義的物理順序進行處理。因此,SQL語句在書寫過程中,應該按照限制條件的關鍵性順序。這樣做的好處是:能夠讓系統首先根據限制條件最嚴格的謂詞定義來進行數據掃描,能夠有效地減輕第二次甚至第三次的謂詞掃描過程的數據處理壓力,並提高總體的SQL語句檢索效率。

8、刪掉不必要的謂詞條件
每個SQL語句中的謂詞條件都會被系統處理,都會佔用系統資源,因此如果某個條件是不必要的,請把它從SQL語句中刪除掉,以避免不必要的資源開銷。

9、限制返回的結果集
如果知道返回的結果集數量,使用FETCH FIRST n ROWS ONLY參數能夠限制返回確定數量的結果集,並且能夠快速的釋放一些相關資源,例如:緩衝池裏面的page在結果集返回完成後能夠快速被釋放,一些lock以及Cusor資源也能夠被釋放。這樣可以節省系統資源,有利於提高系統資源的利用率。

10、分析和優化訪問路徑(Access Paths)
通常系統自動生成的訪問路徑不一定是最優的,爲了進一步優化SQL執行的性能,我們可以利用Explain等工具來獲取和解釋Explain的輸出信息,並且驗證訪問路徑是否適合當前的環境。特別是在生產環境中,每個SQL查詢語句的訪問路徑都應該詳細檢查。優化查詢主要包含以下一些技術:OPTIMIZE FOR n ROWS
、FETCH FIRST n ROWS ONLY、Table expressions with DISTINCT、REOPT(VARS)、Index Optimization等。

說明:
下面給出了一個SQL引擎組建圖,僅供參考和幫助對本文的理解所用。

發佈了19 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章