Usar Cache de Tabela Externa para Melhorar o Desempenho de Tabelas Externas

O Cache de Tabela Externa no Oracle Autonomous AI Database permite armazenar em cache dados acessados com frequência de tabelas externas no seu banco de dados.

Observação

Só há suporte para o Cache de Tabela Externa no Oracle AI Database 26ai.

Sobre o Cache de Tabela Externa no Autonomous AI Database

Um cache de tabela externa é uma área de armazenamento no Autonomous AI Database que armazena os dados de uma tabela externa.

Os dados externos não são gerenciados pelo banco de dados; no entanto, você pode usar as tabelas externas para consultar dados fora do banco de dados. As consultas em tabelas externas não serão tão rápidas quanto as consultas em tabelas de banco de dados porque toda vez que você acessar os dados, eles precisarão ser extraídos dos arquivos externos armazenados no Object Store.

O cache de tabela externa permite armazenar localmente dados externos acessados com frequência. Quando você usa o cache, as consultas em tabelas externas podem recuperar dados diretamente de dentro do Autonomous AI Database, tornando-os significativamente mais rápidos. Você não precisa alterar instruções SQL ou fluxos de trabalho existentes para se beneficiar de acesso mais rápido, pois esse mecanismo de armazenamento em cache é totalmente transparente para os aplicativos. Você pode criar um cache de tabela externa para tabelas externas particionadas e não particionadas criadas em Tabelas Parquet, ORC, AVRO, CSV e Iceberg.

A seguir estão alguns dos benefícios de usar o cache de tabela externa:
  • Melhor desempenho para análise: As consultas são várias vezes mais rápidas para seus dados externos acessados com frequência, ideais para painéis, relatórios e ferramentas analíticas que acessam os mesmos dados regularmente.

  • 100% Transparente: O mecanismo de armazenamento em cache é totalmente transparente; os aplicativos podem se beneficiar de uma velocidade aprimorada sem exigir alterações em suas consultas, painéis ou aplicativos.

  • Custos de Nuvem Menores: Em uma aplicação multicloud, o armazenamento em cache reduz a necessidade de repetidas recuperações de dados externos do armazenamento remoto, reduzindo assim as taxas de saída de dados associadas ao acesso a dados em regiões ou nuvens.

  • Controle de armazenamento em cache flexível e detalhado: Você pode armazenar em cache todos os arquivos, uma porcentagem de arquivos ou apenas os dados atualizados mais recentemente. Você pode controlar os dados armazenados em cache, o tamanho do cache e os limites de armazenamento para caches de tabelas externas.

Os caches de tabelas externas no seu banco de dados podem ser gerenciados automaticamente ou por meio de definições baseadas em políticas. Com o gerenciamento de cache baseado em política, você pode definir políticas simples para preencher, atualizar e retirar arquivos do cache, fornecendo controle preciso sobre o conteúdo e a manutenção do cache.

Consulte Consultar Dados Externos para obter mais informações.

Início Rápido com Caches de Tabela Externos

Fornece exemplos para ajudá-lo a começar a criar e preencher caches de tabelas externas.

Crie um cache de tabela externa baseado em política para o esquema SALES.

Quando você cria um cache, ele é inicialmente vazio e ativado para preenchimento. O tamanho do cache aumenta a cada vez que um arquivo é adicionado, dependendo dos limites de cota de espaço definidos para o esquema, até atingir os limites atribuídos.

Use DBMS_EXT_TABLE_CACHE.CREATE_CACHE para criar um cache de tabela externa para seu esquema. Por exemplo:
BEGIN
    DBMS_EXT_TABLE_CACHE.CREATE_CACHE (      
      owner          => 'SALES',
      table_name     => 'STORE_SALES',
      partition_type => 'PATH');                                                                 
END;                                                                 
/

Isso cria um cache para a tabela STORE_SALES no esquema SALES. O STORE_SALES é uma tabela externa que aponta para dados armazenados no Object Store.

O parâmetro owner especifica o nome do esquema. Este exemplo cria um cache de tabela externa para o usuário SALES.

partition_type controla como o cache é dividido. Com o 'PATH', o cache é particionado pelo caminho da pasta de cada arquivo de origem. FILE$PATH é uma coluna oculta que armazena esse caminho de pasta (tudo antes do nome do arquivo).

Por exemplo, se um arquivo for …/n/<ns>/b/<bucket>/o/sales/2024/09/data1.parquet, o FILE$PATH = 'sales/2024/09/' (a pasta).

Quando você cria um cache de tabela externa pela primeira vez, seus metadados são armazenados no dicionário de dados; no entanto, nenhum espaço é alocado para os dados do cache. Você pode consultar a exibição USER_EXTERNAL_TAB_CACHES para verificar a criação do cache. Por exemplo:
SELECT external_table_name, cached, disabled 
  FROM user_external_tab_caches;

Use o procedimento DBMS_EXT_TABLE_CACHE.VALIDATE para validar um cache de tabela externa. Um erro será reportado se a tabela externa referenciada não for encontrada no banco de dados. Por exemplo:
BEGIN
  DBMS_EXT_TABLE_CACHE.VALIDATE (
    owner         => 'SALES', 
    table_name    => 'STORE_SALES',
    raise_errors  => TRUE);
END;
/

Execute DBMS_EXT_TABLE_CACHE.ADD_TABLE para preencher uma tabela inteira no cache. Por exemplo:

