À propos des présences dans la mémoire cache

Lorsque la mise en mémoire cache est activée, chaque interrogation est évaluée pour déterminer si elle remplit les conditions d'une présence dans la mémoire cache.

Une présence dans la mémoire cache signifie qu'Oracle Analytics Cloud a pu utiliser la mémoire cache pour répondre à l'interrogation sans avoir eu besoin d'aller dans la base de données. Oracle Analytics Cloud peut utiliser la mémoire cache d'interrogation pour répondre à des interrogations au même niveau d'agrégation ou à un niveau supérieur.

De nombreux facteurs déterminent les présences dans la mémoire cache. Ces facteurs sont décrits dans le tableau ci-dessous.

Facteur ou règle Description

Un sous-ensemble de colonnes de la liste SELECT doit correspondre

Toutes les colonnes de la liste SELECT d'une nouvelle interrogation doivent exister dans l'interrogation mise en mémoire cache afin de remplir les conditions d'une présence dans la mémoire cache ou elles doivent pouvoir être calculées à partir des colonnes de l'interrogation.

Cette règle décrit les conditions minimales d'une présence dans la mémoire cache, mais satisfaire à cette règle ne garantit pas une présence. Les autres règles listées dans ce tableau doivent également s'appliquer.

Les colonnes de la liste SELECT peuvent comprendre des expressions pour les colonnes des interrogations mises en mémoire cache

Oracle Analytics Cloud peut calculer des expressions pour les résultats mis en mémoire cache afin de répondre à la nouvelle interrogation, mais toutes les colonnes doivent se trouver dans le résultat mis en mémoire cache. Par exemple, l'interrogation :

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

entraîne des présences dans la mémoire cache pour l'interrogation :

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

, car averageprice peut être calculé à partir de dollars et unitsales (averageprice = dollars/unitsales).

La clause WHERE doit être sémantiquement identique ou être un sous-ensemble logique

Pour que l'interrogation remplisse les conditions d'une présence dans la mémoire cache, les contraintes de la clause WHERE doivent être équivalentes aux résultats mis en mémoire cache ou en être un sous-ensemble.

Une clause WHERE qui est un sous-ensemble logique d'une interrogation mise en mémoire cache remplit les conditions d'une présence dans la mémoire cache si le sous-ensemble satisfait à l'un des critères suivants :

  • Un sous-ensemble des valeurs de la liste IN. Les interrogations demandant moins d'éléments d'une interrogation mise en mémoire cache de la liste IN remplissent les conditions d'une présence dans la mémoire cache. Par exemple, l'interrogation suivante :

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

    remplit les conditions d'une présence pour l'interrogation mise en mémoire cache ci-dessous :

    SELECT employeename, region
    FROM employee, geography
    WHERE region in ('NORTH', 'SOUTH', 'EAST', 'WEST')
  • Elle contient moins de contraintes OR (mais identiques) que le résultat mis en mémoire cache.

  • Elle contient un sous-ensemble logique d'une comparaison littérale. Par exemple, le prédicat suivant :

    WHERE revenue < 1000

    remplit les conditions d'une présence dans la mémoire cache pour une interrogation comparable avec le prédicat :

    WHERE revenue < 5000
  • Il n'y a pas de clause WHERE. Si une interrogation sans clause WHERE est mise en mémoire cache, les interrogations qui satisfont à toutes les autres règles de présence dans la mémoire cache remplissent les conditions d'une présence dans la mémoire cache indépendamment de leur clause WHERE.

En outre, les colonnes qui sont utilisées pour la clause WHERE doivent se trouver dans la liste de projection. Par exemple, l'interrogation suivante :

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

n'entraîne pas une présence dans la mémoire cache pour l'interrogation de prédéfinition de la liste précédente, car REGION ne figure pas dans la liste de projection.

Les interrogations de dimension seulement doivent constituer une correspondance exacte.

S'il s'agit d'une interrogation de dimension seulement, c'est-à-dire qu'aucun fait ou mesure n'est inclus dans l'interrogation, seule une correspondance exacte des colonnes de projection de l'interrogations mise en mémoire cache représente des présences dans la mémoire cache. Ce comportement empêche les faux positifs lorsqu'il existe plusieurs sources logiques pour une table de dimension.

