查詢性能問題是用戶在使用數據庫時最關注的問題之一,同時也是 DB2 開發人員重點研究和改進的方向之一。DB2 V10.1 對查詢性能進行了多方面的增強。本文將重點介紹 SQL 查詢的快速性和可靠性的改進,涉及 PED,PEA,哈希排序以及統計信息的增強,并通過實例對
查詢性能問題是用戶在使用時最關注的問題之一。尤其對數據倉庫的用戶而言,大型報表的查詢至關重要。db2 v10.1 在 sql 查詢的快速性和可靠性上都有很大的改進。在快速性上,db2 引擎通過對去重、聚合以及哈希連接的改進優化了查詢性能,減少用戶調優成本。在可靠性上,db2 增強了統計信息收集功能,提高了優化器的準確性。本文將重點介紹上述改進,并通過實例對這些增強特性進行具體的講解。
對常用 SQL 查詢的增強
DB2 所有版本都非常關注 SQL 查詢性能的優化,DB2 V10.1 包含了許多性能改進提高了許多常用 SQL 查詢的速度。例如查詢時通過部分提前去重(PED)、部分提前聚合(PEA)、在查詢優化器中更廣泛的應用哈希連接以及對統計信息的改進等這些方式來提高查詢速度。這些算法的優化都是 DB2 V10.1 自動進行的,用戶無需對其進行額外配置或者對 SQL 語句進行改變。雖然這些改進對用戶而言是透明的,但是我們可以通過實例來觀察這些新特性對查詢的增強。
部分提前去重
PED(部分提前去重)是英文 Partial early distinct 的縮寫,其核心是 : 通過哈希方法在查詢過程中提前去掉大部分重復的行(做 distinct),這樣在查詢后期的操作(例如連接、排序等等)中涉及的數據量就會變小。例如在排序的時候,隨著數據量的變小,相應的會降低耗盡排序堆內存的機會,在這種情況下,也就減少了使用相對較慢的磁盤來做臨時緩沖區的概率。很明顯,這種在查詢中提前去重的做法會改進查詢的效率。PED 并不會消除全部的重復行,因此查詢結束前還需要做一次完整的 distinct 操作。
雖然 PED 對用戶而言是透明的,但是我們可以通過查詢 EXPLAIN_ARGUMENT 表來獲知是否已經啟用 PED。在 EXPLAIN_ARGUMENT 中引入了一個新值 (HASHED PARTIAL) 來表明某個查詢是否應用了 PED:
- 列:ARGUMENT_TYPE = UNIQUE 統
- 并且列:ARGUMENT_VALUE = HASHED PARTIAL,這就表明 PED 新特性已經被應用了。
清單 1 查看 EXPLAIN_ARGUMENT 表中 PED 的特征值
select distinct(argument_type), VARCHAR(argument_value,30) as argument_value from explain_argument where argument_type = 'UNIQUE' ARGUMENT_TYPE ARGUMENT_VALUE ------------- ------------------------------ UNIQUE FALSE UNIQUE HASHED PARTIAL UNIQUE TRUE 3 record(s) selected.
在上面的清單 1 中我們可以看到:從 EXPLAIN_ARGUMENT 表中查詢到了 PED 的特征值 Unique 和 HASHED PARTIAL,這就表明已經有查詢應用了 PED 特性。
下面我們通過使用 db2exfmt 工具來查看 PED 在一個具體查詢中的應用情況:
首先我們打開 explain 模式:
db2 set current explain mode explain
然后執行我們所關注的 SQL 查詢:
SELECT DISTINCT c11, c12, c21, c22 from t1, t2 where c11 = c21
最后關閉 explain 模式并且用 db2exfmt 工具來輸出查詢計劃:
db2 set current explain mode no db2exfmt -d dbname -g TIC -w -1 -n % -s % -# 0 -o out1.txt
在我們前面用 db2exfmt 中獲取的 out1.txt 文件中,我們可以看到如下清單 2 所展示的查詢計劃,其中 pUNIQUE即表明該查詢在初期就已經進行了 distinct 操作,這就是應用了 PED 特性。
清單 2 應用了 PED 的查詢計劃
RETURN ( 1) Cost I/O | 40 TBSCAN ( 2) 427.872 15 | 40 SORT ( 3) 427.411 15 | 2029.53 HSJOIN ( 4) 278.035 15 /---+---- 1001 20.275 TBSCAN pUNIQUE ( 5) ( 6) 135.161 132.519 8 7 | | 1001 801 TABLE: NEWTON TBSCAN TABLE1 ( 7) Q2 113.305 7 | 801 TABLE: NEWTON TABLE2 Q1
同時從 out1.txt 的后面部分,我們還可以看到清單 3 中的內容: PED 特性的特征值 Unique 和 HASHED PARTIAL。同時里面還包含了本次查詢相關的系統資源開銷,通過這些值的比較,我們可以獲知應用 PED 特性后所帶來的查詢性能的提升效果。