BEGIN
  DBMS_EXT_TABLE_CACHE.ADD_TABLE (
    owner         => 'SALES', 
    table_name    => 'STORE_SALES');
END;
/

Este exemplo tenta preencher a tabela STORE_SALES no cache.

Criar caches de tabela externa gerenciados automaticamente

Por padrão, o armazenamento automático em cache é desativado. Os caches AUTO são criados automaticamente quando você ativa o armazenamento automático em cache.

Execute DBMS_CACHE.SET_USER_PROPERTY para ativar o armazenamento automático em cache da tabela externa para o esquema HR. Por exemplo:
BEGIN
 DBMS_CACHE.SET_USER_PROPERTY (
 property_name      => 'max_cache_size', 
 property_value_num => 10737418240); 
END; 
/

Este exemplo ativa o armazenamento automático em cache para o esquema HR e define o parâmetro MAX_CACHE_SIZE como 10737418240 bytes, especificando uma alocação de cache máxima de 10 GB para tabelas externas no esquema HR. Ele também cria os caches necessários para tabelas externas e os preenche.

Exemplo para ativar o armazenamento automático em cache para todos os usuários do banco de dados:
BEGIN
 DBMS_CACHE.SET_GLOBAL_PROPERTY (
 property_name       => 'max_cache_percent',
 property_value_num  => 20);
END; 
/

Use a propriedade global MAX_CACHE_PERCENT para definir o limite de cache padrão para todos os usuários. Quando você define MAX_CACHE_PERCENT como 20, o armazenamento automático em cache de tabela externa pode usar até 20% da cota de tablespace atribuída a cada usuário (por exemplo, um usuário com cota de 100 GB pode armazenar em cache até 20 GB, um usuário com cota de 10 GB até 2 GB). Esta definição global aplica-se apenas ao armazenamento automático em cache e é por usuário, não um limite total entre todos os usuários. Você pode substituir esse padrão para usuários individuais executando o procedimento DBMS_CACHE.SET_USER_PROPERTY.

Execute a seguinte consulta para verificar se os caches foram criados e ativados:
SELECT external_table_name, cached, auto
  FROM all_external_tab_caches;

Os caches AUTO são atualizados automaticamente em uma programação regular. Opcionalmente, você também pode usar o procedimento DBMS_CACHE.REFRESH para executar uma atualização sob demanda para todos os caches de um usuário especificado. Por exemplo:
BEGIN
    DBMS_CACHE.REFRESH (      
      owner          => 'HR',
      refresh_type   => 'ALL');                                                                 
END;                                                                 
/

Este exemplo atualiza caches existentes e cria novos caches de tabela externa para o esquema HR, conforme necessário. A propriedade refresh_type especifica o escopo no qual a atualização é executada.

Escolha sua preferência de armazenamento em cache

Descreve como escolher a preferência de armazenamento em cache apropriada, incluindo o comportamento do cache e a alocação de tamanho para tabelas externas.

O cache de tabela externa é criado como um objeto de esquema no seu banco de dados, que recebe espaço físico semelhante ao armazenamento de tabelas e índices em arquivos de dados. Quando você cria um cache de tabela externa, uma nova tabela é criada no seu esquema, e quaisquer limites de cota de espaço definidos para o seu esquema também se aplicam ao cache de tabela externa.

O gerenciamento de cache de tabela externa pode ser de dois tipos:
  • Gerenciamento de cache baseado em política

    • Você define explicitamente como os caches são criados, preenchidos, atualizados e retirados.

    • Fornece controle detalhado sobre o conteúdo e o ciclo de vida do cache.

    • Adequado quando for necessário um comportamento de armazenamento em cache previsível ou personalizado.

  • Gerenciamento automático de cache

    • O banco de dados cria, preenche, atualiza e elimina caches automaticamente.

    • As ações são orientadas por padrões de consulta de tabela externa e uso de carga de trabalho.

    • Ideal para ambientes onde o comportamento de cache deve se adaptar dinamicamente sem intervenção manual.

Pré-requisitos para Criar Cache de Tabela Externa

Lista os pré-requisitos para criar o cache de tabela externa.

  • Você só pode criar um cache de tabela externa em seu próprio esquema e para as tabelas externas que você possui.

  • Você deve ter uma cota de espaço apropriada alocada para o seu esquema para garantir que haja capacidade de armazenamento suficiente para os dados do cache.

  • Você deve ter credenciais para acessar arquivos de tabela externa armazenados no Object Store. Não será necessário criar credenciais se você ativar credenciais do controlador de recursos para acessar o Oracle Cloud Infrastructure Object Store.

Usar Cache Baseado em Política para Tabelas Externas

Descreve como usar o armazenamento em cache baseado em política para tabelas externas no Autonomous AI Database.

O armazenamento em cache baseado em política fornece controle explícito sobre como os dados externos são armazenados em cache, atualizados e gerenciados no banco de dados. Nessa abordagem, você define políticas de armazenamento em cache e gerencia todo o ciclo de vida do cache usando procedimentos PL/SQL disponíveis no pacote DBMS_EXT_TABLE_CACHE. Esses procedimentos permitem que você execute explicitamente várias operações de ciclo de vida do cache, como criar e preencher caches, eliminar arquivos do cache e ativar ou desativar os caches.

