Usar Roteamento de Instrução Eficiente Ativando ProxySQL no Autonomous Database

O ProxySQL permite o acesso unificado a vários Autonomous Databases roteando instruções para DML e consultas e elimina a necessidade de consolidar fisicamente todos os dados em um único banco de dados.

Tópicos

Sobre o Roteamento de Instrução Eficiente com ProxySQL no Autonomous Database

ProxySQL no Autonomous Database permite usar várias instâncias do Autonomous Database e facilita o acesso e a análise de dados como se eles tivessem sido armazenados em apenas um local.

Você pode usar o ProxySQL quando precisar trabalhar com uma configuração grande que envolva vários Autonomous Databases. O ProxySQL oferece acesso unificado a diferentes bancos de dados e elimina a necessidade de mover fisicamente os dados para um só lugar.

Ao ativar o ProxySQL, você designa uma instância do Autonomous Database como uma instância do roteador e uma ou mais instâncias do Autonomous Database são instâncias de destino. A instância do roteador inclui uma tabela de roteamento que determina como uma instrução é distribuída (mapeada) para uma ou mais instâncias de destino. Uma instância de destino inclui uma tabela de aceitação. A tabela de aceitação é semelhante à tabela de roteamento e contém entradas que especificam que a instância aceita redirecionamentos de instrução do roteador.

Dependendo do método de roteamento selecionado, as instruções são automaticamente mapeadas da instância do roteador para uma ou mais instâncias de destino. Um aplicativo se conecta à instância do roteador e é executado na instância do roteador, e o Autonomous Database redireciona instruções para uma ou mais instâncias de destino.

Estes são alguns dos benefícios de ativar o ProxySQL, em comparação com o uso de um único Autonomous Database muito grande:

  • O ProxySQL fornece autonomia e independência do banco de dados para operações, como gerenciamento do ciclo de vida e tarefas administrativas. Por exemplo, usando ProxySQL, as operações de banco de dados, incluindo backup e restauração, e recursos como o Autonomous Data Guard são gerenciados de forma independente em cada instância do Autonomous Database.

  • O ProxySQL permite gerenciar bancos de dados muito grandes com eficiência, dividindo dados em várias instâncias do Autonomous Database.

Há vários termos para saber quando você trabalha com o ProxySQL:

Instância de Roteador: Uma instância de roteador é designada quando você ativa o ProxySQL. Uma tabela de roteamento determina como uma instrução é distribuída (mapeada) para uma ou mais instâncias de destino. Dependendo do método de roteamento especificado, as instruções da instância do roteador são automaticamente mapeadas para uma ou mais instâncias de destino.

Instância de Destino: A Instância de Destino é designada quando você cria um mapeamento na instância do roteador. Uma tabela de aceitação é adicionada em cada instância de destino.

Tabela de Roteamento: Uma tabela de roteamento contém entradas de mapeamento de destino que especificam a instância para a qual as instruções são roteadas automaticamente.

Tabela de Aceitação: Uma tabela de aceitação contém entradas que especificam que a instância aceita redirecionamentos de instrução do roteador.

Requisitos para usar ProxySQL

Veja a seguir os requisitos do ProxySQL:

  • Só há suporte para a ativação de ProxySQL em instâncias do Autonomous Database que estejam em um pool elástico. A instância do roteador e todas as instâncias de destino devem ser membros do mesmo pool elástico.

  • A instância do roteador e todas as instâncias de destino devem estar na mesma região.

  • Os metadados dos objetos que você está roteando devem corresponder às instâncias do roteador e do destino. É responsabilidade do designer de aplicativos que os metadados dos objetos presentes em uma instância de destino também estejam presentes na instância do roteador. Por exemplo, se você tiver uma tabela chamada EMPLOYEES na instância de destino, também deverá ter uma tabela com metadados correspondentes chamados EMPLOYEES na instância do roteador. A tabela na instância do roteador não precisa estar vazia (somente metadados).

