程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> 如何使用 Optim Query Tuner 進行數據庫性能調優,第 2 部分:使用 Optim Query Tuner 對 SQL 語句進行查詢優化

如何使用 Optim Query Tuner 進行數據庫性能調優,第 2 部分:使用 Optim Query Tuner 對 SQL 語句進行查詢優化

編輯:DB2教程

在對 OQT 進行了基本的配置之後,就可以開始使用 OQT 來對 SQL 語句進行各種調優工作。OQT 的功能可以分為幾個部分:針對特定問題提供各種優化建議的專家系統工具;以及提供診斷信息的報告工具。

提供優化建議的專家系統工具包括:Statistics Advisor(統計信息調優專家),Query Advisor (SQL 語句優化專家),Access Path Advisor(訪問路徑優化專家),Index Advisor(索引優化專家)和 Visual Plan Hint(可視化優化提示)。

診斷信息報告工具包括:Capture SQL(數據源定義),Query Annotation(SQL 語句注釋)和 Access Plan Graph(訪問路徑圖)。

下面我們將逐一介紹上面提到的各個 OQT 功能。本文裡的 SQL 語句所引用到的表,均來自 TPC-D 標准中所定義的表。關於 TPC-D 標准的詳情,請參見參考資源。

使用 Capture SQL 識別查詢性能低的語句

在數據庫應用開發和性能調優的過程中,用戶首先要做的就是定位存在問題的查詢語句,然後才能對其進行分析以期提高該查詢語句的性能。但由於很多開發人員往往缺乏數據庫調優方面的經驗,因此需要借助有效的工具來輔助其定位問題。

OQT 的 Capture SQL 模塊(捕獲 SQL 模塊)可以幫助數據庫應用開發者和數據庫管理員准確地定位問題查詢。Capture SQL 模塊可以從多種數據源 Catalog(數據庫系統表)、Statement Cache(數據庫的 SQL 語句緩存容器)和 SQL 存儲過程等中抽取查詢語句,並使用 Capture SQL 分析功能定位存在問題的語句。從而減少用戶的調優成本,提高工作效率。

借助 OQT 的 Capture SQL 模塊來定位問題查詢主要分為兩個步驟。首先用戶需要選擇一種數據源,即可能存在問題查詢的地方。目前 OQT 支持的數據源有用戶輸入、Statement cache、Catalog、SQL 存儲過程和操作系統普通文件等。

選擇好數據源之後,用戶就可以定義一些過濾條件來查找問題查詢。需要注意的是,不同的數據源分別對應於一組不同的過濾條件供用戶選擇定義。用戶需要理解這些過濾條件的含義,才能很好的應用它們來定位問題查詢。

下圖 1 和 2 定義了一組過濾條件,目的是查找包 (Catalog Package) 名字為’ DSNTEST ’中估計消耗 CPU(處理器)執行時間大於 500 毫秒的問題查詢。

圖 1. 定義過濾條件示例 1

如何使用 Optim Query Tuner 進行數據庫性能調優,第 2 部分:使用 Optim Query Tuner 對 SQL 語句進行查詢優化

查看原圖(大圖)

圖 2. 定義過濾條件示例 2

如何使用 Optim Query Tuner 進行數據庫性能調優,第 2 部分:使用 Optim Query Tuner 對 SQL 語句進行查詢優化

查看原圖(大圖)

此外,為了方便用戶管理已經定義的過濾條件組合,用戶可以將其保存成試圖(VIEw),以便於日後的再次查閱和修改。

使用 Query Annotation 格式化標注 SQL 語句

當用戶分析比較復雜的 SQL 語句時,通常要采用手工的方式對其進行格式化整理,這樣才能便於用戶理解該 SQL 語句的含義。然而手工整理的方式不僅繁瑣、低效,而且受人為因素制約容易出錯。因此,OQT 提供了自動化工具 Query Annotation(SQL 標注工具)。該工具不僅可以幫助用戶對 SQL 語句進行格式化整理,使其便於閱覽;而且可以對 SQL 語句中所涉及的 Table、Column 以及 Predicate 進行注釋。借助這些注釋信息 ( 包含統計信息和估計代價信息 ),用戶可以方便地對該 SQL 語句進行性能分析。

