EXPLAIN 和 EXPLSNAP 預編譯/綁定選項
至此,您已經看到了為動態 SQL 語句收集全面解釋信息和解釋快照數據的一些方法。但在很多時候,數據庫應用程序由靜態 SQL 語句構成,這些語句同樣需要分析。那麼如何使用解釋工具來分析在嵌入式 SQL 應用程序中編寫的靜態 SQL 語句呢?要為在嵌入式 SQL 應用程序中編寫的靜態和/或動態 SQL 語句收集全面解釋信息和/或解釋快照數據,可以依靠 EXPLAIN 和 EXPLSNAP 預編譯/綁定選項。
如您所料,EXPLAIN 預編譯/綁定選項用於控制是否為在嵌入式 SQL 應用程序中編寫的靜態和/或動態 SQL 語句收集全面解釋數據。類似地,EXPLSNAP 預編譯/綁定選項用於控制是否為在嵌入式 SQL 應用程序中編寫的靜態和/或動態 SQL 語句收集解釋快照數據。可在用於預編譯包含嵌入式 SQL 語句的源代碼文件的 PRECOMPILE 命令中指定這兩個選項或其中之一。若使用了延遲綁定,那麼可以在將應用程序的綁定文件綁定到數據庫的 BIND 命令中提供這些選項。
可為 EXPLAIN 選項和 EXPLSNAP 選項指派的值包括 NO、YES、ALL 或 REOPT。如果兩個選項均被指派以 NO 值(例如,EXPLAIN NO EXPLSNAP NO),解釋工具將被禁用,不捕獲任何解釋數據。另一方面,若任一選項被指派以 YES 值,解釋工具將被激活,為應用程序中發現的每一條靜態 SQL 語句收集全面解釋信息或解釋快照數據(若兩個選項均按此設置,則同時收集這兩種信息)。若任一選項被指派以 ALL 值,解釋工具將被激活,並且為找到每一條靜態 SQL 語句和每一條動態 SQL 語句收集全面解釋信息或解釋快照數據(若兩個選項均按此設置,則同時收集這兩種信息),即便是 CURRENT EXPLAIN MODE 和/或 CURRENT EXPLAIN SNAPSHOT 特殊寄存器已設置為 NO。
若 EXPLAIN 或 EXPLSNAP 選項被指派以 REOPT 值,則各可再優化的遞增綁定 SQL 語句的全面解釋信息或解釋快照數據(若兩個選項均按此設置,則同時收集這兩種信息)將在運行時放入解釋表,即便是 CURRENT EXPLAIN MODE 和/或 CURRENT EXPLAIN SNAPSHOT 特殊寄存器已設置為 NO。
評估解釋數據
至此為止,您一直將精力集中在收集全面解釋數據和解釋快照數據的不同方法上。但收集完數據後,如何查看這些數據?為了回答這個問題,您需要先看看專門設計用於以一種有意義的格式呈現解釋信息的解釋工具。其中包括:
db2expln
db2exfmt
Visual Explain
db2expln
之前您已經了解到,在包含嵌入式 SQL 語句的源代碼文件綁定到數據庫時(無論是作為預編譯流程的一部分還是在延遲綁定過程中),DB2 Optimizer 將分析遇到的每一條靜態 SQL 語句,並生成一個相應的訪問計劃,此訪問計劃隨後以包的形式存儲在數據庫中。給定數據庫名稱、包名稱、包創建者 ID、部分號(若指定了部分號 0,則處理包的所有部分),db2expln 工具即可為存儲在數據庫系統目錄中的任何包解釋並說明其訪問計劃。由於 db2expln 工具直接處理包而非全面解釋數據或解釋快照數據,因而通常用來獲取那些已選定用於未捕獲其解釋數據的包的訪問計劃的相關信息。但由於 db2expln 工具僅可訪問已存儲在包中的信息,因而只能說明所選的最終訪問計劃的實現,不能提供特定 SQL 語句優化方式的信息。
若使用額外的輸入參數,db2expln 工具還可用於解釋動態 SQL 語句(不包含參數標記的動態 SQL 語句)。
db2exfmt
與 db2expln 工具不同,db2exfmt 工具設計用於直接處理已收集並存儲在解釋表中的全面解釋數據或解釋快照數據。給定數據庫名和其他限定信息,db2exfmt 工具將在解釋表中查詢信息、格式化結果,並生成一份基於文本的報告,此報告可直接顯示在終端上或寫入 ASCII 文件。
Visual Explain
Visual Explain 是一種 GUI 工具,它為數據庫管理員和應用程序開發人員提供了查看為特定 SQL 語句選擇的訪問計劃的圖形化表示的能力。Visual Explain 允許您完成以下任務:
查看用於優化 SQL 語句的數據庫統計數據。
確定是否使用索引來訪問表數據。(若未使用索引,Visual Explain 可幫助您確定哪些列可受益於索引。)
允許您進行 “前” “後” 對比,從而查看性能調優的效果。
獲得訪問計劃執行的各操作的詳細信息,包括各操作的預計成本。
但 Visual Explain 只能用於查看解釋快照數據,要查看已收集並寫入了解釋表的全面解釋數據,則必須使用 db2exfmt 工具。
如您所見,可用於顯示全面解釋數據和解釋快照的不同工具有著很大的差異,無論是在復雜性方面還是在功能方面。表 5 總結了幾種可用工具,並強調了各工具的特征。要使解釋工具發揮出最好的效果,您應在選擇工具時考慮您的環境和需求。
表 5. 可用解釋工具的比較
所需特征 Visual Explain db2exfmt db2expln
用戶界面 圖形化 基於文本 基於文本
“快速但粗略的” 靜態 SQL 分析 否 否 是
靜態 SQL 支持 是 是 是
動態 SQL 支持 是 是 是
CLI 應用程序支持 是 是 否
詳細的 DB2 Optimizer 信息可用 是 是 否
適於分析多條 SQL 語句 否 是 是