Recomendação para ativar o ProxySQL

As instâncias que você adiciona como roteador e como destinos podem ser de qualquer tipo de carga de trabalho do Autonomous Database. Se houver entradas na tabela de roteamento (mapeamento), as instruções sobre objetos especificadas nessas entradas serão roteadas para a(s) instância(s) de destino correspondente(s), independentemente do tipo de carga de trabalho do destino. A Oracle recomenda que todas as instâncias do Banco de Dados theAutonomous usem o tipo de carga de trabalho Data Warehouse.

Roteamento Automático de Demonstrativos com ProxySQL Ativado

Usando o ProxySQL, você pode distribuir demonstrativos entre destinos usando qualquer um dos métodos de roteamento suportados.

Observação

Seja qual for o método de roteamento (mapeamento) que você decidir usar, é responsabilidade do designer de esquemas de aplicativos garantir que os metadados dos objetos colocados em uma instância de destino também estejam disponíveis na instância do roteador. Por exemplo, se você tiver uma tabela chamada EMPLOYEES na instância de destino, também deverá ter uma tabela com metadados correspondentes chamados EMPLOYEES na instância do roteador. A tabela na instância do roteador não precisa estar vazia.
  • Roteamento no Nível do Esquema: Todos os objetos de um esquema são mapeados para uma única instância de destino. Você pode mapear vários esquemas para uma única instância de destino. No entanto, as instruções para um esquema não podem ser mapeadas em várias instâncias de destino, o que significa que o mesmo esquema não pode ser usado para roteamento de esquema e objeto.

    Para especificar o Roteamento no Nível do Esquema, você chama o procedimento DBMS_PROXY_SQL.ADD_MAPPING com o parmeter object_name definido como o valor "*".


    Descrição da proxysql-schema.png a seguir
    Descrição da ilustração proxysql-schema.png

    Neste exemplo, os metadados dos objetos no esquema A estão presentes no Autonomous Database 1 de destino e na instância do roteador, e os metadados dos objetos no esquema B estão presentes no Autonomous Database 2 de destino e na instância do roteador, e assim por diante.

  • Roteamento no Nível do Objeto: Os objetos em um esquema são mapeados entre várias instâncias de destino.

    Para especificar o Roteamento no Nível do Objeto, você chama o procedimento DBMS_PROXY_SQL.ADD_MAPPING com o parmeter object_name definido como um nome de tabela.


    Descrição da proxysql-object.png a seguir
    Descrição da ilustração proxysql-object.png

    Neste exemplo, os metadados da Tabela A estão presentes no destino 1 e na instância do roteador, e os metadados da Tabela B estão presentes no destino 2 e na instância do roteador, e assim por diante.

  • Roteamento Híbrido: Os objetos de um esquema são roteados usando uma combinação de roteamento no nível do Esquema e Roteamento no Nível do Objeto.


    Descrição da proxysql-hybrid.png a seguir
    Descrição da ilustração proxysql-hybrid.png

    Neste exemplo, os metadados do Esquema A estão presentes no Autonomous Database 1 de destino e na instância do roteador, e os metadados da Tabela B (no Esquema B) estão presentes no Autonomous Database 2 de destino e na instância do roteador, e assim por diante.

Mapeamento de Serviço com Roteamento de Demonstrativo Automático Quando ProxySQL estiver Ativado

Quando a tabela de roteamento indica um mapeamento para um banco de dados de destino, o mesmo serviço que você está conectado ao banco de dados do roteador é usado para o acesso aos dados no banco de dados de destino.

Por exemplo, se uma sessão estiver conectada ao serviço HIGH na instância do roteador, um fragmento de instrução ou instrução roteado para uma instância de destino também usará o serviço HIGH. Da mesma forma, se uma sessão estiver conectada ao serviço MEDIUM na instância do roteador, uma instrução roteada para uma instância de destino usará o serviço MEDIUM.