下圖 3 展示的是采用該工具對一個較復雜的 SQL 查詢語句進行處理的結果:

圖 3. Query Annotation 結果示例

如何使用 Optim Query Tuner 進行數據庫性能調優,第 2 部分:使用 Optim Query Tuner 對 SQL 語句進行查詢優化

查看原圖(大圖)

結果分為兩部分:一部分是格式化後的 SQL 語句;另外一部分是對該 SQL 語句中所引用的 Table、Column 和 Predicate 的注釋部分。可以發現,SQL 語句按照其各組成部分分別進行了整理、對齊,各組成部分一目了然,該查詢所要表達的含義很容易就被展現出來。

同時,為了便於用戶分析 SQL 語句,該工具提供了高亮顯示其它相關行的功能。用戶可以在格式化後的 SQL 語句中點擊任意一行,其相關行將被高亮顯示。如用戶可以點擊 FROM 子句中的一個表,則 SELECT 子句中以及 WHERE 子句中引用到該表的行將被高亮顯示。如下圖 4 所示:

圖 4. Query Annotation 高亮功能示例

如何使用 Optim Query Tuner 進行數據庫性能調優,第 2 部分:使用 Optim Query Tuner 對 SQL 語句進行查詢優化

查看原圖(大圖)

OQT 自動化工具 Query Annotation 處理結果的另外一部分內容是對 SQL 的注釋部分,即對該 SQL 語句中所引用的 Table、Column 和 Predicate 的注釋部分,如 Table 中總共有多少行、Table 中滿足查詢條件的行數、Predicate 的估計過濾率等一些 CATALOG 中的統計信息和 SQL 執行時的估計代價信息。通過這些注釋信息,用戶可以方便的分析該 SQL 的性能。

同時,該工具還提供了另外一項高級功能,即格式化顯示經過數據庫引擎轉換後的 SQL 語句。感興趣的用戶可以參閱自動化工具 Query Annotation 關於轉換後(Transformed)的部分。

使用 OQT 圖形化展示數據訪問計劃

Access Plan Graph( 圖形化數據訪問計劃 ),簡稱 APG,是 OQT 的一項重要功能部件。它通過圖形化的方式展現 DB2 的數據訪問計劃,各 mini-plan 的組成及連接細節,並可查閱各節點的數據字典和統計信息。可視化的數據訪問計劃能夠幫助更好地理解優化器所選擇的數據訪問計劃,更加容易地發現性能的瓶頸。

圖 5. 圖形化數據訪問計劃示例

如何使用 Optim Query Tuner 進行數據庫性能調優,第 2 部分:使用 Optim Query Tuner 對 SQL 語句進行查詢優化

查看原圖(大圖)

上圖 5 是 APG 展示的數據訪問計劃。

APG 的界面基本上分成兩個部分,第一個部分(如圖示 1 所示)是圖形化數據訪問計劃顯示區,從圖中我們看到數據訪問計劃是以樹狀的結構進行展現,不同類型的節點會以不同形狀及顏色表示,同時 APG 中對這些顯示屬性提供了定制功能。為了方便浏覽圖形及圖形節點中的數據,APG 還提供豐富的圖形操作功能,例如放大、縮小、圖形變換、節點浮動信息提示、以及節點上豐富的右鍵菜單等。

例外 APG 還提供靈活的打印功能,如圖 6 所示,例如你可以選擇打印所有查詢塊(Query block)中的圖形,打印指定查詢塊(Query block)或打印選定的圖形區域以及格式化後的 SQL 文本等。

圖 6. 打印界面

如何使用 Optim Query Tuner 進行數據庫性能調優,第 2 部分:使用 Optim Query Tuner 對 SQL 語句進行查詢優化

界面的第二部分(如圖示 2 所示)是功能選擇卡。位於最上層的功能卡是 APG 概要顯示區,這個區域顯示當前打開的數據訪問計劃的概要信息。位於中間的是節點詳細信息顯示區,如下圖 7 所示:

圖 7. 節點詳細信息顯示界面

