CData Virtuality Server は、特定のユーザークエリと仮想プロシージャ呼び出しの結果 をキャッシュする機能を提供します。このキャッシュ技法は、システムのユーザーが同じクエリを送信したり、同じプロシージャを頻繁に実行する場合に、大幅なパフォーマンス向上をもたらします。

Support Summary

  • ユーザークエリ結果のキャッシング;

  • 仮想プロシージャ結果のキャッシング;

  • 結果のスコープは、VDB / ユーザー(レプリケートされた)またはセッションレベルに自動的に決定されます。デフォルトのロジックは、評価されるすべての関数の影響を受け、すべてのソースモデル/テーブル/プロシージャのDETERMINISMプロパティ、およびExecutionContext またはCacheDirective のScope を考慮します;

  • 設定可能なキャッシュエントリ数と有効時間;

  • 行政のクリアリング。

User Interaction

User Query Cache

クエリにcache hintを追加できます。キャッシュ・ヒントの最も基本的な形式である/*+ cache */は、非更新コマンドの結果がキャッシュされるべきであることをエンジンに通知するのに十分です。PreparedStatementの結果セットがキャッシュされる例を示します:

...
PreparedStatement ps = connection.prepareStatement("/*+ cache */ select col from t where col2 = ?");
ps.setInt(1, 5);
ps.execute();
...

結果はデフォルトのTTLでキャッシュされ、SQL文字列とパラメータ値をキャッシュキーの一部として使用します。

キャッシュ・ヒントのpref_memおよびttlオプションは、結果セット・キャッシュ・クエリにも使用できます。Cache Hint が指定されない場合は、結果セット Caching 設定のデフォルトの time to live が使用されます。以下は、高度な結果Cachingの設定です:

/*+ cache(pref_mem ttl:60000) */ select col from t

この例では、メモリ環境設定が有効になっており、生存時間は60,000ミリ秒または1分に設定されています。エントリのTTLは、実際にはそのエントリの最大年齢として扱われ、キャッシュエントリの最大数に達した場合、エントリはより早く消去される可能性があります。

各クエリは、結果がCachingされているかどうかに関わらず、現在のUserのPermissionを使用してAuthorizationが再チェックされます。

Procedure Result Cache

キャッシュされたView と同様に、キャッシュされた仮想プロシージャの結果は、同じプロシージャの実行で一致するパラメータ値のセットが検出されると自動的に使用されます。OPTION NOCACHE句と共に使用される場合、キャッシュされた結果の使用はバイパスされるかもしれません(詳細はsubpageを参照してください)。

Cached Virtual Procedure Definition

仮想プロシージャがキャッシュされることを示すには、その定義にキャッシュ・ヒントを含める必要があります。詳しくはdedicated subpageをご覧ください:

/*+ cache */
 
BEGIN
 
    ...
 
END

結果はデフォルトのttlでキャッシュされます。

Cache Hint のpref_memttlオプションもプロシージャキャッシングに使用できます。

Procedure Results Cache のキーには、入力パラメータ値が含まれます。1つのプロシージャがキャッシュをいっぱいにするのを防ぐため、VDBごとに1つのプロシージャにつき最大256個のキャッシュ・キーを作成できます。

キャッシュされたプロシージャは、その結果が消費されキャッシュに置かれる前に、常にすべての結果を生成します。これは通常のプロシージャ実行とは異なり、状況によっては返された結果をストリーミング方式で消費することができます。

Cache Administration

結果セットキャッシュは、SYSADMIN.clearResultSetCache()プロシージャを使用してクリアできます。

結果セットキャッシュのクリア

CALL SYSADMIN.clearResultSetCache();

Cache Configuration

デフォルトでは、結果セットのキャッシュは、最大エントリ数1,024、最大エントリ年齢2時間で有効になっています。実際には、これらの設定で2つのキャッシュが構成されています。1つのキャッシュはセッション固有の結果を保持し、各CData Virtuality Server インスタンスにローカルです。もう1つのキャッシュはVDBスコープの結果を保持し、Replicationが可能です。cache hintを使用して、デフォルトの最大エントリ年齢をオーバーライドすることもできます。

Results Set Cachingはメモリに限定されません。キャッシュできる結果のサイズに明確な制限はありません。キャッシュされた結果は主にBufferManagerに保存され、最大バッファ容量の制限など、その Configuration に従います。

結果データはメモリに保持されませんが、パラメータ値を含むキャッシュキーはメモリに保持される場合があります。したがって、キャッシュの最大サイズを制限するのは良い考えです。

Limitations

  • ユーザーadminのキャッシュは永久に無効になります;

  • XMLBLOBの型は、プロシージャー・キャッシュ・キーの準備された文のキャッシュ・キーの一部として使用することはできません;CLOBOBJECT

  • 結果が再利用されるためには、キャッシュ・ヒントを含む正確な SQL 文字列がキャッシュ・エントリと一致しなければなりません。これにより、キャッシュを使用して解析と解決を省略し、より高速なレスポンスを実現します;

  • 結果 Caching をクリアすると、すべての VDB のすべてのキャッシュ・エントリがクリアされます。