Se o serviço usado para estabelecer conexão na instância do roteador não estiver disponível em uma instância de destino, o fragmento de instrução ou de instrução roteado para a instância de destino usará o serviço MEDIUM (os serviços disponíveis dependem do tipo de carga de trabalho do Autonomous Database).

Ativar Roteamento de Demonstrativo e Definir Mapeamento de Esquema

Esta seção explica como configurar ProxySQL para roteamento automático de instruções de um roteador principal para uma ou mais instâncias de banco de dados de destino.

Ativar Roteamento de Demonstrativo e Definir Mapeamento de Objeto do Roteador para Instâncias de Destino

Para configurar o roteamento de instruções, você ativa ProxySQL na instância do roteador e define o esquema ou os objetos cujas instruções são mapeadas (enviadas) para bancos de dados de destino.

Estes são os pré-requisitos para ativar o roteamento automático de demonstrativos:

  • Crie a instância do Autonomous Database que você planeja usar para a instância do roteador ou identifique uma instância existente do Autonomous Database como a instância do roteador.

  • Crie as instâncias de destino ou identifique as instâncias de destino nas instâncias existentes do Autonomous Database.

  • Certifique-se de que a instância do roteador e qualquer instância de destino em que você esteja redirecionando consultas tenham metadados correspondentes para qualquer objeto que você esteja mapeando do roteador para um destino.

    Qualquer que seja o método de roteamento (mapeamento) que você decida usar, é responsabilidade do designer de esquema de aplicativo garantir que os metadados dos objetos colocados em uma instância de destino também estejam disponíveis na instância do roteador. Por exemplo, se você tiver uma tabela chamada EMPLOYEES na instância de destino, também deverá ter uma tabela com metadados correspondentes chamados EMPLOYEES na instância do roteador. A tabela na instância do roteador não precisa estar vazia.

  • Entre as opções disponíveis, determine o tipo de roteamento de demonstrativo que deseja usar: Roteamento no Nível do Esquema, Roteamento no Nível do Objeto ou Roteamento Híbrido.

Para ativar o roteamento automático de demonstrativo e adicionar entradas de mapeamento de destino à tabela de roteamento:

  1. Em uma instância do Autonomous Database, execute DBMS_PROXY_SQL.ENABLE_ROUTING para ativar o roteamento automático de instruções.

    Por exemplo:

    BEGIN
       DBMS_PROXY_SQL.ENABLE_ROUTING;
    END;
    /

    A instância em que você executa DBMS_PROXY_SQL.ENABLE_ROUTING se torna a instância do roteador. Isso ativa o roteamento automático de demonstrativo e cria a tabela de roteamento.

    Consulte ENABLE_ROUTING Procedures para obter mais informações.

  2. Execute DBMS_PROXY_SQL.ADD_MAPPING para definir o mapeamento do roteador para um destino. Isso cria uma entrada na tabela de roteamento que especifica a instância de destino para a qual as consultas são roteadas automaticamente.

    Exemplo para ativar o roteamento no nível do objeto:

    BEGIN
     DBMS_PROXY_SQL.ADD_MAPPING ( 
        object_owner   => 'DW_USER',
        object_name    => 'INVENTORY',
        database_ocid  => 'TARGET1_DATABASE_OCID');
    END;
    /

    Exemplo para ativar o roteamento no nível do esquema:

    BEGIN
     DBMS_PROXY_SQL.ADD_MAPPING ( 
        object_owner   => 'DW_USER',
        object_name    => '*',
        database_ocid  => 'TARGET2_DATABASE_OCID');
    END;
    /

    Use a seguinte consulta para recuperar o OCID do banco de dados:

    SELECT json_value(cloud_identity,'$.DATABASE_OCID') 
       FROM v$pdbs;
    

    O parâmetro object_owner especifica o proprietário do objeto.

    O parâmetro object_name especifica o objeto.

    O parâmetro database_ocid especifica o OCID da instância de destino. O valor do parâmetro database_ocid deve estar em letras maiúsculas. Você pode determinar o OCID da instância de destino estabelecendo conexão com a instância de destino como ADMIN e executando a seguinte consulta:

    SELECT json_value(cloud_identity, '$.DATABASE_OCID') FROM v$pdbs;

    Consulte Obter Detalhes da Tenancy para obter mais informações.

    Isso cria uma entrada de roteamento na tabela de roteamento e define um mapeamento de objeto para uma instância de destino.

    Consulte ADD_MAPPING Procedures para obter mais informações.

  3. Execute DBMS_PROXY_SQL.ADD_MAPPING para adicionar outros mapeamentos de destino, conforme necessário.

    Por exemplo:

    BEGIN
     DBMS_PROXY_SQL.ADD_MAPPING ( 
        object_owner   => 'DW_USER_1',
        object_name    => 'CUSTOMERS',
        database_ocid  => 'TARGET3_DATABASE_OCID');
    END;
    /

