本文へジャンプ

データベース/データ管理  >  DB2 Developer Domain  >  ライブラリー  >  技術白書-DB2ファミリー関連  >  
   
 

DB2 for iSeriesの索引並列処理

Kent Milligan
DB2 UDBテクノロジー・スペシャリスト
IBMロチェスター研究所
2003年1月
 
 
コンテンツ
はじめに
索引の並列作成処理
索引の並列保守処理
並列処理を使用可能にする
まとめ
著者について
 著者
Kent Milligan
DB2 UDBテクノロジー・スペシャリスト
IBMロチェスター研究所
2003年1月
 
はじめに
データベース・エンジンにおける並列処理というと、ほとんどの人が、1つの照会を複数のプロセッサーで処理して照会応答時間を短縮させるということをまず頭に浮かべます。ここで見落としていることは、並列処理により索引処理も高速になり、データベース・サーバー全体のパフォーマンスが向上するということです。IBM® DB2® Universal DatabaseTM (UDB) for iSeriesTMでは、索引処理にCPUを使用することができます。つまり、DB2 UDB for iSeriesは、索引の作成時と基のデータが変更したときの索引の保守時に複数のプロセッサーを使用できるということです。索引の作成および保守を並列処理で行えるという機能は、従来のバイナリー基数構造にもEVI (Encoded Vector Index) 構造にも適用されます。

DB2 UDB for iSeriesの並列処理は、DB2対称型マルチプロセッシング (DB2 SMP) ライセンス・フィーチャーが購入され、インストールされ、アクティブになっているiSeriesサーバー上でのみ利用できます (「並列処理を使用可能にする」で後述)。

上に戻る



索引の並列作成処理
DB2 UDB for iSeriesでは、SQL索引の作成でもキー付き論理ファイル (CRTLFコマンド) の作成でも並列処理を使用できます。索引の並列処理は、基になる表を複数のデータ・セグメントに論理的に分割することで行われます。その後、各プロセスが各プロセスに割り当てられた表セグメントの索引キー値を構築します。次に、各並列プロセスにより実行された作業結果がマージされて、最終的な索引構造が完成します。

図1でわかるように、追加のCPUリソースを使用すると、索引作成時間をかなり短縮できます。この機能は、大規模データベース環境や、索引をできるだけ速く再作成する必要のあるリカバリー・シナリオで極めて重要になります。

図1.並列処理が使用できると大きく改善される索引作成時間

上に戻る



索引の並列保守処理
索引の保守は、対応するデータベース行に対する変更 (通常は、挿入、更新または削除により発生) を反映するように索引キーを変更する作業です。顧客の注文番号が変わった場合、または顧客の新規注文がデータベースに追加された場合、注文番号の列をキー・フィールドとして含む索引は、すべて更新する必要があります。注文の追加または変更に関連した全体的なトランザクション時間には、索引の保守 (更新)を計算に入れます。

データベース行の変更が複数の索引に影響する場合、これらの索引の保守はデフォルトでは一度に1つずつ順番に発生します。まず、注文番号の変更は索引Aに波及し、索引Aへの変更が完了した後に注文番号が索引Bに波及する、というようになります。

索引の並列保守には、複数の索引を同時に保守することが含まれます。顧客の注文番号の変更を、索引Aと索引Bに同時に波及させることができます。この索引の同時保守処理により、注文番号の変更をデータベース全体に波及させるためにかかる全体的な時間が短縮されます。索引の並列保守では、リソースを犠牲にして時間を短縮するので、特定のアプリケーションやトランザクションのI/O速度が上がります。

図2は、索引の並列保守処理により達成される時間短縮を示します。図2では、複数の索引を持つ表に新しい行がロードされる場合、索引の並列保守によりロード時間が2〜3倍短縮されることを示します。

図2.索引保守の並列処理に伴い改善されるロード時間

DB2 UDB for iSeriesが索引の並列保守処理を使用するのは、次の場合だけです。

  • アプリケーションが8行以上のブロック挿入 (またはブロック書き込み) を実行する。
  • アプリケーションに関連する表に対して索引が2つ以上定義されている。

ブロック挿入は、バッチ更新プロセスやデータ・ウェアハウスのロード・プロセスでよく使用されるため、索引の並列処理によるパフォーマンスへの影響は、このような環境で最大になります。

ヒント:ロード・プロセスで表に追加する新規行が表全体の20%を超える場合は、ロードの前に索引を削除してからロード・プロセスを実行し、ロード・プロセスが完了した後で並列処理を使用して索引を再作成することをお勧めします。

