Data Provider for .NET Guide (v11)

ステートメント キャッシングの使用

ステートメント キャッシュは、プリペアド ステートメントのグループまたは Command オブジェクトのインスタンスで、アプリケーションによって再使用が可能です。ステートメント キャッシュを使用するとアプリケーションのパフォーマンスを向上させることができます。これは、プリペアド ステートメントの動作が、そのステートメントがアプリケーションの存続期間中に何度再使用されたとしても、1 度だけ実行されるためです。キャッシュ内のステートメントの有効性を分析することができます(接続統計情報によるパフォーマンスの分析を参照してください)。

ステートメント キャッシュは物理接続に属します。実行された後、プリペアド ステートメントはステートメント キャッシュに置かれ、接続が閉じられるまで保持されます。

ステートメント キャッシングは複数のデータ ソース間で使用できるほか、Data Access Application Block を含む Microsoft Enterprise Library などの抽象化技術の下で使用できます。

ステートメント キャッシングの有効化

デフォルトで、ステートメント キャッシングは無効になっています。Pervasive PSQL 3.1 データ プロバイダーを使用する既存のアプリケーションで、アプリケーション コードをまったく変更せず、ステートメント キャッシングを有効にするには、Statement Cache Mode 接続文字列オプションに Auto を設定します。この場合は、すべてのステートメントをステートメント キャッシュに置くことができます。

キャッシュすると明示的にマークしたステートメントのみをステートメント キャッシュに置くように、ステートメント キャッシングを設定することもできます。これを行うには、そのステートメントの Command オブジェクトの StatementCacheBehavior プロパティに Cache を設定し、Statement Cache Mode 接続文字列オプションに ExplicitOnly を設定します。

3 はステートメント キャッシング設定とその影響を要約したものです。

表 3 ステートメント キャッシュ動作の要約
動作
StatementCacheBehavior
Statement Cache Mode
ステートメントを明示的にステートメント キャッシュに追加します。
Cache
ExplicitOnly(デフォルト)
ステートメントをステートメント キャッシュに追加します。必要に応じ、ステートメントは、Cache とマークされたステートメント用の場所を空けるために削除されます。
Implicit(デフォルト)
Auto
ステートメントをステートメント キャッシュから明確に除外します。
DoNotCache
Auto または ExplicitOnly

ステートメント キャッシング手法の選択

ステートメント キャッシングを使用すると、アプリケーションの存続期間中にプリペアド ステートメントを複数回再使用するアプリケーションはパフォーマンスが向上します。ステートメント キャッシュのサイズは Max Statement Cache Size 接続文字列オプションに設定します。ステートメント キャッシュのスペースが限られている場合は、1 度しか使用されないプリペアド ステートメントをキャッシュしないでください。

アプリケーションが使用する全プリペアド ステートメントをキャッシュすれば、最高のパフォーマンスを提供できるように思われます。しかし、この手法では、接続プールを使ってステートメント キャッシングを実装した場合、データベースのメモリに負担をかける結果になります。この場合、プールされた接続はそれぞれステートメント キャッシュを持ち、アプリケーションが使用する全プリペアド ステートメントを含むことになります。これらのプールされたプリペアド ステートメントは、すべてデータベースのメモリにも保持されます。


接続プールの使用

接続フェイルオーバーの使用