Você pode consultar a exibição DBA_PROXY_SQL_MAPPINGS para listar os registros na tabela de roteamento. Consulte DBA_PROXY_SQL_MAPPINGS View para obter mais informações.

Aceitar Roteamento de Demonstrativo nas Instâncias de Destino

Você deve aceitar o roteamento de instruções em uma instância de destino para permitir o mapeamento da instância do roteador.

Para permitir que a instrução (accept) redirecione da instância do roteador para uma instância de destino:

  1. Na instância de destino, execute DBMS_PROXY_SQL.ACCEPT_MAPPING.

    Por exemplo:

    BEGIN
     DBMS_PROXY_SQL.ACCEPT_MAPPING ( 
        object_owner          => 'DW_USER',
        router_database_ocid  => 'ROUTER_DATABASE_OCID'); 
     END;
    /

    O object_owner é o proprietário para o qual o destino aceita o roteamento da instrução.

    O router_database_ocid especifica o OCID da instância do Autonomous Database do roteador. Especifica a instância da qual o destino aceita solicitações de instrução redirecionadas recebidas.

    O mapeamento de aceitação é um por proprietário de objeto, portanto, somente uma aceitação pode ser necessária, correspondendo a vários mapeamentos de objeto na instância do roteador.

    Você pode exibir a view DBMS_PROXY_SQL_ACCEPTED_MAPPINGS para listar os registros na tabela de aceitação. Consulte DBA_PROXY_SQL_ACCEPTED_MAPPINGS View para obter mais informações.

    Consulte ACCEPT_MAPPING Procedures para obter mais informações.

  2. Se houver vários destinos especificados no mapeamento do roteador, execute DBMS_PROXY_SQL.ACCEPT_MAPPING em cada destino.

    Consulte ACCEPT_MAPPING Procedures para obter mais informações.

Enviar Demonstrativos Por Meio de ProxySQL

Para aproveitar o roteamento automático de instruções, você precisa se conectar e enviar suas instruções para a instância do roteador gerenciada pelo ProxySQL.

Ao enviar consultas, incluindo instruções DML, com a opção ProxySQL ativada, você precisa se conectar à instância do roteador para aproveitar o roteamento automático de instruções.

Interromper Instruções de Roteamento para uma Instância de Destino

Execute estas etapas em um Autonomous Database de destino para impedir que ele pare de aceitar instruções roteadas do roteador ProxySQL.

  1. Execute DBMS_PROXY_SQL.REJECT_MAPPING em uma instância de destino para rejeitar o roteamento de instrução para o proprietário especificado.

    Por exemplo:

    BEGIN
     DBMS_PROXY_SQL.REJECT_MAPPING ( 
        object_owner          => 'DW_USER',
        router_database_ocid  => 'ROUTER_DATABASE_OCID');
     END;
    /

    O parâmetro object_owner especifica o nome do proprietário.

    O parâmetro router_database_ocid especifica o OCID da instância do roteador.

    A instância do Autonomous Database de destino na qual você executa este procedimento não solicita mais solicitações de roteamento da instância do roteador especificada para o proprietário do objeto especificado.

  2. Execute DBMS_PROXY_SQL.REJECT_MAPPING em alvos adicionais, conforme necessário.

