このトピックには、DATA Providers for DB2 を使用する場合のパフォーマンスを最大限に高めるのに役立つ以下のセクションが含まれています。
パフォーマンス最適化のための設定
パフォーマンスを向上させるには、次の方法でプロバイダーを構成します。
接続の起動時間を短縮するためのプール プロバイダー リソース
接続プールは、クライアント側の最適化であり、接続の起動時間を短縮しながら、クライアント コンピューターのメモリ使用率を減らします。 ADO.NET プロバイダー、OLE DB プロバイダー、エンティティ プロバイダー、BizTalk アダプターは、接続プールをサポートしています。 プールは、ADO.NET 接続文字列または OLE DB データ ソース初期化文字列 (Connection Pooling=True) を使用して指定できます。 また、データ ソース ウィザードの [詳細設定 ] ダイアログと [データ リンク ] のすべての ダイアログを使用して、プールを構成することもできます。
プロバイダーは、最大プール サイズ プロパティに基づいて、接続のキャッシュを保持します。 既定のプール サイズは 100 接続 (最大プール サイズ = 100) であり、データ ソース ウィザードまたはデータ リンクの [すべて ] ダイアログを使用して調整できます。 [最大プール サイズ] プロパティの上限はありません。 [最大プール サイズ] プロパティに 0 未満の値を構成した場合は、既定値の 100 が使用されます。
必要に応じて、秒数を指定して、クライアント側のプーリングを使用して接続の確立を待機するようにデータ プロバイダーに指示できます。 プール内のすべての接続が使用中で、タイムアウト期間が経過すると、データ プロバイダーはデータ コンシューマーにエラーを返します ("接続は使用できません")。 既定値は 15 秒 (接続タイムアウト = 15) で、データ ソース ウィザードまたはデータ リンクの [すべて ] ダイアログを使用して調整できます。 Connect Timeout プロパティの上限はありません。 クライアント側の接続プールで開いている接続を無期限に待機するようにデータ プロバイダーに指示する -1 を指定します。
データの取得時に行セット キャッシュを最適化する
ロウセットキャッシュサイズ プロパティは、データ プロバイダーに、データ コンシューマーに行を同時に処理して返すと共に、DB2 からの行を同時に事前取得するように指示します。 この機能により、マルチプロセッサまたはマルチコア コンピューターでの一括読み取り専用操作のパフォーマンスが向上する可能性があります。 このプロパティの既定値は 0 (RowsetCacheSize=0) です。これは、オプションのプリフェッチ機能が "off" であることを示します。 10 ~ 100 の値を設定することをお勧めします。初期推奨値は 10 です。この値は、データ ソース ウィザードまたはデータ リンクの [すべて ] ダイアログを使用して調整できます。 このプロパティは、データ プロバイダーに対して、データ プロバイダーの行セット キャッシュに格納されている、指定された数の行バッチを事前にフェッチするように指示します。 行バッチのサイズは、コンシューマーによって指定された OLE DB IRowset::GetNextRows インターフェイスの cRows の値に基づいて自動的に決定されます。
パラメーターを使用したコマンドの準備を実行するまで延期する
遅延準備は、パラメーター化された INSERT、UPDATE、DELETE、SELECT コマンドの処理を最適化するようにデータ プロバイダーに指示します。 このオプションは、ADO.NET 接続文字列または OLE DB データ ソース初期化文字列 (Defer Prepare=True) を使用して指定できます。 また、データ ソース ウィザードの [詳細設定 ] ダイアログと [データ リンク ] のすべての ダイアログを使用して、プールを構成することもできます。 INSERT、UPDATE、および DELETE コマンドの場合、データ プロバイダーは、準備、実行、コミットコマンドを 1 つのネットワーク フローに結合してリモート データベースに送信します。 SELECT コマンドの場合、データ プロバイダーは準備コマンドと実行コマンドを 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 デスティネーションを使用できます。 BizTalk Adapter for DB2 を使用すると、開発者は送信ポートアップデートグラムを使用できます。
実行時間の長いクエリを終了するためのコマンド タイムアウト
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 サーバー) 処理時間、コマンド実行、データ フェッチ、トランザクションのコミット/ロールバックに関する情報をキャプチャします。