程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> 以並行方式處理DB2 for iSeries索引

以並行方式處理DB2 for iSeries索引

編輯:DB2教程

簡介

當人們考慮在數據庫引擎中進行並行處理時,他們立即會想到通過使用多個處理器處理單個查詢來達到改進的 查詢響應時間。人們往往沒有注意到:並行處理也可以加速 索引處理,從而改進數據庫服務器的總體性能。使用 IBM® DB2® Universal Database™ (UDB) for iSeries™,就有可能將多個 CPU 用於索引處理。特別是,當創建索引以及由於底層數據更改而維護索引時,DB2 UDB for iSerIEs 可以使用多個處理器。以並行方式創建和維護索引的能力可應用於傳統的二進制基數和編碼的向量索引結構。

DB2 UDB for iSeries 並行處理只可以在 iSerIEs 服務器上使用,其中已經購買、安裝和激活了 DB2 對稱多處理(DB2 Symmetric MultiProcessing,DB2 SMP)特許功能部件,如啟用並行處理中所述。

並行索引創建

DB2 UDB for iSerIEs 可以將並行處理用於創建 SQL 索引和用鍵值標識的邏輯文件(即,CRTLF 命令)。並行索引處理是通過如下方式完成的:在邏輯上,將基本表分成多個數據段,接著每個進程為指定的表段構建索引鍵值。然後,將由每個並行進程執行的任務合並在一起來完成最後的索引結構。

正如您在 圖1 中所看到的那樣,使用附加的 CPU 資源可以充分減少創建索引所花費的時間。這種能力在非常大型的數據庫環境中或者在需要盡快重新創建索引的恢復方案下變得十分重要。

圖1. 啟用並行性之後極大地改進了索引構建時間

以並行方式處理DB2 for iSeries索引(圖一)

並行索引維護

索引維護的任務是更改索引鍵以反映對相關數據庫行的更改(通常通過 insertupdatedelete 引起)。如果更改了客戶的訂單號或者新的客戶訂單添加到了數據庫,則必須更新所有包含訂單號列作為鍵字段的索引。索引的維護(或更新)影響與添加或更改訂單相關的整個事務時間。

如果數據庫行更改影響多個索引,那麼這些索引的維護會串行發生,缺省情況下,每次維護一個索引。首先,訂單號更改被傳播到 IndexA。對 IndexA 的更改完成之後,訂單號被傳播到 IndexB,依此類推。

並行索引維護涉及同時維護多個索引。客戶的訂單號更改可以被同時傳播到 IndexA 和 IndexB。這個並發索引維護處理減少了在整個數據庫中更改訂單號所花的總計時間。並行索引維護用資源換取了時間,提高了給定應用程序或事務的 I/O 速度。

圖2 反映了可以通過並行維護多個索引達到的節省時間。在圖2中,新行被裝入具有多個索引的表中,並行索引維護將裝入時間縮短到二到三分之一。

圖 2. 當索引維護並行發生時裝入時間得到改進

以並行方式處理DB2 for iSeries索引(圖二)

僅當應用程序處於下列情況時,DB2 UDB for iSerIEs 才使用並行索引維護:

  • 正在執行 8 行或者更多行的分塊插入(或寫)。
  • 相關表上定義了兩個或兩個以上的索引。

一般可以在成批更新和數據倉庫裝入過程中找到分塊插入,所以並行索引維護將在這些環境中產生最顯著的性能效果。

技巧:如果裝入進程添加到表的新行多於該表行數的 20%,那麼通常建議在裝入之前先刪除索引,然後在裝入進程完成之後使用並行處理來重構索引。

啟用並行處理

在安裝 DB2 SMP 功能部件之後,有幾種激活並行處理的不同方法,以便可以執行並行索引構建和維護。

在系統級別

缺省情況下,通過 QQRYDEGREE 系統值,將並行處理量控制在系統范圍的級別。如果該系統值被設置成 *NONE 以外的其它值,那麼在維護和構建索引時 DB2 UDB 將使用並行處理。 CHGSYSVAL (更改系統值)命令可用於更改 QQRYDEGREE 系統值的設置。您可以指定下面這些值來啟用並行索引處理:

  • *MAX — 在並行索引維護和構建期間,DB2 UDB 引擎可以使用可用於作業(連接)的所有 CPU 處理器和所有內存。
  • *OPTIMIZE —“好鄰居”設置。DB2 UDB 引擎在 CPU 處理器之間和內存中進行作業共享。
  • *NBRTASKS n — 它設置 DB2 UDB 引擎可以使用的最大 CPU 處理器數。這不是 QQRYDEGREE 系統值的有效值。
  • *NONE — 這是缺省值。對索引處理不使用並行處理。

在作業或連接級別

如果您想要將並行處理限制於單個作業或連接,則使用 CHGQRYA (更改查詢屬性)CL 系統命令或 QAQQINI 文件來為作業或連接啟用並行處理。這些接口將覆蓋系統值設置。

CHGQRYA CL 命令的 DEGREE 參數接受與系統值相同的值。如果在作業中執行下面的 CHGQRYA 命令,那麼不管系統值是什麼,該作業的並行度只能設置成 *MAX

        CHGQRYA  DEGREE(*MAX)

可以在作業中多次發出該命令來打開或關閉並行性。

QAQQINI 文件同樣允許您為單個作業或連接指定並行處理。象可以在 PC 中找到的 .INI 文件(它們用於存儲控制 PC 工具和應用程序的行為(顏色、窗口大小等)的配置設置)一樣, QAQQINI 文件可用來影響數據庫引擎的行為 — 在這種情況下是並行處理行為。可以在多個數據庫請求之間動態保存和應用這些 QAQQINI 配置設置。

QAQQINI 文件只是一個標准的數據庫表這一事實意味著:您可以根據環境需要,動態地更改不同屬性的值。它還非常靈活,因為標准數據庫接口可用來更改 QAQQINI 屬性的值。下面的SQL 語句演示了如何使用 QAQQINI 文件來將並行處理度設置為 *OPTIMIZE:

UPDATE MyLib.QAQQINISET QQVAL = '*OPTIMIZE'           WHERE QQPAM='PARALLEL_DEGREE'

對於在作業或連接期間可以更改屬性值的次數沒有限制。

結束語

本文演示了 DB2 SMP 功能部件為非查詢工作負載所提供的並行處理的價值。要啟用並行索引處理,可在構建索引、裝入數據或執行批處理前,通過本文中描述的接口之一來激活並行處理。通過這樣做,您可以更充分利用具有多個 CPU 的服務器上的 CPU 資源並提高性能。

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