キャッシュ・ヒットについて

キャッシュが有効化されている場合、各問合せが評価されてキャッシュ・ヒットとみなされるかどうかが判断されます。

キャッシュ・ヒットとは、Oracle Analytics Cloudがキャッシュを使用して問合せに返答できるため、データベースでの処理がまったく発生しないことを意味します。Oracle Analytics Cloudは、問合せキャッシュを使用して、同じレベル以上の集計レベルの問合せに返答します。

多くの要因でキャッシュがヒットするかどうかが判断されます。次の表で、これらの要因について説明します。

要因またはルール 説明

SELECTリストの列のサブセットが一致する必要があります

キャッシュ・ヒットとしてみなすには、新しい問合せのSELECTリストにあるすべての列が、キャッシュされた問合せに存在するか、または問合せの列から計算できる必要があります。

このルールは、キャッシュがヒットするための最小要件を示しますが、このルールを満たすことが、キャッシュヒットを保証するものではありません。この表にリストされているその他のルールも適用されます。

SELECTリストの列は、キャッシュされた問合せの列に対する式で構成できます

Oracle Analytics Cloudでは、キャッシュされた結果に対する式を計算して新しい問合せに返答できますが、キャッシュされた結果にすべての列が含まれている必要があります。たとえば、次の問合せでは:

SELECT product, month, averageprice FROM sales WHERE year = 2000

次の問合せでキャッシュがヒットします:

SELECT product, month, dollars, unitsales FROM sales WHERE year = 2000

averagepriceは、dollarsおよびunitsalesから計算できるからです(averageprice = dollars/unitsales)。

WHERE句は、セマンティックが同じであるか、論理サブセットである必要があります

問合せがキャッシュ・ヒットとみなされるには、WHERE句の制約が、キャッシュされた結果と同等であるか、キャッシュされた結果のサブセットである必要があります。

サブセットが次のいずれかの基準を満たす場合、キャッシュされた問合せの論理サブセットであるWHERE句はキャッシュ・ヒットとみなされます:

  • INリストの値のサブセット。キャッシュされた問合せのINリストの要素より少ない要素を要求する問合せは、キャッシュ・ヒットとみなされます。たとえば、次の問合せをします。

    SELECT employeename, region
    FROM employee, geography
    WHERE region in ('EAST', 'WEST')

    次のキャッシュされた問合せに対するヒットとみなされます:

    SELECT employeename, region
    FROM employee, geography
    WHERE region in ('NORTH', 'SOUTH', 'EAST', 'WEST')
  • キャッシュされた結果より少ない(ただし、同一の)OR制約が含まれます。

  • リテラル比較の論理サブセットが含まれます。たとえば、次の述部では:

    WHERE revenue < 1000

    次の述部を使用する同様の問合せに対するキャッシュ・ヒットとみなされます:

    WHERE revenue < 5000
  • WHERE句がありません。WHERE句のない問合せがキャッシュされている場合、他のすべてのキャッシュ・ヒット・ルールを満たす問合せは、そのWHERE句に関係なく、キャッシュ・ヒットとみなされます。

また、WHERE句に使用される列は、射影リストに含まれている必要があります。たとえば、次の問合せをします。

SELECT employeename
FROM employee, geography
WHERE region in ('EAST', 'WEST')

REGIONが射影リストにないため、前述のリストのシード問合せのキャッシュ・ヒットになりません。

ディメンションのみの問合せは完全一致である必要があります

ディメンションのみの問合せの場合、つまり、ファクトまたはメジャーが問合せに含まれていない場合、キャッシュされた問合せの射影列の完全一致のみがキャッシュにヒットします。この動作により、1つのディメンション表に対して複数の論理ソースが存在する場合の偽陽性が回避されます。

特別な関数を含む問合せは完全一致である必要があります

時系列関数(AGOTODATEおよびPERIODROLLING)、制限およびオフセット関数(OFFSETおよびFETCH)、関係関数(ISANCESTORISLEAFISROOTおよびISSIBLING)、外部集計関数などの特別な関数を含み、通常メトリックをフィルタする他の問合せも、キャッシュされた問合せの射影列の完全一致である必要があります。このような場合、フィルタも完全一致である必要があります。フィルタ・メトリックについては、フィルタ・メトリックをWHERE句として書き換えることができる場合は、サブセット・キャッシュが利用される可能性があります。

論理表のセットが一致する必要があります

キャッシュ・ヒットとみなされるには、新しい問合せにはすべて、キャッシュ・エントリと同じセットの論理表が存在する必要があります。このルールによって、誤ったキャッシュ・ヒットが回避されます。たとえば、SELECT * FROM productは、SELECT * FROM product, salesに一致しません。

セキュリティ・セッション変数を含む、セッション変数値が一致する必要があります

論理SQLまたは物理SQL文がセッション変数を参照する場合、セッション変数値が一致する必要があります。そうでない場合、キャッシュはヒットしません。

また、セキュリティ・センシティブなセッション変数の値は、論理SQL文自体がセッション変数を参照していなくても、セマンティック・モデルに定義されているセキュリティ・セッション変数値と一致する必要があります。行レベルのデータベース・セキュリティを使用する場合の正しいキャッシュ結果の保証を参照してください。

同等の結合条件

キャッシュ・ヒットとみなされるには、結果として得られる新しい問合せリクエストの結合論理表が、キャッシュされた結果と同じ(またはそのサブセット)である必要があります。

DISTINCT属性が同じである必要があります

キャッシュされた問合せがDISTINCT処理(たとえば、SELECT DISTINCT...)で重複レコードを除去している場合、キャッシュされた列に対するリクエストにもDISTINCT処理が含まれている必要があります。同じ列に対するDISTINCT処理を含まないリクエストは、キャッシュ・ミスになります。

問合せに、互換性のある集計レベルが含まれている必要があります

集計レベルの情報を要求する問合せでは、より低い集計レベルのキャッシュされた結果を使用できます。たとえば、次の問合せは、サプライヤ、地域、および都市レベルで販売された数量を要求します:

SELECT supplier, region, city, qtysold
FROM suppliercity

次の問合せは、都市レベルで販売された数量を要求します:

SELECT city, qtysold
FROM suppliercity

2つ目の問合せは、1つ目の問合せのキャッシュ・ヒットとなります。

限られた追加集計

たとえば、列qtysoldを含む問合せがキャッシュされている場合、RANK(qtysold)のリクエストはキャッシュ・ミスになります。また、国レベルのqtysoldを要求する問合せは、国、地域レベルのqtysoldを要求する問合せからキャッシュ・ヒットを得られます。

ORDER BY句は、選択リストの列で構成されている必要があります

選択リストに含まれていない列で並べ替える問合せは、キャッシュ・ミスになります。

キャッシュ・ヒット動作の診断

キャッシュ・ヒットの動作をより適切に評価するには、次の例に示すようにENABLE_CACHE_DIAGNOSTICSセッション変数を4に設定します:

ENABLE_CACHE_DIAGNOSTICS=4