Essa abordagem oferece controle detalhado sobre o comportamento do cache. Você pode especificar quais arquivos de tabela externa ou qual porcentagem de dados da tabela externa deve ser armazenada em cache, garantindo assim o uso ideal do espaço em cache com base nos requisitos de carga de trabalho. Procedimentos como ADD_BY_LIKE e ADD_LATEST_FILES permitem filtrar e preencher arquivos no cache com base em vários parâmetros, como padrões de nome de arquivo, tempos de modificação ou critérios de atualização de dados. Da mesma forma, você pode usar procedimentos como CLEAR, RETIRE_FILES ou DROP_BY_LIKE para remover arquivos do cache.

Como os caches baseados em política não são gerenciados por um algoritmo de remoção automática, o banco de dados não os elimina automaticamente sob pressão de espaço. Se o espaço no cache ficar indisponível, novos arquivos poderão falhar ao serem preenchidos até que o espaço adicional seja liberado. Essa abordagem oferece maior flexibilidade e é ideal para cargas de trabalho nas quais você precisa de mais controle sobre o conteúdo do cache.

Consulte DBMS_EXT_TABLE_CACHE Package para obter mais informações.

O fluxograma a seguir descreve as etapas para gerenciar caches baseados em política usando o pacote DBMS_EXT_TABLE_CACHE. Ele inclui etapas-chave, como criação de cache, preenchimento e eliminação.


Veja a seguir a descrição da ilustração adb_external_table_cache.png
Descrição da ilustração adb_external_table_cache.png

Tópicos

Preencher Arquivos no Cache de Tabela Externa

Descreve como preencher o cache baseado em política criado anteriormente.

Depois de criar um cache, você pode preencher arquivos no cache. O preenchimento de arquivos carrega o conteúdo dos arquivos de tabela externa especificados no cache. Você pode optar por preencher todos os arquivos de uma tabela, uma porcentagem específica da tabela ou especificar uma condição de filtro para limitar os arquivos que deseja preencher. Por exemplo, você pode filtrar os arquivos com base em seus nomes ou em um intervalo de datas.

Observação

  • Dependendo da cota de espaço alocada para o esquema, o sistema Oracle tenta preencher arquivos no cache. Se o limite de cota atribuído for atingido, o sistema Oracle interromperá o preenchimento de arquivos, a menos que o espaço necessário seja alocado.

  • O cache da tabela externa não é atualizado automaticamente. Para atualizar o cache quando um arquivo no Object Store for modificado, preencha o arquivo novamente.

  • Quando um arquivo é excluído do Armazenamento de Objetos, os dados armazenados em cache correspondentes se tornam inválidos imediatamente e não podem ser recuperados.

Adicionar Tabela ao Cache de Tabela Externa

Use DBMS_EXT_TABLE_CACHE.ADD_TABLE para preencher uma tabela inteira ou uma determinada porcentagem da tabela externa no cache.

Exemplos

BEGIN
  DBMS_EXT_TABLE_CACHE.ADD_TABLE (
    owner         => 'SALES', 
    table_name    => 'STORE_SALES');
END;
/

Este exemplo tenta preencher a tabela STORE_SALES no cache, ignorando todos os arquivos existentes que já foram preenchidos.

BEGIN
  DBMS_EXT_TABLE_CACHE.ADD_TABLE (
    owner         => 'SALES', 
    table_name    => 'STORE_SALES',
    percent_files => 80);
END;
/

Este exemplo tenta preencher 80% da tabela STORE_SALES no cache, ignorando todos os arquivos existentes que já foram preenchidos.

O parâmetro percent_files é opcional; se você não especificar esse parâmetro, toda a tabela será preenchida no cache.

Consulte ADD_TABLE Procedures para obter mais informações.

Adicionar Arquivos ao Cache de Tabela Externa

Você pode usar os seguintes procedimentos para adicionar um ou mais arquivos ao cache de tabela externa:
  • ADD_FILE: para adicionar um único arquivo ao cache.

  • ADD_BY_LIKE: para adicionar um ou mais arquivos especificados com base nos filtros de caminho especificados.

  • ADD_LATEST_FILES: para adicionar um ou mais arquivos com base no intervalo de tempo especificado.

Exemplos

Use o procedimento DBMS_EXT_TABLE_CACHE.ADD_FILE para preencher um único arquivo no cache de tabela externa. Por exemplo:
BEGIN
  DBMS_EXT_TABLE_CACHE.ADD_FILE (
    owner        => 'SALES', 
    table_name   => 'STORE_SALES',
    file_url     => 'https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/salesdata.parquet'
);
END;
/

Este exemplo preenche os dados do arquivo salesdata.parquet no cache.

Este exemplo ignora o preenchimento do arquivo no cache se o arquivo especificado existir no cache e não tiver sido modificado desde que o arquivo foi armazenado no cache pela última vez.

Consulte ADD_FILE Procedures para obter mais informações.

Use o procedimento DBMS_EXT_TABLE_CACHE.ADD_BY_LIKE para preencher um ou mais arquivos no cache de tabela externa. Por exemplo:
BEGIN
  DBMS_EXT_TABLE_CACHE.ADD_BY_LIKE (
    owner        => 'SALES', 
    table_name   => 'STORE_SALES',
    path_filters => '["https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/sales%.parquet",
                      "https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/customer%.parquet"]'
);
END;
/

Este exemplo preenche todos os arquivos com nomes que começam com sales ou customer, excluindo os arquivos que já foram preenchidos.

BEGIN
  DBMS_EXT_TABLE_CACHE.ADD_BY_LIKE (
    owner        => 'SALES', 
    table_name   => 'STORE_SALES',
    path_filters => '["https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/sales#_data1.parquet",
                      "https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/sales#_data2.parquet"]',
    esc_char     => '#',
    force        => TRUE);