Consulte REJECT_MAPPING Procedures para obter mais informações.

Remover Esquema ou Mapeamento de Objeto da Instância do Roteador

Fornece as etapas para remover um mapeamento específico do banco de dados do roteador gerenciado pelo ProxySQL.

  1. Você pode usar o procedimento DBMS_PROXY_SQL.REMOVE_MAPPING para remover uma entrada de mapeamento adicionada anteriormente para o objeto especificado. Por exemplo:

    Exemplo com uma tabela:

    BEGIN
     DBMS_PROXY_SQL.REMOVE_MAPPING ( 
        object_owner   => 'DW_USER',
        object_name    => 'INVENTORY');
     END;
    /
    Este exemplo remove a entrada de mapeamento da tabela INVENTORY da tabela de roteamento. Após a execução desse procedimento, as consultas na tabela INVENTORY não são roteadas para nenhum Autonomous Database de destino.

    Exemplo: com um esquema:

    BEGIN
     DBMS_PROXY_SQL.REMOVE_MAPPING ( 
        object_owner   => 'DW_USER',
        object_name    => '*');
     END;
    /
    Este exemplo remove a entrada de mapeamento do esquema DW_USER da tabela de roteamento. Depois que você executar este procedimento, as consultas no esquema DW_USER não serão roteadas para nenhum Autonomous Database de destino.

    O parâmetro object_owner especifica o proprietário.

    O parâmetro object_name especifica o nome da tabela.

    Consulte REMOVE_MAPPING Procedures para obter mais informações.

Desativar Roteamento de Demonstrativo

Mostra as etapas para o roteamento automático de demonstrativos desativando ProxySQL.

Execute DBMS_PROXY_SQL.DISABLE_ROUTING na instância do roteador para desativar ProxySQL e para desativar o roteamento automático de instruções para instâncias de destino.

Por exemplo:

BEGIN
 DBMS_PROXY_SQL.DISABLE_ROUTING;
END;
/

Isso desativa ProxySQL e desativa o roteamento automático de instruções no roteador.

Quando você desativa ProxySQL, as entradas de mapeamento de instrução na tabela de roteamento na instância do roteador não são excluídas. Isso significa que se você reativar ProxySQL e a tabela de roteamento tiver entradas existentes, o roteamento automático de instruções roteará instruções para instâncias de destino, conforme especificado na tabela de roteamento. Use o procedimento DBMS_PROXY_SQL.REMOVE_MAPPING se desejar remover as entradas da tabela de roteamento existente antes de reativar ProxySQL.

Consulte DISABLE_ROUTING Procedures para obter mais informações.

Roteamento Automático de Demonstrativos com Observações ProxySQL

Lista limitações e observações importantes sobre o roteamento automático de instruções quando ProxySQL está ativado.

  • O usuário ADMIN tem os privilégios para gerenciar o ProxySQL. Se quiser ativar outro usuário, você deverá conceder os seguintes privilégios

    • Privilégio EXECUTE no pacote DBMS_PROXY_SQL.

    • Privilégio READ na exibição DBA_PROXY_SQL_MAPPINGS.

    • Privilégio READ na exibição DBA_PROXY_SQL_ACCEPTED_MAPPINGS.

  • O roteamento automático de instruções é retomado perfeitamente quando:
    • A instância do Autonomous Database de destino faz failover para um stand-by local do Autonomous Data Guard.

    • Você executa um switchover de uma instância do Autonomous Database de destino para um stand-by local do Autonomous Data Guard.

    No entanto, o roteamento automático de instruções é interrompido após um failover ou switchover para um banco de dados stand-by do Autonomous Data Guard entre regiões.