次の方法で共有


並列処理のための SSIS パッケージのデザイン (SQL Server ビデオ)

適用対象 : Microsoft SQL Server Integration Services

作成者 : マット キャロル、Microsoft Corporation

再生時間 : 00:12:37

サイズ : 29.2 MB

種類 : WMV ファイル

このビデオを見る

関連ヘルプ トピック :

識別子列の作成と変更

パーティションの切り替えを使用した効率的なデータの転送

関連記事およびブログの投稿 :

SQL Server Integration Services に関するベスト プラクティス トップ 10

ETL ワールド レコード

その他のビデオ :

企業における SSIS パッケージのパフォーマンスの測定と理解 (SQL Server ビデオ)

企業での SSIS パッケージ データ フローのチューニング (SQL Server ビデオ)

SSIS データ フロー バッファについて (SQL Server ビデオ)

ビデオの概要

このビデオでは、並列処理のためのデザインを行って、Integration Services パッケージのパフォーマンスを向上させる方法を説明します。

謝辞

SSIS : パフォーマンス向上のためのデザインとチューニングに関する SQL Server ビデオ シリーズ」の資料提供においては、トマス カイザー氏にご協力いただきました。これは、当シリーズの 4 番目のビデオです。

カルラ サボータ氏とダグラス ラウデンシュラーガー氏からは、アドバイスと貴重なフィードバックを頂きました。ありがとうございました。

ビデオのテクニカル ノート

Dd795221.note(ja-jp,SQL.100).gifメモ :
このテクニカル ノートはビデオからの抜粋です。

並列デザインの原理として、問題の分割、競合の排除、効率的なスケジュール設定を挙げることができます。

並列デザインの考え方では、大きな問題を独立した小さな部分に分けて、作業を分散させます。Integration Services で "問題を小さな部分に分ける" とは、処理対象のデータをパーティション分割することを意味します。各パーティションは、同じサイズになるようにします。こうすることで、最適なスケジュール設定と分配をずっと容易に行うことができます。

次に、小さな作業部分の間で競合を排除する必要があります。この結果、互いに干渉されることなく各作業を並列で処理できます。また、ステートレスなデザインを使用します。つまり、作業の各単位が自己完結しており、そのジョブを行うために外部と連携する必要がないようにします。さらに、外部リソースに対する競合を減らします。

最後に、処理速度を高めるため、独立した作業として小さく分割された断片を分散させる必要があります。つまり、最も重要なリソースが効率的に使用されるように、作業のスケジュール設定と分配を行います。また、これにより、時間を上手に使って、長時間を要するタスクでランタイムが独占されないようにします。実行すべき作業のガント チャートを思い浮かべるとわかるように、一連の作業全体ができるだけ早く終わるようにするには、ワークロードのバランスを保つ必要があります。

問題のパーティション分割

ソース データをほぼサイズが等しい小さなまとまりに分割します。このパーティション分割は、時間的な範囲や地理的な範囲など、データを構成する自然な範囲に基づいて行うことができます。また、ID 列がある場合は、その列の値の剰余を計算することで、同じパーティションを特定できます。それ以外の場合は、ハッシュ関数をキー列に適用して各パーティションを生成できます。

ソース テーブルをパーティション分割したら、さらに変換先テーブルをパーティション分割してソース データのパーティションに一致するようにします。SQL SWITCH コマンドを使用すると、非常に効率的にパーティションをテーブルに追加したりテーブルから削除したりできます。

競合の排除

問題を分割したら、それらの各分割部分の間で競合が生じないようにする必要があります。複雑な相互作用や結果的な競合を回避するには、ステートレス デザインを使用することが重要です。パッケージのデザインがステートレスになるようにするには、パッケージに対して、その作業を行うために必要なすべての情報を渡します。

ロックの競合が発生しないようにしてください。同じテーブルに挿入を行う接続が多数あると、結果的に競合の原因になります。これを回避するには、パーティション テーブルと SQL SWITCH を使用します。

制御ハードウェアの競合に注意してください。ディスク I/O に問題がある場合は、ドライブの数を増やすか、より高速なドライブに変更します。ネットワーク I/O に問題がある場合は、ネットワーク コントローラを追加するかアップグレードします。CPU またはメモリの使用率に問題がある場合は、プロセッサまたはメモリを増設したコンピュータで実行するか、複数のコンピュータにまたがって実行します。また、Integration Services はメモリ内で実行するようにデザインされているため、各パッケージに対して十分なメモリが割り当てられるようにしてください。

効率的なスケジュール設定

小さなタスクに分割し、各タスク間の競合を排除したら、各タスクが効率的に実行されるようにスケジュールを設定します。効率的なスケジュールを作成するには、まず、実行する作業の優先度キューを定義します。これには、SQL テーブルが適しています。

次に、作業を実行するために作成した、複数コピーのパッケージを開始します。これを簡単かつ効率的に行うには、Windows の [スタート (Start)] メニューを使用して dtexec.exe を実行します。開始したパッケージの数により、使用される並列処理の次数が決まります。

各パッケージは、実行する作業がなくなるまで、優先度に基づいてタスク キューから受け取った作業を処理します。パッケージ内のループはまず優先度キューからタスクを取得し、次に、そのタスクによって定義されている作業を実行します。さらに、タスク キューが空になるまで同様の処理を繰り返します。

デモ

最初のデモでは、単一のパッケージ インスタンスによって各タスクが順番に処理されます。

2 番目のデモでは、2 つのプロセスによって並列処理が行われます。タスクは 2 つのバッチによって完了し、デモの合計実行時間は約 64 秒から 36 秒へと半分程度に短縮されます。

3 番目のデモでは、4 つのプロセスによって並列処理が行われます。個々のタスクの時間は 9 秒から約 14 秒に増加していますが、合計実行時間は約 36 秒から約 28 秒に短縮されています。

最後のデモでは、8 つのプロセスによって並列処理が行われます。すべてのタスクが同時に処理されるので、各タスクの時間は約 27 秒に増加し、合計実行時間は 4 つのプロセスの場合とほぼ同じになります。8 つのプロセスすべてがディスクからデータ ファイルを読み取ろうとして競合したため、ディスク I/O がボトルネックになってこの現象が生じていました。この問題を解決するには、ファイルを複数のディスクとコントローラに分散させるか、より高速なディスク テクノロジに移行します。

参照

その他の技術情報

SQLCAT チーム

ヘルプおよび情報

SQL Server 2008 の参考資料の入手