END;
/

Este exemplo preenche os arquivos sales_data1.parquet e sales_data2.parquet no cache.

Neste exemplo, o caractere '#' é definido como o caractere de escape. O caractere '_' após '#' é tratado como um sublinhado literal, não como um caractere curinga correspondente a qualquer caractere único.

Consulte ADD_BY_LIKE Procedures para obter mais informações.

Use o procedimento DBMS_EXT_TABLE_CACHE.ADD_LATEST_FILES para preencher um ou mais arquivos com base na data da última modificação no cache da tabela externa. Por exemplo:
BEGIN
  DBMS_EXT_TABLE_CACHE.ADD_LATEST_FILES (
    owner        => 'SALES', 
    table_name   => 'STORE_SALES',
    since        => INTERVAL '7' DAY,
    max_files    => 5,
    force        => TRUE);
END;
/

O parâmetro since especifica o intervalo de tempo; somente arquivos modificados nos últimos sete (7) dias são elegíveis para serem preenchidos no cache.

O parâmetro max_files limita o número de arquivos que podem ser preenchidos no cache. Este exemplo preenche apenas 5 (cinco) arquivos.

O parâmetro force força os arquivos especificados a serem substituídos no cache, mesmo que os arquivos não tenham sido modificados.

Consulte ADD_LATEST_FILES Procedures para obter mais informações.

Consulte as seguintes views de dicionário de dados para listar os arquivos armazenados em cache no cache de tabelas externas:

Eliminar Arquivos do Cache de Tabela Externa

Mostra exemplos para eliminar arquivos do cache de tabela externa.

Você pode remover todos os arquivos do cache ou especificar condições de filtro para eliminar um ou mais arquivos do cache. Por exemplo, você pode filtrar os arquivos por seus nomes ou com base em um intervalo de tempo específico.

Limpar Cache de Tabela Externa

Use DBMS_EXT_TABLE_CACHE.CLEAR para eliminar todos os arquivos do cache de tabela externa. Por exemplo:

BEGIN
  DBMS_EXT_TABLE_CACHE.CLEAR (
    owner         => 'SALES', 
    table_name    => 'STORE_SALES');
END;
/

Este exemplo elimina todos os arquivos do cache STORE_SALES e desaloca todo o espaço usado pelos arquivos removidos.

Consulte Procedimento CLEAR para obter mais informações.

Eliminar Arquivos do Cache de Tabela Externa

Você pode usar os seguintes procedimentos para eliminar um ou mais arquivos do cache de tabela externa:
  • DROP_FILE: para eliminar um único arquivo do cache.

  • DROP_BY_LIKE: para eliminar um ou mais arquivos do cache com base nos filtros de caminho especificados.

  • RETIRE_FILES: para eliminar um ou mais arquivos do cache com base no intervalo especificado.

Exemplos

Use DBMS_EXT_TABLE_CACHE.DROP_FILE para eliminar um arquivo do cache de tabela externa. Por exemplo:

BEGIN
  DBMS_EXT_TABLE_CACHE.DROP_FILE (
    owner        => 'SALES', 
    table_name   => 'STORE_SALES',
    file_url     => 'https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/salesdata.parquet'
);
END;
/

Este exemplo elimina o arquivo salesdata.parquet do cache e desaloca todo o espaço usado pelo arquivo removido.

Consulte DROP_FILE Procedures para obter mais informações.

Use DBMS_EXT_TABLE_CACHE.DROP_BY_LIKE para eliminar um ou mais arquivos com base no parâmetro path_filters. Por exemplo:

BEGIN
  DBMS_EXT_TABLE_CACHE.DROP_BY_LIKE (
    owner        => 'SALES', 
    table_name   => 'STORE_SALES',
    path_filters => '["https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/salesdata.parquet",
                      "https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/salesdata1.parquet"]'
);
END;
/

Este exemplo elimina os arquivos salesdata.parquet e salesdata1.parquet do cache e desaloca todo o espaço usado pelos arquivos removidos.

BEGIN
  DBMS_EXT_TABLE_CACHE.DROP_BY_LIKE (
    owner        => 'SALES', 
    table_name   => 'STORE_SALES',
    path_filters => '["https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/sales#_data1.parquet",
                      "https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/sales#_data2.parquet"]'
);
END;
/

Este exemplo elimina os arquivos sales#_data1 e sales#_data2 do cache e desaloca todo o espaço usado pelos arquivos removidos.

Neste exemplo, o caractere '#' é definido como o caractere de escape. O caractere '_' após '#' é tratado como um sublinhado literal, não como um caractere curinga correspondente a qualquer caractere único.

Consulte DROP_BY_LIKE Procedures para obter mais informações.

Use DBMS_EXT_TABLE_CACHE.RETIRE_FILES para eliminar um ou mais arquivos com base no intervalo especificado. Por exemplo:

BEGIN
 DBMS_EXT_TABLE_CACHE.RETIRE_FILES (
    owner        => 'SALES', 
    table_name   => 'STORE_SALES',
    before       => INTERVAL '30' DAY);
END;
/

Este exemplo elimina arquivos com mais de trinta (30) dias do cache e desaloca todo o espaço usado pelos arquivos removidos.

Consulte RETIRE_FILES Procedures para obter mais informações.