如何使用 Optim Query Tuner 進行數據庫性能調優,第 2 部分:使用 Optim Query Tuner 對 SQL 語句進行查詢優化

查看原圖(大圖)

當在圖形顯示區選中某一個節點時,該節點的詳細信息例如數據字典及統計信息,將會被顯示在這個選擇卡中。為方便信息的浏覽,這些信息以樹狀的結構進行歸類和組織。

最後一個選擇卡是數據訪問計劃數據查詢區,如下圖 8 所示,當打開的數據訪問計劃非常龐大時(可能包含上百個節點),我們常常需要很快定位到我們關心的節點,例如我需要快速查看所有表掃描類型的節點,這時數據查詢功能將帶來便利。

圖 8. 數據訪問計劃查詢界面

如何使用 Optim Query Tuner 進行數據庫性能調優,第 2 部分:使用 Optim Query Tuner 對 SQL 語句進行查詢優化

查看原圖(大圖)

使用 Query Advisor 優化 SQL 語句

數據庫管理員(DBA)和數據庫程序開發人員通常很難了解到 DB2 內部處理每一條 SQL 語句的細節。某些情況下,用戶的 SQL 查詢語句寫的不夠好也可能導致 DB2 運行時性能不佳。那麼什麼樣的 SQL 語句算是“好”的,什麼樣的是“不好”的?針對這種問題,OQT 中的 Query Advisor 提供相應的功能,來指出用戶使用的 SQL 語句中可能存在的性能問題,並給出相應的解決建議。

下面介紹一下 OQT 中 Query Advisor 的使用。首先在 Query Tuner Project 中的 Query Text 裡輸入 SQL 查詢語句(如圖 9 所示):

圖 9. 在 OQT 中輸入 SQL 語句

如何使用 Optim Query Tuner 進行數據庫性能調優,第 2 部分:使用 Optim Query Tuner 對 SQL 語句進行查詢優化

查看原圖(大圖)

然後在右側菜單欄中點擊“Choose Tuning ActivitIEs”,選擇“Query Advisor”,此時“Query Format and Annotation”會自動被選中。點擊“OK”就可以運行 Query Advisor。

圖 10. 運行 Query Advisor

如何使用 Optim Query Tuner 進行數據庫性能調優,第 2 部分:使用 Optim Query Tuner 對 SQL 語句進行查詢優化

查看原圖(大圖)

對於之前給定的 SQL 語句,Query Advisor 給出的分析結果如圖 11 所示。我們可以看到,在“Advisor Recommendation OvervIEw”中列出了 Query Advisor 給出的若干個建議。按照可能對性能造成的影響程度,這些建議可以劃分為“高”、“中”、“低”三個等級。

圖 11. Query Advisor 分析結果

如何使用 Optim Query Tuner 進行數據庫性能調優,第 2 部分:使用 Optim Query Tuner 對 SQL 語句進行查詢優化

查看原圖(大圖)

當我們在“Advisor Recommendation OvervIEw”中點擊其中某一條分析建議時,其對應的詳細分析結果會顯示在下方的“Query Recommendation Detail”窗口當中,如圖 12 所示。

圖 12. Query Advisor 分析結果詳情

如何使用 Optim Query Tuner 進行數據庫性能調優,第 2 部分:使用 Optim Query Tuner 對 SQL 語句進行查詢優化

查看原圖(大圖)

在“Query Recommendation Detail”中,Query Advisor 用下劃波浪線在 SQL 語句中明確標記了可能帶來性能問題的可疑點;另外,Query Advisor 對每一條建議給出了詳細的說明(Recommendation Details)和理論上的解釋(Explanation),以及相關的示例(Example)。

Query Advisor 是一個基於 DB2 數據庫優化經驗法則的專家系統工具,根據用戶輸入的 SQL 查詢語句,它自動的給出修改建議,用戶可以根據這些建議來修改他們的 SQL 語句,從而得到查詢性能上的提升。

使用 Access Path Advisor 優化訪問路徑