Les interrogations avec des fonctions spéciales doivent constituer une correspondance exacte.

Les autres interrogations qui contiennent des fonctions spéciales comme les fonctions de série chronologique (AGO, TODATE et PERIODROLLING), les fonctions de limite et de décalage (OFFSET et FETCH), les fonctions de relation (ISANCESTOR, ISLEAF, ISROOT et ISSIBLING), les fonctions d'agrégation externe et, en général, les mesures de filtre doivent également constituer une correspondance exacte avec les colonnes de projection de l'interrogation mise en mémoire cache. Dans ces cas-là, le filtre doit également constituer une correspondance exacte. Pour les mesures de filtre, si la mesure peut être réécrite sous forme de clause WHERE, vous pouvez tirer parti de la mémoire cache du sous-ensemble.

Le jeu de tables logiques doit correspondre

Pour remplir les conditions d'une présence dans la mémoire cache, toutes les interrogations entrantes doivent avoir le même jeu de tables logiques que l'entrée de la mémoire cache. Cette règle empêche les fausses présences dans la mémoire cache. Par exemple, SELECT * FROM product ne correspond pas à SELECT * FROM product, sales.

Les valeurs des variable de session doivent correspondre, notamment les variables de session de sécurité

Si l'énoncé SQL logique ou physique réfère à des variables de session, les valeurs de ces variables doivent correspondre. Sinon, il ne s'agit pas d'une présence dans la mémoire cache.

De plus, les valeurs des variables de session qui sont sensibles à la sécurité doivent correspondre aux valeurs des variables de session de sécurité définies dans le modèle sémantique, même si l'énoncé SQL logique lui-même ne référence pas les variables de session. Voir Garantir des résultats de la mémoire cache corrects lors de l'utilisation d'une sécurité de base de données au niveau de la rangée.

Conditions de liaison équivalentes

La table logique jointe obtenue d'une nouvelle demande d'interrogation doit être identique aux résultats mis en mémoire cache (ou un sous-ensemble) pour remplir les conditions d'une présence dans la mémoire cache.

L'attribut DISTINCT doit être le même

Si une interrogation mise en mémoire cache élimine les enregistrements en double avec le traitement DISTINCT (par exemple, SELECT DISTINCT...), les demandes pour les colonnes mises en mémoire cache doivent également inclure le traitement DISTINCT; une demande pour la même colonne sans le traitement DISTINCT représente une absence dans la mémoire cache.

Les interrogations doivent contenir des niveaux d'agrégation compatibles

Les interrogations qui demandent un niveau agrégé d'informations peuvent utiliser des résultats mis en mémoire cache à un niveau inférieur d'agrégation. Par exemple, l'interrogation suivante demande la quantité vendue au niveau du fournisseur, de la région et de la ville :

SELECT supplier, region, city, qtysold
FROM suppliercity

L'interrogation suivante demande la quantité vendue au niveau de la ville :

SELECT city, qtysold
FROM suppliercity

La deuxième interrogation entraîne une présence dans la mémoire cache pour la première interrogation.

Agrégation supplémentaire limitée

Par exemple, si une interrogation avec la colonne qtysold est mise en mémoire cache, une demande pour RANK(qtysold) entraîne une absence dans la mémoire cache. En outre, une interrogation qui demande qtysold au niveau du pays peut obtenir une présence dans la mémoire cache à partir d'une interrogation qui demande qtysold au niveau du pays et de la région.

La clause ORDER BY doit comprendre des colonnes de la liste sélectionnée

Les interrogations pour trier par des colonnes qui ne sont pas contenues dans la liste de sélection entraînent des absences dans la mémoire cache.

Diagnostic du comportement des présences dans la mémoire cache

Pour mieux évaluer le comportement des présences dans la mémoire cache, réglez la variable de session ENABLE_CACHE_DIAGNOSTICS à 4, comme illustré dans l'exemple suivant :

ENABLE_CACHE_DIAGNOSTICS=4