Os exemplos acima removem um ou mais arquivos do cache enquanto mantêm o cache. Você pode carregar arquivos novamente no cache quando necessário. Consulte Preencher Arquivos no Cache de Tabela Externa para obter mais informações.

Desativar e Ativar Cache de Tabela Externa

Mostra exemplos para desativar e ativar o cache de tabela externa.

Execute DBMS_EXT_TABLE_CACHE.DISABLE para desativar o cache de tabela externa do banco de dados. A desativação de um cache não exclui dados do cache; em vez disso, o cache é marcado como DISABLED e o otimizador não pode usar o cache para regravações de consulta.

Exemplo

BEGIN
    DBMS_EXT_TABLE_CACHE.DISABLE (      
      owner          => 'SALES',
      table_name     => 'STORE_SALES');                                                                 
END;                                                                 
/

Este exemplo desativa o cache STORE_SALES.

Consulte Procedimento DISABLE para obter mais informações.

Depois de desativar um cache de tabela externa, use DBMS_EXT_TABLE_CACHE.ENABLE para ativar o cache.

Exemplo:
BEGIN
  DBMS_EXT_TABLE_CACHE.ENABLE (
    owner        => 'SALES', 
    table_name   => 'STORE_SALES'
 );
END;
/

Este exemplo ativa o cache STORE_SALES.

Consulte CAPACITAR Procedimento para obter mais informações.

Eliminar Cache de Tabela Externa

Mostra um exemplo para eliminar o cache da tabela externa.

Execute DBMS_EXT_TABLE_CACHE.DROP_CACHE para eliminar um cache de tabela externa. O procedimento DBMS_EXT_TABLE_CACHE.DROP_CACHE remove o cache de tabela externa especificado do banco de dados e libera o espaço de armazenamento associado ao cache.

Exemplo:

BEGIN
    DBMS_EXT_TABLE_CACHE.DROP_CACHE (      
      owner          => 'SALES',
      table_name     => 'STORE_SALES');                                                             
END;                                                                 
/

Este exemplo elimina o cache STORE_SALES do esquema SALES.

A eliminação de um cache remove seus metadados do dicionário de dados e exclui todos os dados armazenados no cache.

Consulte DROP_CACHE Procedures para obter mais informações.

Consulte a view USER_EXTERNAL_TAB_CACHES para verificar se o cache foi eliminado. Por exemplo:
SELECT external_table_name, cached
  FROM user_external_tab_caches;

Consulte DBA_EXTERNAL_TAB_CACHES e USER_EXTERNAL_TAB_CACHES Views para obter mais informações.

Definir Preferências de Dimensionamento Opcionais para Caches Baseados em Política

Descreve como definir preferências de dimensionamento para caches de tabela externa baseados em política no Autonomous AI Database.

Por padrão, o cache de tabela externa é desativado para um usuário. Para ativar e criar o cache de tabela externa, use o procedimento DBMS_EXT_TABLE_CACHE.CREATE_CACHE. O cache é criado no seu esquema padrão e herda quaisquer limites de cota de espaço definidos para o seu esquema. No entanto, você também pode usar o procedimento DBMS_EXT_TABLE_CACHE.SET_USER_PROPERTY para definir cotas de espaço para o cache de tabela externa. Use os parâmetros PROPERTY_NAME e PROPERTY_VALUE do procedimento DBMS_EXT_TABLE_CACHE.SET_USER_PROPERTY para definir os limites de cota de espaço.

O parâmetro PROPERTY_NAME aceita valores MAX_CACHE_SIZE e MAX_CACHE_PERCENT. A propriedade MAX_CACHE_SIZE especifica o tamanho total do cache externo em bytes. A propriedade MAX_CACHE_PERCENT especifica o tamanho total do cache externo como uma porcentagem da cota do usuário especificado.

Exemplos

BEGIN
    DBMS_EXT_TABLE_CACHE.SET_USER_PROPERTY (
    property_name  => 'MAX_CACHE_PERCENT',          
    property_value => 50,                   
    owner          => 'SALES');                                                                
END;                                                                 
/

Este exemplo define a preferência de armazenamento em cache como MAX_CACHE_PERCENT para o esquema SALES.

O property_value é 50%, o que especifica que a cota de espaço no cache para o esquema SALES é no máximo 50% da cota de espaço total definida para SALES.

BEGIN
    DBMS_EXT_TABLE_CACHE.SET_USER_PROPERTY (
    owner          => 'SALES',   
    property_name  => 'MAX_CACHE_SIZE',          
    property_value => 5368709120);                                                                
END;                                                                 
/

Este exemplo define a preferência de armazenamento em cache como MAX_CACHE_SIZE para o esquema SALES.

O property_value é 5368709120, que especifica que o tamanho máximo do cache para o esquema SALES é de até 5 GB.

Consulte SET_USER_PROPERTY Procedure e CREATE_CACHE Procedure para obter mais informações.

Use DBMS_EXT_TABLE_CACHE.GET_USER_PROPERTY para recuperar as propriedades de tamanho do cache.

Exemplo:

SET SERVEROUTPUT ON
    DECLARE
    max_cache_sz NUMBER,
    BEGIN
    max_cache_sz := DBMS_EXT_TABLE_CACHE.GET_USER_PROPERTY (
        property_name       => 'MAX_CACHE_SIZE',         
        owner               => 'SALES');                                                                
END;                                                                 
/

Consulte Função GET_USER_PROPERTY para obter mais informações.