上に戻る



並列処理を使用可能にする
DB2 SMPフィーチャーをインストールした後、索引の作成と保守が並列して実行されるように並列処理をアクティブにする方法はいくつかあります。

システム・レベル
デフォルトでは、並列処理の程度はQQRYDEGREEシステム値によりシステム全体のレベルで制御されます。このシステム値が*NONE以外の値に設定されている場合に、DB2 UDBでは索引の保守と作成に並列処理を使用します。QQRYDEGREEシステム値の設定を変更するには、CHGSYSVAL (Change System Value:システム値の変更) コマンドを使用します。索引の並列処理を使用可能にするために指定できる値は、次のとおりです。

  • * MAX - DB2 UDBエンジンは、索引の並列作成および並列保守中にジョブ (接続) が使用できるCPUプロセッサーとメモリーをすべて使用できます。
  • *OPTIMIZE - 「友好的な」設定。DB2 UDBエンジンは、そのジョブに割り当てられる分のCPUプロセッサーとメモリーを使用します。
  • *NBRTASKS n - DB2エンジンが使用可能なCPUプロセッサーの最大数を設定します。これは、QQRYDEGREEシステム値に有効な値ではありません。
  • *NONE - これがデフォルト値です。索引処理に並列処理は使用されません。

ジョブ・レベルまたは接続レベル
並列処理を個別のジョブまたは接続だけに限定する場合は、CHGQRYA (Change Query Attributes:照会属性変更) CLシステム・コマンドまたはQAQQINIファイルを使用して、ジョブまたは接続に対して並列処理を使用可能にします。これらのインターフェースはシステム値の設定を上書きします。

CHGQRYA CLコマンドのDEGREEパラメーターは、システム値と同じ値を受け入れます。次のCHGQRYAコマンドをジョブに対して実行すると、システム値に関係なく、そのジョブに対してだけ並列性程度が*MAXに設定されます。

 
 CHGQRYA  DEGREE(*MAX)

このコマンドを1つのジョブ内で複数回発行して、並列性をオンにしたりオフにすることができます。

個別のジョブまたは接続に並列処理を指定するには、QAQQINIファイルを使用することもできます。PCのツールやアプリケーションの動作 (色やウィンドウのサイズなど) を制御する構成設定を格納するために使用するPC上の.INIファイルと同じように、QAQQINIファイルを使用してデータベース・エンジンの動作 (この場合は並列処理の動作) に影響を与えることができます。このようなQAQQINI構成設定は、保存しておいて、複数のデータベース要求にまたがって動的に適用することができます。

QAQQINIファイルは通常のデータベース表ですが、これは、環境での必要に応じて様々な属性値を動的に変更できるということを意味します。また、QAQQINI属性の値の変更には通常のデータベース・インターフェースを使用できるため、柔軟性も非常に高くなります。次のSQLステートメントは、QAQQINIファイルを使用して並列性程度を*OPTIMIZEに設定する方法を示します。

 
 	UPDATE MyLib.QAQQINI
	SET QQVAL = '*OPTIMIZE'
           WHERE QQPAM='PARALLEL_DEGREE'

1つのジョブまたは接続中に属性値を変更できる回数に上限はありません。QAQQINIファイルの作成および使用方法の詳細は、『DB2 UDB for iSeries Database Performance and Query Optimization Guide(DB2 UDB for iSeriesデータベース・パフォーマンスおよび照会オプティマイゼーションの手引き)』またはWebサイトのhttp://www.iseries.ibm.com/developer/bi/tuner/index.htmlを参照してください。

上に戻る



まとめ
この記事では、DB2 SMPフィーチャーにより提供されている並列処理は、非照会型のワークロードにとっても価値があるということを説明しました。索引の並列処理を使用可能にするには、索引の作成、データのロード、またはバッチ処理の実行の前に、この記事で紹介したインターフェースのいずれかを使用して並列処理をアクティブにします。そうすることにより、マルチCPUサーバー上のCPUリソースをフルに活用し、パフォーマンスを上げることができます。

著者について

Kent Milliganは、PartnerWorld® for Developers, iSeriesのDB2 UDBテクノロジー・スペシャリスト。IBMでの最初の8年間、ロチェスター研究所のDB2開発チーム・メンバーとして経験を積む。iSeriesおよびAS/400eTMのリレーショナル・データベースに関する様々なトピックに関して講演や著作が多数ある。
メール・アドレス:kmill@us.ibm.com


原文はこちら

上に戻る