Melhorar o Desempenho da Consulta com Cache de Tabela Externa

No Autonomous AI Database on Dedicated Exadata Infrastructure, você pode usar o cache de tabela externa para armazenar em cache os dados de tabelas externas dentro do seu banco de dados.

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.

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 recurso de cache de tabela externa permite armazenar em cache dados acessados com frequência de tabelas externas dentro do Autonomous AI Database, sem exigir modificações em seus aplicativos que acessam os dados, fornecendo assim acesso mais rápido a tabelas externas.

A seguir estão alguns dos benefícios de usar o cache de tabela externa:

Você pode criar um cache de tabela externa para tabelas particionadas e não particionadas criadas nos seguintes tipos de arquivo:

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

Pré-requisitos

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

Limitações

Lista observações e restrições importantes sobre o uso do cache de tabela externa em um Autonomous AI Database.

Criar Cache de Tabela Externa

Execute DBMS_EXT_TABLE_CACHE.CREATE_CACHE para criar um cache de tabela externa.

Quando o cache é criado, 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. Consulte Definir Preferências de Dimensionamento Opcionais para Cache de Tabela Externa para obter mais informações.

  1. 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.

    O parâmetro partition_type especifica o método de particionamento a ser usado para o cache de tabela externa. Este exemplo faz a partição do cache usando a coluna FILE$PATH. O FILE$PATH é uma coluna invisível que especifica o texto do caminho do arquivo até o início do nome do objeto.

    Consulte Colunas de Metadados da Tabela Externa e Procedimento CREATE_CACHE para obter mais informações.

  2. 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.

     SELECT external_table_name, cached, disabled
       FROM user_external_tab_caches;
    

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

    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;
     /
    

    Consulte Procedimento de VALIDAÇÃO para obter mais informações.

Preencher Arquivos no Cache de Tabela Externa

Mostra exemplos para preencher arquivos no cache de tabela externa.

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.

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 de

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 Procedimento ADD_TABLE 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:

Exemplos de

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 Procedimento ADD_FILE 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/salesdata.parquet",
                      "https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/salesdata1.parquet"]'
);
END;
/

Este exemplo preenche dados dos arquivos salesdata.parquet e salesdata1.parquet no cache, ignorando todos os arquivos existentes 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 Procedimento ADD_BY_LIKE 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 Procedimento ADD_LATEST_FILES 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:

Exemplos de

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 Procedimento DROP_FILE 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#_data1.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 Procedimento DROP_BY_LIKE 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 Procedimento RETIRE_FILES 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 é sinalizado como DISABLED e o otimizador não pode usar o cache para regravações de consulta.

Exemplos de

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.

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 Procedimento DROP_CACHE 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 Views DBA_EXTERNAL_TAB_CACHES e USER_EXTERNAL_TAB_CACHES para obter mais informações.

Exibir Informações do Cache da Tabela Externa

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

Exibir Descrição
Visualizações 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.
TODOS_EXTERNAL_TAB_CACHE_LOCALS 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_LOCALS 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.

Definir Preferências de Dimensionamento Opcionais para Cache de Tabela Externa

Você pode usar o procedimento DBMS_EXT_TABLE_CACHE.SET_USER_PROPERTY para definir preferências de dimensionamento e limites de cota de espaço no cache da tabela externa.

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.

Antes de definir as propriedades de tamanho do cache, observe a seguinte ordem de precedência:

Exemplos de

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 Procedimento SET_USER_PROPERTY e Procedimento CREATE_CACHE 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.

Colunas de Metadados da Tabela Externa

Os metadados da tabela externa ajudam a determinar de onde vêm os dados quando você executa uma consulta.

As tabelas externas que você cria com DBMS_CLOUD.CREATE_EXTERNAL_TABLE, DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE ou DBMS_CLOUD.CREATE_HYBRID_PART_TABLE incluem duas colunas invisíveis file$path e file$name. Essas colunas ajudam a identificar de qual arquivo um registro está vindo.

Exemplo

SELECT genre_id, name, file\$name, file\$path FROM ext_genre
     WHERE rownum <= 2;
genre_id      name        file\$name     file\$path
--------      ---------   -----------   ----------------------
1             Action      genre.csv     https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_gold/o/genre
2             Adventure   genre.csv     https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_gold/o/genre

Consulte Colunas Invisíveis para obter mais informações sobre colunas invisíveis.

Tópicos Relacionados

Pacote DBMS_EXT_CACHE