Observe a seguinte ordem de precedência para definir as propriedades de tamanho do cache:

  • Quando MAX_CACHE_SIZE, MAX_CACHE_PERCENT e a cota de espaço são definidos, MAX_CACHE_PERCENT tem precedência sobre MAX_CACHE_SIZE.

  • Quando apenas MAX_CACHE_SIZE é definido e MAX_CACHE_PERCENT ou cota de espaço não é definida, MAX_CACHE_SIZE tem precedência.

  • Quando apenas a cota de espaço é definida e MAX_CACHE_SIZE e MAX_CACHE_PERCENT não são definidos, a cota de tamanho do cache assume como padrão 10% da cota total do esquema.

  • Quando MAX_CACHE_SIZE, MAX_CACHE_PERCENT ou a cota de espaço não estiver definida, a cota de espaço no cache assumirá como padrão UNLIMITED.

Observação

Para monitorar o uso do espaço no cache, consulte a coluna CACHE_CUR_SIZE nas views ALL_EXTERNAL_TAB_CACHES. Consulte DBA_EXTERNAL_TAB_CACHES e USER_EXTERNAL_TAB_CACHES Views para obter mais informações.

Usar Armazenamento Automático em Cache para Tabela Externa

Descreve como usar o armazenamento automático em cache para tabelas externas no Autonomous AI Database.

Quando você ativa o armazenamento automático em cache para seu banco de dados, o banco de dados gerencia automaticamente todo o ciclo de vida do cache, incluindo criação, preenchimento, atualização e eliminação, sem exigir sua intervenção. O sistema Oracle usa mecanismos internos para determinar quais tabelas externas podem se beneficiar do armazenamento em cache, quando atualizar os caches e quando eliminá-los com base em padrões de uso e espaço de armazenamento disponível. Essa abordagem reduz sua sobrecarga para gerenciamento de cache, pois o uso do cache é monitorado continuamente, garantindo que os dados da tabela externa acessados com frequência permaneçam disponíveis no cache para melhorar os tempos de resposta da consulta.

Por padrão, o armazenamento automático em cache não está ativado no banco de dados. Para ativá-lo, defina o tamanho do cache para um valor diferente de zero usando procedimentos como DBMS_CACHE.SET_USER_PROPERTY fornecidos no pacote DBMS_CACHE. Você pode configurar o armazenamento automático em cache para um usuário específico ou como a configuração padrão para todos os usuários do banco de dados, dependendo dos seus requisitos.

Quando o armazenamento automático em cache de tabelas externas é ativado, o sistema Oracle cria caches de tabelas externas que são marcados como AUTO e preenche todos os dados correspondentes de uma tabela externa em seu cache, se a cota permitir. Os caches AUTO são atualizados automaticamente em uma programação regular. No entanto, você também pode usar os procedimentos DBMS_CACHE.REFRESH ou DBMS_CACHE.CLEAR para atualizar ou eliminar seus caches, respectivamente.

O sistema Oracle gerencia os caches AUTO usando um algoritmo de remoção semelhante ao LRU (Least Recentemente Used). Quando sob pressão de espaço, os caches que foram acessados menos recentemente são automaticamente eliminados durante o ciclo de atualização para liberar o espaço de armazenamento.

Para obter mais informações, consulte:

Tópicos

Ativar Armazenamento Automático em Cache para Tabelas Externas

Descreve como configurar propriedades de armazenamento automático em cache.

Por padrão, o armazenamento automático em cache está desativado. Você pode ativar o armazenamento automático em cache para suas tabelas externas globalmente para todos os usuários do banco de dados ou para um usuário específico. Depois que o armazenamento automático em cache é ativado, o banco de dados cria automaticamente caches de tabelas externas. Todos os caches recém-criados são marcados como AUTO. Os caches existentes continuam a seguir as definições de gerenciamento de cache baseadas em política.

Use DBMS_CACHE.SET_GLOBAL_PROPERTY ou DBMS_CACHE.SET_USER_PROPERTY para definir propriedades de armazenamento em cache AUTO, incluindo propriedades para ativar o armazenamento em cache automático globalmente ou para um usuário especificado, respectivamente. As preferências de armazenamento em cache no nível do usuário têm precedência sobre as preferências globais de armazenamento em cache. Use os parâmetros PROPERTY_NAME e PROPERTY_VALUE desses procedimentos para definir limites de cota de espaço para caches de tabelas externas.

