Sobre Ocorrências no Cache

Quando o armazenamento no cache está ativado, cada consulta é avaliada para determinar se ela se qualifica para uma ocorrência no cache.

Uma ocorrência no cache significa que o Oracle Analytics Cloud conseguiu usar o cache para responder à consulta e não acessou o banco de dados. O Oracle Analytics Cloud pode usar o cache de consulta para responder às consultas no mesmo nível de agregação ou mais alto.

Muitos fatores determinam se houve ocorrência no cache. A tabela a seguir descreve esses fatores.

Fator ou Regra Descrição

Um subconjunto de colunas na lista SELECT deve corresponder.

Todas as colunas na lista SELECT de uma nova consulta devem existir na consulta armazenada no cache para qualificação a uma ocorrência no cache ou devem poder ser calculadas com base nas colunas da consulta.

Essa regra descreve o requisito mínimo para ocorrência no cache, mas o cumprimento dessa regra não garante uma ocorrência. As outras regras listadas nessa tabela também se aplicam.

As colunas na lista SELECT podem ser compostas por expressões nas colunas das consultas armazenadas no cache.

O Oracle Analytics Cloud pode calcular expressões nos resultados armazenados no cache para responder à nova consulta, mas todas as colunas devem estar no resultado armazenado no cache. Por exemplo, a consulta:

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

atinge o cache na consulta:

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

porque averageprice pode ser calculado em dollars e unitsales (averageprice = dollars/unitsales).

A cláusula WHERE deve ser semanticamente a mesma ou um subconjunto lógico

Para que a consulta se qualifique como ocorrência no cache, as restrições da cláusula WHERE devem ser equivalentes aos resultados armazenados no cache ou um subconjunto desses resultados.

Uma cláusula WHERE que é um subconjunto lógico de uma consulta armazenada no cache se qualificará para uma ocorrência no cache se o subconjunto atender a um dos seguintes critérios:

  • Um subconjunto de valores de lista IN. As consultas que solicitam menos elementos de uma consulta de lista IN armazenada no cache se qualificam para uma ocorrência no cache. Por exemplo, a seguinte consulta:

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

    se qualifica como ocorrência na seguinte consulta armazenada no cache:

    SELECT employeename, region
    FROM employee, geography
    WHERE region in ('NORTH', 'SOUTH', 'EAST', 'WEST')
  • Ela contém menos (mas idênticas) restrições OR do que o resultado armazenado no cache.

  • Ela contém um subconjunto lógico de uma comparação literal. Por exemplo, o seguinte predicado:

    WHERE revenue < 1000

    se qualifica como ocorrência no cache em uma consulta comparável com o predicado:

    WHERE revenue < 5000
  • Não há cláusula WHERE. Se uma consulta sem cláusula WHERE for armazenada no cache, as consultas que satisfizerem todas as outras regras de ocorrência no cache se qualificarão como ocorrências no cache, independentemente de suas cláusulas WHERE.

Além disso, as colunas usadas na cláusula WHERE devem estar na lista de projeção. Por exemplo, a seguinte consulta:

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

Não resulta em uma ocorrência no cache para a consulta de pré-implantação na lista anterior porque REGION não está na lista de projeção.

As consultas somente dimensão devem ser uma correspondência exata

Se uma consulta for somente dimensão, significando que nenhum fato ou medida está incluído nela, somente uma correspondência exata das colunas de projeção da consulta armazenada no cache atingirão o cache. Esse comportamento evita falsos positivos quando há várias origens lógicas para uma tabela de dimensão.

As consultas com funções especiais devem ser uma correspondência exata

Outras consultas contendo funções especiais, como série de tempo (AGO, TODATE e PERIODROLLING), funções de limite e deslocamento (OFFSET e FETCH), funções de relacionamento (ISANCESTOR, ISLEAF, ISROOT e ISSIBLING), funções de agregação externa e geralmente métricas de filtro também devem ser uma correspondência exata com as colunas de projeção na consulta armazenada no cache. Nesses casos, o filtro também deve ser uma correspondência exata. Para métricas de filtro, se for possível regravar a métrica como cláusula WHERE, o cache de subconjunto poderá ser utilizado.

O conjunto de tabelas lógicas deve corresponder

Para que se qualifiquem como ocorrência no cache, todas as consultas de entrada devem ter o mesmo conjunto de tabelas lógicas que a entrada no cache. Essa regra evita falsas ocorrências no cache. Por exemplo, SELECT * FROM product não corresponde a SELECT * FROM product, sales.

Os valores de variável de sessão devem corresponder, inclusive variáveis de sessão de segurança

Se a instrução SQL lógica ou física se referir a qualquer variável de sessão, os valores das variáveis deverão corresponder. Caso contrário, o cache não será atingido.

Além disso, o valor das variáveis de sessão sensíveis à segurança devem corresponder aos valores de variável de sessão de segurança definidos no modelo semântico, mesmo que a própria instrução SQL lógica não mencione variáveis de sessão. Consulte Assegurar Resultados Corretos do Cache ao Usar a Segurança do Banco de Dados no Nível de Linha.

Condições de junção equivalentes

A tabela lógica resultante unida de uma nova solicitação de consulta deve ser a mesma (ou um subconjunto) dos resultados armazenados no cache para se qualificar a uma ocorrência no cache.

O atributo DISTINCT deve ser o mesmo

Se uma consulta armazenada no cache eliminar registros duplicados com processamento DISTINCT (por exemplo, SELECT DISTINCT...), as solicitações para as colunas armazenadas no cache também deverão incluir o processamento DISTINCT; uma solicitação para a mesma coluna sem o processamento DISTINCT é uma ausência no cache.

As consultas devem conter níveis de agregação compatíveis

As consultas que solicitam um nível agregado de informações podem usar resultados armazenados no cache em um nível mais baixo de agregação. Por exemplo, a seguinte consulta solicita a quantidade vendida no nível de fornecedor, região e cidade:

SELECT supplier, region, city, qtysold
FROM suppliercity

A seguinte consulta solicita a quantidade vendida no nível de cidade:

SELECT city, qtysold
FROM suppliercity

A segunda consulta resulta em uma ocorrência no cache na primeira consulta.

Agregação adicional limitada

Por exemplo, se uma consulta com a coluna qtysold for armazenada no cache, uma solicitação para RANK(qtysold) resultará em uma ausência no cache. Além disso, uma consulta que solicita qtysold no nível de país pode obter uma ocorrência no cache de uma consulta que solicita qtysold no nível de país, região.

A cláusula ORDER BY deve ser composta por colunas na lista de seleção

As consultas ordenadas por colunas que não estão contidas na lista de seleção resultam em ausências no cache.

Diagnosticando o comportamento de ocorrência no cache

Para avaliar melhor o comportamento de ocorrência no cache, defina a variável de sessão ENABLE_CACHE_DIAGNOSTICS como 4, conforme mostrado no seguinte exemplo:

ENABLE_CACHE_DIAGNOSTICS=4