DB2 中的訪問路徑(Access Path)是分析 DB2 性能問題時的主要信息來源。經驗豐富的數據庫管理員在遇到運行性能不佳的 SQL 語句時,往往是通過查看 DB2 的 PLAN_TABLE 中的信息來分析該條 SQL 語句的訪問路徑,找出其中的性能瓶頸。但是這要求用戶具有非常豐富的 DB2 調優經驗才能做到,而且這樣人工分析的方式耗時耗力,在處理非常復雜的 SQL 語句時候可能會力不從心。

針對這樣的問題,OQT 提供了 Access Path Advisor,它可以分析給定 SQL 語句的訪問路徑,自動進行分析並找出其中可能存在性能問題的訪問計劃(Access Plan),提醒用戶注意這些潛在的問題。

下面介紹 OQT 中 Access Path Advisor 的使用。在 Query Tuner Project 中的 Query Text 裡輸入 SQL 查詢語句之後,在右側菜單欄中點擊“Choose Tuning ActivitIEs”,選擇“Access Path Advisor”,點擊“OK”就可以運行 Access Path Advisor。

圖 13. 運行 Access Path Advisor

如何使用 Optim Query Tuner 進行數據庫性能調優,第 2 部分:使用 Optim Query Tuner 對 SQL 語句進行查詢優化

查看原圖(大圖)

對於之前給定的 SQL 語句,Access Path Advisor 給出的分析結果如圖 14 所示。我們可以看到,在“Advisor Recommendation OvervIEw”中列出了 Access Path Advisor 給出的若干個建議。按照可能對性能造成的影響程度,這些建議可以劃分為“高”、“中”、“低”三個等級。

圖 14. Access Path Advisor 分析結果

如何使用 Optim Query Tuner 進行數據庫性能調優,第 2 部分:使用 Optim Query Tuner 對 SQL 語句進行查詢優化

查看原圖(大圖)

當我們在“Advisor Recommendation OvervIEw”中點擊其中某一條分析建議時,其對應的詳細分析結果會顯示在下方的“Query Recommendation Detail”窗口當中,如圖 15 所示。

圖 15. Access Path Advisor 分析結果詳情

如何使用 Optim Query Tuner 進行數據庫性能調優,第 2 部分:使用 Optim Query Tuner 對 SQL 語句進行查詢優化

查看原圖(大圖)

在“Query Recommendation Detail”中,Access Path Advisor 對每一條建議給出了詳細的說明(Recommendation Details)和理論上的解釋(Explanation),以及相關的示例(Example),除此之外,Access Path Advisor 還給出了該條建議對應的 PLAN_TABLE 的記錄,便於用戶對照 Access Path Advisor 給出的建議查看相應的訪問計劃。

Access Path Advisor 是一個基於 DB2 數據庫優化經驗法則的專家系統工具,根據用戶輸入的 SQL 語句的訪問路徑,它自動的分析查找其中的可疑點並提醒用戶注意。需要指出的是,Access Path Advisor 並不會直接給出修改建議。如果用戶想直接對 SQL 語句的訪問路徑進行修改,可以使用 OQT 當中的其他專家系統工具,比如 Visual Plan Hint(可視化優化提示)。

使用統計信息調優專家分析查詢語句

說到數據庫優化問題,DBA 的第一反應就是想到統計信息,RUNSTATS,統計信息的完整性與否,很大程度上決定了查詢語句性能的好壞,針對一條有性能問題的查詢語句,他面對的是這條查詢語句相關的很多對象,以及這些對象的統計信息,如何能准確的發現當前的哪些統計信息是被 DB2 優化器用到的,並且和實際數據不一致?如何能准確用 RUNSTATS 語句來收集這些必要的統計信息呢? OQT 統計信息調優專家能夠幫助 DBA 完成這些工作。

下面是 OQT Query Text 窗口,這是 OQT 分析查詢語句的主窗口,用戶可以把之前找到的有性能問題的查詢語句粘貼到 Query Text 窗口,在窗口右側,選擇執行 OQT 統計信息調優專家“Choose Tuning ActivitIEs”->“Statistics Advisor”,如圖 16 所示。

圖 16. 運行 Statistic Advisor

如何使用 Optim Query Tuner 進行數據庫性能調優,第 2 部分:使用 Optim Query Tuner 對 SQL 語句進行查詢優化

查看原圖(大圖)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved