程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> 在專家的幫助下設計數據倉庫

在專家的幫助下設計數據倉庫

編輯:DB2教程

獲得關於設計索引以及數據分區鍵、物化查詢表、IBM DB2 Universal Database (DB2 UDB) 多維集群的專家幫助。Design Advisor 是 DB2 UDB 內置的,它能提供您所需的幫助。本文解釋了如何使用 Design Advisor 為數據倉庫作出最優的設計。

簡介

本文是關於IBM DB2 Universal Database (DB2 UDB) V8.2 Design Advisor 特性的一個由兩部分組成的系列中的第 2 部分。本文關注的是如何在數據倉庫(DW)數據庫方面有效地使用 Design Advisor。要獲得關於 Design Advisor 的總體介紹和提示,請參閱 第 1 部分。在數據倉庫領域面臨的特殊設計挑戰

Design Advisor 非常適合解決在數據倉庫方面為最優數據訪問而設計物理數據庫時所面臨的特殊挑戰。在開發這個工具時,特別考慮了 DW 的一些方面,包括:

數據倉庫經常使用以下面向 DW 的 DB2 特性:物化查詢表(MQT)、多維集群表(MDC)和數據分區功能(DPF)hash 分區。所以,與簡單地優化索引相比,這裡的設計決策更加復雜。對這些特性的使用必須加以協調,才能將性能發揮到極至。

DW 常常很龐大,有時高達 terabyte 級。在這樣的環境下,存儲對於設計決策的意義就變得更加重大。實際上,當索引沒有帶來足夠的益處時,能夠發現這些可以刪除的索引就是一個重要的設計目標。

DW 的龐大規模也使得更改已有的物理 DB 設計比較困難,因為這意味著要移動大量的數據(使用導出和導入)。因此,需要倚重一個能幫助評價設計方案的工具。

工作負載比較的即席(ad hoc)。這使得 DBA 在實際使用系統之前,難於對工作負載建模。因此,更需要 DBA 一邊監控系統的使用情況,一邊調整物理數據庫的設計。

DW 常常有能作為 Design Advisor 的補充的 IBM 產品,即 DB2 Query Patroller 和 DB2 Cube Views。Query Patroller 適合為 Design Advisor 提供輸入,而 Cube VIEws 中包括一個專門用於設計在 OLAP 模式中使用的 MQT 的工具。

DW 常常有一些表上的視圖,用以為終端用戶提供一個簡化的、反規格化的數據視圖。DW 的設計者可能對發現能通過將這些邏輯視圖轉換成 MQT 來獲得性能好處的情況感興趣。案例研究簡介和講解

下面的案例研究將演示 Design Advisor:您已經有一個數據倉庫,現在正在升級到 DB2 UDB V8.2,而您想使用最新的 DB2 特性,尤其是 MDC 和 MQT。您的數據庫已經在使用 DPF 功能和 Query Patroller 產品。您覺得 DW 中有一個表適合轉換成 MDC。您願意通過刪除和重建表、索引等操作來更改物理 DB2 設計,以便實施 Design Advisor 的 建議。但是,為此將不得不停一次機。

對本案例研究的講解分為以下步驟:

收集和描述提供給 Design Advisor 的工作負載:

從 Query Patroller 收集工作負載

使用 Design Advisor

決定何時以及如何運行 Design Advisor

後續步驟接下來的幾個小節將一一講解這些步驟,並附上 GUI。之後還有一個小節講解該 Design Advisor 的命令行版本。

步驟 1:收集和描述提供給 Design Advisor 的工作負載從 Query Patroller 收集工作負載

在使用 Design Advisor 之前,需要確定如何獲得代表性的工作負載樣本,以作為它的輸入。由於數據倉庫工作負載的即席性質,這個任務有挑戰性。幸運的是,在這個案例研究中,Query Patroller 簡化了這一任務。您可以使用 Query Patroller 從過去的查詢的歷史記錄中進行選擇。您可以選擇最適合自己需要的一個子集:

最大的 10% 的查詢。

只來自訪問特定一組表(例如,一個事實表和它的維表)的一個特定應用程序的查詢。

包括來自每個終端用戶工具(例如 Business Objects 或 SAS)的查詢的樣本。

包括訪問每個表的查詢的樣本。

隨機的樣本。工作負載的選擇應該與調優活動的目標相匹配。對於建議的解釋,應該結合您提供給 Design Advisor 的工作負載。雖然可以包括整個一組查詢,其數量可能介於 1 萬到 100 萬之間,但不推薦這樣做。通常,10 到 100 個查詢最能兼顧取得的結果與消耗的 DB2 資源之間的平衡。

在這個案例中,您可以使用在某個星期一早晨(此時有很多 Business Objects 活動)和某個晚上(此時有些較大的 SAS 任務正在運行)運行的查詢作為樣本。查詢 Query Patroller 表以獲得那些查詢,並將它們導出到一個文件中(請參考 Query Patroller 文檔獲得詳細的說明)。使用這個文件作為 Design Advisor 的輸入。

備選方案:Design Advisor 可以直接導入 Query Patroller 整個一組的查詢。但是,如果有很多查詢(例如超過 10,000),那麼這不是最好的方法。而上面描述的其中某種方法也許更值得推薦。而且,該工具的命令行版本(db2advis)有一個附加選項,通過該選項可以直接從 QP 獲得包含開始時間戳與結束時間戳之間的查詢的工作負載。收集和描述提供給 Design Advisor 的工作負載

有了工作負載文件,便可以啟動 Design Advisor。如圖 1 所示,Design Advisor 允許選擇讓它考慮哪些特性,例如索引、MQT、MDC 和 分區。這個例子包括所有選項。圖 1. 選擇性能特性

提示:選擇所有選項。這樣可以確保 Design Advisor 充分利用各特性之間的協同作用,發現全局最優的解決方案。

備選方案:如果選擇所有選項,可能難於理解為什麼 Design Advisor 建議它所做的事情。有些用戶可能更喜歡以犧牲最優解決方案為代價,采取逐步推進的方案。下面是逐步推進方案的一些例子:

一次只關注一個應用程序 —— 它的工作負載和它所訪問的一部分模式。

一次重點優化對一個表的訪問。也就是說,首先找出針對表 X 的查詢,然後只實施與該表相關的建議。對於接下來的其他表,重復該過程。

單獨關注某個特定的特性。例如,重點在於通過使用 MDC 和重新分區來重新設計 BigFactTable。留下 MQT 用於將來的迭代,可能是在初始的更改在生產中生效之後。

提示:考慮推遲刷新的 MQT。雖然這個例子使用立即(Immediate)刷新,但推遲刷新的 MQT 通常更適合 ETL 活動。

接下來,提供工作負載給 Design Advisor。在這個案例中,您有一個從 Query Patroller 獲得的帶工作負載數據的文件 。步驟 2:決定何時以及如何運行 Design Advisor

除了本系列 第 1 部分所討論的幾點之外,這一步無需特殊的考慮。步驟 3:檢查建議

從圖 2 可以看到,Design Advisor 生成了一組建議,這些建議將導致性能提升 60%。您也可以看一部分建議,即創建 3 個 MQT。圖 2. 選擇建議

圖 3 中顯示了更多的建議。關於 CUSTOMER 表,建議是創建兩個附加的索引,並保留已有的那個索引。關於 LINEITEM 表的一個建議是更改 hash 分區鍵。圖 3. 設計建議

提示:應該記得,工作負載沒有包含任何 ETL 工作。在考慮這些建議時,要留意這些建議對 ETL 工作的性能的影響。

在 V8.2 中,Design Advisor 第一次提供詳細的報告,讓您可以更深入地了解建議。圖 4 展示了哪些查詢從這些建議中獲益最多。在改進不同的 SQL 語句方面有很多的變化。圖 4. Design Advisor 報告

最後,從圖 5 可以看到,Design Advisor 找出了對於這個工作負載來說,不需要達到最佳性能的一些對象。可以選擇刪除這些對象。但是,在刪除之前,需要考慮提供給 Design Advisor 的工作負載是否忽略了可能從這些對象中獲益的語句。圖 5. 未使用的對象

步驟 4 - 後續步驟

除了本系列 第 1 部分所討論的幾點之外,這一步無需特殊的考慮。這裡重申一下,在接受了建議之後,似乎接下來的步驟自然就是作出更改。然而,此時可能還要做些其他事情:

保存建議,以便給其他人看。

以不同的輸入重新運行 Design Advisor,看看能否獲得更好的建議。

在實施建議之前,DBA 通常要做的事情是:

用符合慣例的名稱替代生成的索引名稱。

查看對象所要存儲到的表空間。

添加關於對象的注釋,表明創建它的原因。

DB2 V8.2 有一些補充性的增強,使得這些建議實施起來更加容易。這就是在線索引創建和 alter TABLE 支持。命令行 (db2advis) 講解

現在我們將講解同一個案例研究,不過這次使用的是命令行,而不是 GUI。

下面是這個案例研究中使用到的命令:

db2advis –d TPCD –i tpch_querIEs.in –m IMCP –k LOW -l 700 –c DB2ADVIS_TBSP -f

要點包括:

-m IMCP:規定 Design Advisor 應該考慮新的索引(I)、新的 MQT(M)、將標准的表轉換成 MDC 表(C),並且重新為已有的表分區(P)。默認情況是只考慮索引。

-k LOW:規定將工作負載壓縮到 Low 級別。結果,Design Advisor 將分析您提供的更大一組的工作負載。默認情況是中等(medium)。

-l 700:規定任何新的索引、MQT 等都不能消耗多於 700 MB 的空間。默認情況是數據庫總體規模的 20%。

