パフォーマンスを最大化する

このトピックに含まれるセクションは、Data Providers for DB2 の使用時にパフォーマンスを最大化する上で役立ちます。

パフォーマンスを高めるための構成

パフォーマンスを向上させるには、次の方法でプロバイダーを構成します。

プロバイダー リソースのプールによる接続開始時間の短縮

接続プールは、接続開始時間を短縮する一方で、クライアント コンピューターでのメモリの利用を減らす、クライアント側の最適化です。 ADO.NET プロバイダー、OLE DB プロバイダー、エンティティ プロバイダー、および BizTalk アダプターは接続プールをサポートしています。 ADO.NET 接続文字列または OLE DB データ ソース初期化文字列 (Connection Pooling=True) を使用してプールを指定できます。 また、データ ソース ウィザードの [詳細設定] ダイアログおよびデータ リンクの [すべて] ダイアログを使用してプールを構成できます。

プロバイダーは、Max Pool Size プロパティに基づいて接続のキャッシュを維持します。 既定のプール サイズは 100 接続 (Max Pool Size=100) ですが、データ ソース ウィザードまたはデータ リンクの [すべて] ダイアログを使用して調整できます。 "最大プール サイズ" プロパティに上限はありません。 "最大プール サイズ" プロパティに 0 未満の値を構成すると、既定値の 100 が使用されます。

オプションとして、クライアント側プールを使用して接続を確立するまで待機するようデータ プロバイダーに指示する秒数を指定できます。 プールのすべての接続が使用中でタイムアウトまでの時間が経過すると、データ プロバイダーはデータ コンシューマーに対してエラー ("接続が利用できません") を返します。 既定値は 15 秒 (Connect Timeout=15) ですが、データ ソース ウィザードまたはデータ リンクの [すべて] ダイアログを使用して調整できます。 [接続のタイムアウト] プロパティに上限はありません。 クライアント側接続プールで開いている接続を無期限に待機するようデータ プロバイダーに指示するには、-1 を指定します。

データの取得時に行セット キャッシュを最適化する

RowSetCacheSize プロパティを使用すると、データ プロバイダーは DB2 から行をプリフェッチすると同時に、行を処理してデータ コンシューマーに返します。 この機能によって、マルチプロセッサ コンピューターおよびマルチコア コンピューターにおける一括読み取り専用処理のパフォーマンスが向上する場合があります。 このプロパティの既定値は 0 です (RowsetCacheSize=0)。この場合、プリフェッチ機能がオフになります。 推奨の設定値は 10 から 100 ですが、最初は 10 に設定することすることをお勧めします。この値は、データ ソース ウィザードまたはデータ リンクの [すべて] ダイアログを使用して調整できます。 このプロパティより、データ プロバイダーは指定された行バッチ数までプリフェッチし、データ プロバイダーの行セット キャッシュに保存します。 行バッチのサイズは、コンシューマーによって指定された OLE DB の IRowset::GetNextRows インターフェイス上の cRows の値に基づいて自動的に決定されます。

実行まで準備コマンドとパラメーターの送信を遅延する

準備コマンドの遅延送信を使用すると、データ プロバイダーはパラメーター化された INSERT、UPDATE、DELETE、SELECT コマンドの処理を最適化します。 このオプションは ADO.NET 接続文字列または OLE DB データ ソース初期化文字列 (Defer Prepare=True) を使用して指定できます。 また、データ ソース ウィザードの [詳細設定] ダイアログおよびデータ リンクの [すべて] ダイアログを使用してプールを構成できます。 INSERT、UPDATE、および DELETE コマンドについては、データ プロバイダーは prepare、execute、および commit コマンドをリモート データベースへの 1 つのネットワーク フローに結合します。 SELECT コマンドについては、PREPARE および EXECUTE コマンドを 1 つのネットワーク フローに結合します。 これによってネットワーク トラフィックが最小限に抑えられると共に、多くの場合、全体的なパフォーマンスが向上します。

複数の行を 1 つの作業単位で送信

Data Providers for DB2 では、最適化されたバッチでコンシューマーによる複数の INSERT ステートメントの実行が可能になる、一括の挿入操作がサポートされています。これにより、TCP/IP ネットワーク パケットがより適切に使用されることになり、全体的なパフォーマンスが向上します。 ADO.NET プロバイダーを使用するとき、開発者は MsDb2Client.BulkCopy インターフェイスを使用できます。 OLE DB プロバイダーを使用するとき、開発者は、OLE DB IRowsetFastLoad インターフェイスを SQL Server 2012 Integration Services OLE DB Destinations と共に使用できます。 BizTalk Adapter for DB2 を使用するとき、開発者は Send Port Updategram を使用できます。

実行時間の長いクエリを中断するコマンド タイムアウト

ADO.NET Data Provider for DB2 と OLE DB Provider for DB2 からは、コマンド タイムアウト プロパティが提供され、パフォーマンスに悪影響を与える可能性がある長時間実行クエリを開発者は自動的に終了させることができます。

ADO.NET Command.CommandTimeout プロパティの既定値は 30 秒です。コマンドが実行されるまで 30 秒待つようにプロバイダーに指示します。 OLE DB 行セット DBPROP_COMMANDTIMEOUT の既定値は 0 で、タイムアウトはありません。 SQL Server 2008 R2 のコンシューマーなど、さまざまなコンシューマーからのコマンド タイムアウト値を指定できます。

パフォーマンスの計測

パフォーマンスを計測できるように、データ プロバイダーにはパフォーマンス カウンターが用意されています。 既定では、パフォーマンス カウンターは無効になっています。 次のレジストリ キーの値を 1 に変更することで、有効にすることができます。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Host Integration Server\Data Integration\UpdateCounters = 1

データ プロバイダーのパフォーマンス カウンターでは、開いている接続数、開いているステートメント数、送受信されるパケット数とバイト数、ホスト (DB2 サーバー) の平均処理時間、コマンド実行数、データ フェッチ数、トランザクションのコミット数とロールバック数に関する情報がキャプチャされます。

参照

パフォーマンスの問題
データ統合 (操作)