キャッシュロードクエリの推奨パラメータ¶
クエリを実行する際に、その目的がビューのキャッシュのロードだけである場合、クエリの CONTEXT
句に以下のパラメータを追加します。
'cache_return_query_results' = 'false', 'cache_wait_for_load' = 'true'
これは、Partial キャッシュと Full キャッシュを使用するビューに適用されます。
例:
SELECT *
FROM internet_inc
CONTEXT(
'cache_preload' = 'true'
, 'cache_invalidate' = 'all_rows'
, 'cache_return_query_results' = 'false'
, 'cache_wait_for_load' = 'true')
'cache_return_query_results' = 'false'
を指定すると、キャッシュロードプロセスが高速化されます。'cache_wait_for_load' = 'true'
を指定すると、キャッシュロードプロセスの実行中にエラーが発生した場合にそれを検出できます。
データのキャッシュが高速化されるため、これらのパラメータは、大量のデータセットをキャッシュする場合は特に重要です。
以下のセクションで、これらのオプションの詳細について説明します。
キャッシュロードクエリの結果の取得の回避¶
パラメータ 'cache_return_query_results' = 'false'
を指定すると、サーバーは、クエリの結果をクライアントに返しません。その結果、キャッシュデータベースへのデータ挿入プロセスが高速化されます。なぜなら、クエリの結果をクライアントに返す必要がある場合、サーバーはキャッシュへの挿入待ちのデータをディスクにスワップしますが、結果をクライアントに返さない場合はそのスワップを行わないからです。データをスワップする代わりに、サーバーは、キャッシュに挿入する速度に合わせて、ソースからデータを取得する速度を調整します。
スワップを回避することの主な利点は、キャッシュへの挿入が高速化され、CPU とディスクの使用率が大幅に低下することです。これは、大量のデータセットを処理する場合に特に重要です。
キャッシュが正しくロードされたことの確認¶
デフォルトでは、クエリは、クライアントに結果を返した後に完了します。または、 CONTEXT
句でパラメータ 'cache_return_query_results' = 'false'
を指定している場合はほとんどすぐに完了します。
サーバーがクエリの結果をキャッシュデータベースに保存する必要がある場合、クエリはおそらくすべてのデータをキャッシュする前に完了します。クエリが完了した後、キャッシュデータベースにデータを挿入する間にエラーが発生した場合、サーバーはクライアントにそのエラーを通知できません。 'cache_wait_for_load' = 'true'
を指定した場合、すべての結果がキャッシュデータベースに保存されるまで、クエリは完了しません。
Administration Tool からクエリを実行した場合、クエリが完了してから実行トレースを開き、クエリの実行対象のビューのノード ([Execution] ノードの下) をクリックして [Advanced] カテゴリ (ダイアログの右側) を展開し、[Cache process] セクションまで下にスクロールします。[Query pattern state] 属性に、キャッシュが正しくロードされたかどうかが示されています。
クエリの結果を保存している間にエラーが発生した場合、すでに挿入されている行はそのまま残ります。ただし、有効とはマークされません。24 時間経過後にキャッシュメンテナンスタスクを実行すると、それらの無効な行は削除されます。
次の図には、[Cache process] に関する実行トレースで確認できる情報が表示されています。