-c DB2ADVIS_TBSP:規定使用表空間 DB2ADVIS_TBSP 作為生成 MQT 建議的臨時工作空間。如果您想要 MQT 建議,並且正在運行一個 DPF(多分區)示例,那麼這個選項是必需的。否則,這個參數是可選的。

另一個有用的選項(沒有給出)是 -o output_file。該選項保存腳本,以便在一個文件中創建建議的對象。請參閱 參考資料小節,以獲取關於命令選項的更全面信息的鏈接。

當該命令執行時,它描述正在進行的工作,下面顯示了其中的一部分。至此,Design Advisor 已經生成了有關除 MDC 之外的所有對象的建議。

Cost of workload with all recommendations included [1306186] timerons 27 indexes in current solution 3 partitionings in current solution 8 MQTs in current solution

建議集由 27 個索引(新索引或已有的索引)、3 個分區(即與 DPF 相關的更改,例如新的分區鍵或表空間),以及 8 個 MQT(新的或已有的)。

接下來,Design Advisor 分析 MDC,並在完成時顯示以下信息。

3 clustering dimensions in current solution [12305400] timerons (without any recommendations) [1042873] timerons (with current solution) [91.53%] improvement

“3 clustering dimensions”意味著 Design Advisor 建議 3 個 MDC 維。這 3 個維可以同時在一個表上,也可以在不同的表上,例如,3 個維都在表 A 上,或者其中 1 個維在表 A 上,另外兩個維在表 B 上。性能統計信息指的是所有建議的性能,而不僅僅是 MDC 建議的性能。“timerons (without any recommendations)”這一項指的是現有設計能取得的性能,而“with current solution”指的是實施這些建議後估計能取得的性能。

接著,Design Advisor 以 DDL 格式顯示建議,並且該 DDL 已經被注釋掉。這些建議以如下順序出現:

包括 MDC 或分區建議的基本表。

MQT 建議(首先是新的 MQT,然後是要保留的已有的 MQT,最後是未使用的 MQT)。

新的集群索引(如果有的話)。

索引建議(新的,保留的,然後是未使用的)。

關於更改一個表的建議如下所示:

-- create TABLE "TPCD"."LINEITEM" ("L_ORDERKEY BIGINT NOT NULL, -- "L_PART" INTEGER NOT NULL, -- "L_SUPPKEY" INTEGER NOT NULL, -- "L_LINENUMBER" INTEGER NOT NULL, -- "L_SHIPINSTRUCT" char(25) NOT NULL, (11 other columns omitted from this example) -- MDC409022109290000 GENERATED ALWAYS AS ( ((INT(L_SHIPDATE))/7) ) -- ---- PARTITIONING KEY ("L_PARTKEY") USING HASHING -- ---- IN "TPCDLADT" -- ORGANIZE BY ( -- MDC409022109290000, -- L_SHIPINSTRUCT ) -- PARTITIONING KEY (L_ORDERKEY) USING HASHING -- IN TPCDLDAT --; -- COMMIT WORK ;

注意,這裡建議了一個新的分區鍵(L_ORDERKEY),用以替代當前的分區鍵(L_PARTKEY),後者被注釋掉了。對於這個表的 MDC 建議(ORGANIZE BY 子句)包括兩個維:一個生成的列(INT(L_SHIPDATE/7))和一個已有的列(L_SHIPINSTRUCT)。

輸出中接下來的是關於 MQT 的建議,如下所示。

-- LIST OF RECOMMENDED MQTs -- ======================== -- MQT MQT40902204140000 can be created as a refresh immediate MQT -- mqt[1], 0.009MB create SUMMARY TABLE "ADVDEMO2"." MQT40902204140000" AS (select Q6.CO AS "CO", Q6.C1 AS "C1", …additional details omitted here…) DATA INITIALLY DEFERRED REFRESH IMMEDIATE PARTITIONING KEY (C8) USING HASHING IN TPCDLDAT ; COMMIT WORK; REFRESH TABLE "ADVDEMO2"." MQT40902204140000"; COMMIT WORK; RUNSTATS ON TABLE "ADVDEMO2"." MQT40902204140000"; COMMIT WORK; -- MQT MQT409022041530000 can be created as a refresh immediate MQT (… DDL to create this table follows…)

MQT 建議包括: 估計的大小、使用的表空間、分區鍵(如果適用的話)、刷新類型(立即或延遲)以及這個表是否是一個基本表的復制品(由 REPLICATE 關鍵字表明),但在本案例中不是的。

最後,Design Advisor 以下面顯示的信息結束。

8604 solutions were evaluated by the advisor DB2 Workload Performance Advisor tool is finished.結束語

Design Advisor 非常適合為數據倉庫優化數據庫設計,因為除了關於索引的建議之外,它還可以提供關於 MQT、MDC 和 DPF 分區鍵的建議。由於數據倉庫中的查詢工作負載具有即席的特點,所以該工具分析這種工作負載以及提供建議的方式是非常可貴的。

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