Dependendo da cota de espaço especificada, o sistema Oracle cria os caches e tenta preencher todos os dados da tabela externa no cache. O processo de preenchimento falhará se o tamanho do cache não for suficiente para acomodar todos os dados da tabela externa.

  1. Use DBMS_CACHE.SET_GLOBAL_PROPERTY para ativar o armazenamento automático em cache para todos os usuários do banco de dados.

    Exemplos:

    Exemplo para ativar o armazenamento automático em cache para todos os usuários do banco de dados:

    BEGIN
     DBMS_CACHE.SET_GLOBAL_PROPERTY (
        property_name       => 'MAX_CACHE_PERCENT', 
        property_value_num  => 20);                                                                
    END;                                                                 
    /

    Este exemplo define a preferência de armazenamento em cache como MAX_CACHE_PERCENT como o padrão para todos os usuários do banco de dados e define a cota de cache da tabela externa para no máximo 20% da cota total de usuários atribuída. Você pode substituir essa definição padrão para usuários individuais usando o procedimento DBMS_CACHE.SET_USER_PROPERTY.

    Ao ativar o armazenamento automático em cache, você pode especificar opcionalmente o escopo da atualização de cache, o que significa quais caches são elegíveis para atualização durante cada ciclo de atualização, e definir o intervalo de tempo permitido para concluir o processo de atualização.

    Exemplo para definir o modo de atualização automática para todos os usuários do banco de dados:
    BEGIN
     DBMS_CACHE.SET_GLOBAL_PROPERTY (
        property_name       => 'AUTO_REFRESH_MODE', 
        property_value_str  => 'NEW');                                                              
    END;                                                                 
    /

    Especifica o escopo no qual os caches AUTO são atualizados durante cada ciclo de atualização. O valor property_value_str pode ser substituído no nível do esquema usando o procedimento DBMS_CACHE.SET_USER_PROPERTY.

    Exemplo para definir o intervalo de tempo máximo permitido para concluir a atualização:
    BEGIN
     DBMS_CACHE.SET_GLOBAL_PROPERTY (
        property_name       => 'MAX_REFRESH_WINDOW', 
        property_value_num  => 20);                                                              
    END;                                                                 
    /

    Este exemplo define MAX_REFRESH_WINDOW como vinte (20) segundos.

    Consulte SET_GLOBAL_PROPERTY Procedures para obter mais informações.

    Observação

    A propriedade MAX_REFRESH_WINDOW só pode ser definida no nível do banco de dados. Essa propriedade não pode ser definida no nível do esquema.

    Execute o DBMS_CACHE.GET_GLOBAL_PROPERTY para recuperar as preferências de armazenamento automático em cache padrão para tabelas externas. Por exemplo:

    SET SERVEROUTPUT ON;
    DECLARE
       cache_property NUMBER;
    BEGIN
       DBMS_CACHE.GET_GLOBAL_PROPERTY (
          property_name  => 'MAX_CACHE_SIZE',
          property_value => cache_property
       );
     DBMS_OUTPUT.PUT_LINE('MAX_CACHE_SIZE = ' || cache_property);
    END;
    /

    Consulte GET_GLOBAL_PROPERTY Procedures para obter mais informações.

  2. Você usa DBMS_CACHE.SET_USER_PROPERTY para ativar o armazenamento automático em cache da tabela externa para um usuário específico. Por exemplo:
    BEGIN
     DBMS_CACHE.SET_USER_PROPERTY (
            property_name       => 'MAX_CACHE_PERCENT', 
            property_value_num  => 50,
            owner               => 'HR');                                                                
    END;                                                                 
    /

    Este exemplo substitui as preferências globais de armazenamento em cache pelos valores especificados em DBMS_CACHE.SET_USER_PROPERTY.

    Consulte SET_USER_PROPERTY Procedures para obter mais informações.

    Use DBMS_CACHE.GET_USER_PROPERTY para recuperar preferências de armazenamento automático em cache para tabelas externas de um usuário especificado. Por exemplo:

    SET SERVEROUTPUT ON;
    DECLARE
       cache_property NUMBER;
    BEGIN
       DBMS_CACHE.GET_USER_PROPERTY (
          property_name  => 'MAX_CACHE_SIZE',
          owner          => 'HR',
          property_value => cache_property
       );
     DBMS_OUTPUT.PUT_LINE('MAX_CACHE_SIZE = ' || cache_property);
    END;
    /

    Consulte GET_USER_PROPERTY Procedures para obter mais informações.

Observação

Para monitorar o uso do espaço no cache, consulte a coluna CACHE_CUR_SIZE nas views ALL_EXTERNAL_TAB_CACHES. Consulte DBA_EXTERNAL_TAB_CACHES e USER_EXTERNAL_TAB_CACHES Views para obter mais informações.

Atualizando Caches de Tabela Externa

Mostra um exemplo para atualizar caches AUTO para o esquema especificado.

Os caches AUTO são atualizados automaticamente em uma programação regular. Dependendo do tipo de atualização especificado, o banco de dados pode:
  • Adicionar novos caches.

  • Elimine caches inválidos (os caches que se tornam inacessíveis são marcados como inválidos e são eliminados no ciclo de atualização subsequente.)

  • Atualize ou preencha novamente os caches existentes.

  • Elimine os caches acessados recentemente quando sob pressão de espaço.

Como alternativa, você também pode usar o procedimento DBMS_CACHE.REFRESH para executar uma atualização sob demanda para todos os caches do usuário de RH.

  1. Use DBMS_CACHE.REFRESH para atualizar todos os caches de tabelas externas do usuário de RH. Por exemplo:
    BEGIN
        DBMS_CACHE.REFRESH (      
          owner          => 'HR',
          refresh_type   => 'ALL');                                                                 
    END;                                                                 
    /

    Este exemplo atualiza caches existentes e cria novos caches de tabela externa para o esquema HR, conforme necessário.

    A propriedade refresh_type especifica o escopo no qual a atualização é executada. A propriedade pode ter um dos seguintes valores:
    • ALL: Todos os caches AUTO existentes para o esquema HR são atualizados e, se necessário, novos caches são criados.

    • CURRENT: somente os caches existentes são atualizados, nenhum novo caches é adicionado.

    • NEW: somente novos caches são criados.

    Consulte Procedimento REFRESH para obter mais informações.

Eliminar Caches de Tabela Externa

Mostra um exemplo para eliminar caches AUTO para o esquema especificado.

Durante cada ciclo de atualização, os caches inválidos e os caches acessados mais recentemente são eliminados do banco de dados. Como alternativa, você pode usar o procedimento DBMS_CACHE.CLEAR para eliminar todos os caches de um usuário especificado.

  1. Use DBMS_CACHE.CLEAR para eliminar todos os caches de tabelas externas do esquema HR. Por exemplo:
    BEGIN
     DBMS_CACHE.CLEAR (
        owner => 'HR');                                                                
    END;                                                                 
    /

    Este exemplo elimina todos os caches de tabelas externas para o esquema HR.

    Consulte Procedimento CLEAR para obter mais informações.

Monitorar e Diagnosticar o Desempenho do Cache da Tabela Externa

O Autonomous AI Database fornece views que permitem monitorar o cache de tabela externa.

Exibir Descrição

Views DBA_EXTERNAL_TAB_CACHES e USER_EXTERNAL_TAB_CACHES

Fornece informações sobre todos os caches de tabelas externas no banco de dados ou sobre os caches de tabelas externas de um usuário.

ALL_EXTERNAL_TAB_CACHE_LOCATIONS

Fornece informações sobre os arquivos no Cloud Storage que são acessíveis ao usuário atual e pertencem a tabelas externas em cache.

USER_EXTERNAL_TAB_CACHE_LOCATIONS

Fornece informações sobre os arquivos no armazenamento em nuvem que pertencem ao usuário atual e pertencem a tabelas externas em cache. Esta exibição não exibe a coluna OWNER.

Essas visualizações fornecem informações detalhadas sobre como os dados armazenados em cache para tabelas externas são armazenados, acessados e mantidos no banco de dados. Essas exibições permitem monitorar o desempenho do cache, identificar dados desatualizados ou desatualizados e analisar a utilização do espaço para garantir a eficiência ideal da consulta. Ao monitorar essas views, você pode detectar quando os caches precisam ser atualizados, verificar se os tamanhos de cache estão dentro dos limites configurados e diagnosticar gargalos de desempenho relacionados ao acesso a dados externos.

Exemplos:

A consulta a seguir fornece informações sobre caches de tabelas externas que estão ativos ou desatualizados. Em seguida, você pode limpar ou eliminar os caches desatualizados para liberar espaço de armazenamento conforme necessário:
SELECT table_name, cached, stale, last_refreshed, last_accessed
  FROM all_external_tab_cache_locations
  ORDER BY stale DESC, usage_count DESC;

A consulta a seguir fornece informações sobre inventário de cache e uso de espaço:

SELECT external_table_name, cache_cur_size, cache_max_size, disabled
    FROM user_external_tab_caches;

Casos de Uso para Cache de Tabela Externa

Descreve cenários comuns em que o armazenamento em cache de tabelas externas é benéfico.

Caso de Uso O que armazenar em cache Impacto no Custo Impacto de Desempenho Observações

BI interativo ou painéis sobre tabelas externas

Tabelas externas ou partições consultadas com frequência alimentando painéis

Elimina leituras repetidas entre nuvens ou regionais

Mantém dados quentes locais para tempos de resposta mais rápidos e consistentes e evita partidas a frio

Este é o cenário mais comum

Análise multicloud (por exemplo, Autonomous AI Database na OCI lendo S3, GCS ou Azure)

Conjuntos de dados acessados a partir de armazenamentos de objetos que não são do OCI

Reduz a saída entre nuvens e reduz as taxas de solicitação do provedor

Remove E/S remota e latência de rede

Custo e latência de chamada juntos

Acesso entre regiões (mesma nuvem)

Dados externos em outra região

Evita saída entre regiões em verificações de repetição

Reduz a latência ao localizar leituras

A mesma lógica que a multicloud.

Atualização da View Materializada sobre dados externos

Tabelas externas de origem para Views Materializadas

Reduz a saída de repetição para atualizações programadas

Estabiliza e acelera a atualização do Materialized View; reduz o tempo de varredura remota

Ideal para agregados quase em tempo real

Pipelines de arquivos mais recentes (zona de destino)

Últimas N horas ou dias de arquivos usando ADD_LATEST_FILES

 

Os dados mais recentes estão sempre quentes

 

Dados de consulta ou referência pequenos, mas frequentemente unidos

Tabelas externas pequenas usadas em junções

Evita sobrecarga devido a muitas pequenas solicitações

Mantém os dados de pesquisa locais para junções

Dados de dicionário pequenos estão sempre atualizados, não há necessidade de manter ETL complexas

Ciência de dados e engenharia de recursos

Treinamento reutilizado ou conjuntos de recursos em tabelas externas

Menos leituras remotas durante o trabalho iterativo

Varreduras repetidas mais rápidas durante a experimentação

Funciona bem com loops orientados a notebook

Armazenamento de objetos estrangulado ou estrangulado

Qualquer tabela externa de alto tráfego

Menos repetições em muitos usuários

Protege consultas de limitação de armazenamento e throughput de variável

Melhora a previsibilidade do SLA

Iceberg ou grandes lagos divididos

Partições quentes ou instantâneos lidos com frequência

Evita leituras repetidas das mesmas listras de parquet

Localiza páginas de dados para partições quentes; tempos de consulta mais estáveis

Link cruzado para a página de configuração do Iceberg

Exploração ad hoc em escala

Tabelas externas provisórias que veem acesso repetido

Evita reembolsar saída ao explorar

Faz consultas de acompanhamento rápidas após a primeira aprovação

Bom em rampas sem copiar pipelines.