Descarregar Consultas para Clones Atualizáveis do Membro
Quando você tem cargas de trabalho de leitura intensas, em que uma quantidade relativamente pequena de dados é verificada por várias consultas, pode fazer offload de consultas (leituras) de um líder de pool elástico ou de um membro de pool elástico para Clones Atualizáveis.
Sobre Descarregamento de Consulta
Fornece informações sobre o uso de offload de consulta com um pool elástico e descreve os recursos de offload de consulta.
O offload de consulta do pool elástico oferece benefícios de desempenho ao permitir que um ou mais Clones Atualizáveis tratem consultas para um líder de pool elástico ou para um membro de pool elástico. Esse recurso também permite adicionar Clones Atualizáveis para acomodar a crescente demanda de consulta (leitura). O descarregamento de consultas permite que seu aplicativo seja dimensionado horizontalmente, onde você pode adicionar Clones Atualizáveis para manter o desempenho geral do sistema conforme necessário para atender ao volume de solicitações de consulta.
Quando o descarregamento de consulta é ativado, as consultas são enviadas ao líder do pool elástico ou a um membro do pool elástico e um ou mais Clones Atualizáveis disponíveis se tornam candidatos ao descarregamento de consulta. Além disso, quando mais Clones Atualizáveis são adicionados, o descarregamento de consultas é ajustado dinamicamente para fazer uso dos novos recursos.
Um caso de uso para descarregamento de consulta é ativar o recurso durante o horário de pico para tirar a carga do líder do pool elástico ou de um membro do pool elástico. Durante o horário de silêncio, você pode desativar o descarregamento de consultas para executar operações de manutenção, como atualizar os Clones Atualizáveis.
Por padrão, o offload de consulta considera as consultas de qualquer sessão. Como alternativa, você pode descarregar consultas de uma lista de sessões que você especifica por módulo ou nome da ação.
A figura a seguir mostra as consultas de descarregamento do líder do pool elástico.

Descrição da ilustração autônomo-elastic-pool-leader-query-offload.png
A figura a seguir mostra as consultas de descarregamento de um membro do pool elástico.

Descrição da ilustração autônomo-elastic-pool-member-query-offload.png
Os dados dos Clones Atualizáveis estão atualizados com base no último horário de atualização de cada clone atualizável. Isso significa que quando o offload de consulta é ativado, você executa todas as operações DDL, DML e PL/SQL no líder do pool elástico ou no membro do pool elástico que está descarregando consultas. Em seguida, após a atualização de um Clone Atualizável, as alterações serão refletidas no Clone Atualizável.
Consulte Usar Clones Atualizáveis com o Autonomous AI Database para obter mais informações.
Recursos de Offload de Consulta
-
Adição Dinâmica: Os Clones Atualizáveis podem ser adicionados como membros do pool elástico a qualquer momento. O descarregamento da consulta se ajusta dinamicamente para fazer uso de novos membros.
-
Remoção Dinâmica: Os Clones Atualizáveis podem ser removidos como membros do pool elástico a qualquer momento. O descarregamento de consulta se ajusta dinamicamente para interromper o descarregamento de consultas para um Clone Atualizável que foi removido do pool elástico.
-
Descarregamento Adesivo Baseado em Sessão: O descarregamento de consulta é mantido em uma sessão, o que significa que se uma consulta em uma sessão tiver sido descarregada em um Clone Atualizável específico, o descarregamento de consulta usará o mesmo Clone Atualizável para descarregar consultas subsequentes na mesma sessão.
-
Mapeamento de Serviço Um para Um: Há um mapeamento um para um entre o serviço usado no líder do pool elástico ou no membro do pool elástico pela consulta original e o serviço usado em um Clone Atualizável para qualquer consulta descarregada. Por exemplo, se uma sessão estiver conectada ao serviço MEDIUM, o offload de consulta dessa sessão também usará o serviço MEDIUM no Clone Atualizável.
-
Determinar se a Sessão está Descarregada: Usando uma consulta
SYS_CONTEXT, você pode determinar se uma sessão é executada no líder ou membro do pool elástico ou é descarregada para um Clone Atualizável. -
Descarregamento de Consulta do PL/SQL: As consultas são descarregadas para um Clone Atualizável mesmo que estejam incorporadas ao PL/SQL. O código PL/SQL pode ser armazenado, como procedures, funções, pacotes ou blocos anônimos.
-
Descarregamento de Consulta do Job do Scheduler: As consultas de dentro de ações de job do Oracle Scheduler são descarregadas. As consultas de job do Oracle Scheduler são descarregadas, quer o job seja executado em primeiro plano ou em segundo plano.
DBA_PROXY_SQL Exibições
Use as views DBA_PROXY_SQL DBA_PROXY_SQL_ACTIONS eDBA_PROXY_SQL_MODULES para exibir a lista de módulos ou ações que são configurados para offload de consulta. É necessário consultar essas exibições em uma sessão que não está ativada para descarregamento de consulta.
Ativar Descarregamento de Consulta
Descreve como ativar o offload de consulta para um líder de pool elástico ou para um membro de pool elástico.
Veja a seguir os requisitos para ativar o descarregamento de consultas:
-
Você pode ativar o offload de consulta para um líder de pool elástico ou para um membro de pool elástico sem Clones Atualizáveis. Depois de ativar o descarregamento de consultas, você pode adicionar Clones Atualizáveis e o recurso de descarregamento de consultas se ajusta dinamicamente para fazer uso dos clones atualizáveis.
-
Um Clone Atualizável que seja um candidato para descarregamento de consulta deve:
-
Tenha o líder do pool elástico como seu banco de dados de origem e esteja na mesma região que o líder do pool elástico.
ou
Ter um membro do pool elástico como seu banco de dados de origem e estar na mesma região que o membro do pool elástico.
-
Ser um membro de pool elástico.
-
Para ativar o descarregamento de consultas:
-
Verifique se a instância do Autonomous AI Database é um líder de pool elástico ou um membro de pool elástico:
-
Use a seguinte consulta para verificar se uma instância é líder de um pool elástico:
SELECT sys_context('userenv', 'is_elastic_pool_leader') FROM DUAL;Esta consulta deve retornar
YES. -
Use a seguinte consulta para verificar se uma instância é membro de um pool elástico:
SELECT sys_context('userenv', 'is_elastic_pool_member') FROM DUAL;Esta consulta deve retornar
YES.
Observação
Observação: Pode haver um atraso de até 15 minutos para que o valorsys_contextreflita o valor atual se o pool elástico tiver sido criado ou modificado recentemente. -
-
Ativar offload de consulta.
Há duas opções: você pode ativar o offload de consulta para consultas de qualquer sessão ou limitar o offload de consulta às sessões especificadas por módulo ou nome da ação.
-
Para ativar o off-load de consulta para todas as sessões, execute
DBMS_PROXY_SQL.ENABLE_READ_ONLY_OFFLOADsem parâmetros. Por exemplo:EXEC DBMS_PROXY_SQL.ENABLE_READ_ONLY_OFFLOAD; -
Para ativar o offload de consulta para sessões específicas por nome do módulo ou nome da ação, execute
DBMS_PROXY_SQL.ENABLE_READ_ONLY_OFFLOADcom os parâmetrosmodule_nameouaction_name.Consulte Ativar Offload de Consulta para Módulos ou Ações Nomeados para obter mais informações.
-
Quando o descarregamento de consulta é ativado para uma sessão, você pode encontrar o nome do Clone Atualizável para o qual as consultas são descarregadas. Por exemplo, na sessão, execute esta consulta:
SELECT sys_context('userenv', 'con_name') FROM DUAL;Se as consultas não estiverem sendo descarregadas para um Clone Atualizável, esta consulta mostrará o nome do líder do pool elástico (ou do membro do pool elástico que não é um clone atualizável).
Consulte SYS_CONTEXT para mais informações.
Consulte Procedimento ENABLE_READ_ONLY_OFFLOAD para obter mais informações.
Ativar Offload de Consulta para Módulos ou Ações Nomeados
Descreve como ativar o offload de consulta para sessões com módulos ou ações nomeados.
Para ativar o descarregamento de consultas para sessões específicas por nome de módulo ou nome de ação:
-
Verifique se a instância é um líder de pool elástico ou um membro de pool elástico.
- Use a seguinte consulta para verificar se uma instância é líder de um pool elástico:
SELECT sys_context('userenv', 'is_elastic_pool_leader') FROM DUAL;Esta consulta deve retornar
YES. -
Use a seguinte consulta para verificar se uma instância é membro de um pool elástico:
SELECT sys_context('userenv', 'is_elastic_pool_member') FROM DUAL;Esta consulta deve retornar
YES.
Observação
Observação: Pode haver um atraso de até 15 minutos para que o valorsys_contextreflita o valor atual se o pool elástico tiver sido criado ou modificado recentemente. - Use a seguinte consulta para verificar se uma instância é líder de um pool elástico:
-
Use as rotinas
SET_ACTIONouSET_MODULEnoDBMS_APPLICATION_INFOpara definir o nome do módulo e ou o nome da ação na sessão atual.Por exemplo
CREATE or replace PROCEDURE add_employee( name VARCHAR2, salary NUMBER, manager NUMBER, title VARCHAR2, commission NUMBER, department NUMBER) AS BEGIN DBMS_APPLICATION_INFO.SET_MODULE( module_name => 'add_employee', action_name => 'insert into emp'); INSERT INTO emp (ename, empno, sal, mgr, job, hiredate, comm, deptno) VALUES (name, emp_seq.nextval, salary, manager, title, SYSDATE, commission, department); DBMS_APPLICATION_INFO.SET_MODULE(null,null); END;Consulte DBMS_APPLICATION_INFO para obter mais informações.
-
Ative o descarregamento de consulta e especifique as sessões elegíveis por nome de módulo ou por nome de ação (ou por nome de módulo e nome de ação).
Por exemplo:
DECLARE mod_values clob := to_clob('["mod1", "mod2"]'); act_values clob := to_clob('["act1", "act2"]'); BEGIN DBMS_PROXY_SQL.ENABLE_READ_ONLY_OFFLOAD( module_name => mod_values, action_name => act_values); END; /
Quando o descarregamento de consulta é ativado para uma sessão, na sessão você pode encontrar o nome do Clone Atualizável para o qual as consultas são descarregadas. Por exemplo:
SELECT sys_context('userenv', 'con_name') FROM DUAL;Se as consultas não estiverem sendo descarregadas para um Clone Atualizável, esta consulta mostrará o nome do líder do pool elástico (ou do membro do pool elástico que não é um clone atualizável).
Consulte SYS_CONTEXT para mais informações.
As views DBA_PROXY_SQL_ACTIONS e DBA_PROXY_SQL_MODULES exibem a lista de módulos ou ações que são configurados para offload de consulta. É necessário consultar essas exibições em uma sessão que não está ativada para descarregamento de consulta. Consulte Views DBA_PROXY_SQL para obter mais informações.
Consulte Procedimento ENABLE_READ_ONLY_OFFLOAD para obter mais informações.
Desativar Descarregamento de Consulta
Descreve como desativar o offload de consulta para um líder de pool elástico ou para um membro de pool elástico.
Na instância que está descarregando consultas, desative o descarregamento de consultas.
Por exemplo:
EXEC DBMS_PROXY_SQL.DISABLE_READ_ONLY_OFFLOAD;Consulte Procedimento DISABLE_READ_ONLY_OFFLOAD para obter mais informações.
Transferência de Consulta do Código PL/SQL
Quando o descarregamento de consulta é ativado, as consultas são descarregadas para Clones Atualizáveis mesmo que estejam incorporadas ao PL/SQL. O código PL/SQL pode ser armazenado, como procedures, funções, pacotes ou blocos anônimos.
Por exemplo, você pode demonstrar uma consulta sendo descarregada para um Clone Atualizável quando ativar o descarregamento de consulta para um módulo e uma ação específicos. Neste exemplo, suponha que os dados do líder tenham sido atualizados e que o Clone Atualizável ainda não tenha sido atualizado (assim, os dados do Clone Atualizável estão desatualizados e diferentes). Neste exemplo, com valores diferentes no líder do pool elástico e no Clone Atualizável, você pode ver quando os dados são provenientes do líder ou do Clone Atualizável.
-
Ative o descarregamento de consulta e especifique as sessões elegíveis por nome do módulo e nome da ação. Por exemplo, '
mod1', 'act1'.DECLARE mod_values clob := to_clob('["mod1"]'); act_values clob := to_clob('["act1"]'); BEGIN DBMS_PROXY_SQL.ENABLE_READ_ONLY_OFFLOAD( module_name => mod_values, action_name => act_values); END; / -
Defina a função
f1para testar o offload da consulta.SQL> create or replace function f1 (n number) return number as l_cnt number; begin select sum(c1) into l_cnt from u2.tab1; return l_cnt; end; / Function created. -
Execute a função
f1. A consulta com a funçãof1é executada no líder do pool elástico (ou em um membro do pool elástico que tenha a consulta de descarregamento ativada). Esta sessão é executada com nomes de módulo e ação não especificados que não correspondem aos especificados para descarregamento de consulta na Etapa 1.SQL> -- expected to fetch from Elastic Pool Leader and returns value 40 SQL> select f1(3) from dual; F1(3) ---------- 40 1 row selected. -
Especifique o nome do módulo e o nome da ação para que a sessão corresponda aos nomes especificados na Etapa 1. As consultas desta sessão agora estão qualificadas para serem descarregadas para um Clone Atualizável.
SQL> exec dbms_application_info.set_module('mod1', 'act1'); PL/SQL procedure successfully completed. -
Execute a função
f1novamente. Nesse caso, o nome do módulo e o nome da ação correspondem aos nomes especificados na Etapa 1. A consulta na funçãof1é descarregada para um Clone Atualizável.SQL> -- Expected to fetch from Refreshable Clone and returns value 10 SQL> select f1(3) from dual; F1(3) ---------- 10 1 row selected. -
Especifique o módulo e os nomes de ação como algo diferente de
mod1eact1. As consultas desta sessão não são mais elegíveis para serem descarregadas para um Clone Atualizável, pois os nomes de módulo e ação não correspondem aos especificados na Etapa 1.SQL> exec dbms_application_info.set_module('random', 'random'); PL/SQL procedure successfully completed. -
Execute a consulta com a função
f1. Como o módulo e o nome da ação para esta sessão não correspondem aos definidos na Etapa 1, esta consulta não é descarregada e é executada no líder do pool elástico.SQL> -- expected to fetch from Elastic Pool Leader and returns value 40 SQL> select f1(3) from dual; F1(3) ---------- 40 1 row selected.
Descarregamento de Consulta de um Job do Scheduler
Quando o descarregamento de consulta é ativado, as consultas de dentro de uma ação de job do Oracle Scheduler são descarregadas para Clones Atualizáveis. As consultas são descarregadas se o job é executado em primeiro plano ou em segundo plano.
Por exemplo, semelhante ao exemplo anterior para PL/SQL, você pode demonstrar que uma consulta está sendo descarregada para um Clone Atualizável quando você ativa o descarregamento de consulta para um job do Oracle Scheduler. Neste exemplo, suponha que os dados do líder tenham sido atualizados e que o Clone Atualizável ainda não tenha sido atualizado (assim, os dados do Clone Atualizável estão desatualizados e diferentes). Neste exemplo, com valores diferentes no líder do pool elástico e no Clone Atualizável, você pode ver quando os dados são provenientes do líder ou do Clone Atualizável.
SQL> create or replace procedure sproc1 (n number)
as
l_cnt number;
begin
select sum(c1) into l_cnt from u2.tab1;
dbms_output.put_line('l_cnt is ' || l_cnt);
end;
/
Procedure created.
Offload Queries from Elastic Pool Leader to Member Refreshable Clones
SQL> create or replace procedure sproc1 (n number)
as
l_cnt number;
begin
select sum(c1) into l_cnt from u2.tab1;
dbms_output.put_line('l_cnt is ' || l_cnt);
end;
/
Procedure created.
SQL>
SQL> BEGIN
dbms_scheduler.create_job(job_name => 'PROXYTEST1',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN sproc1(3); END;',
enabled => FALSE);
END;
/
PL/SQL procedure successfully completed.
SQL>
SQL> -- Job runs in the foreground in the current session
SQL> -- expected to fetch from Leader: 40
SQL> exec dbms_scheduler.RUN_JOB(job_name => 'PROXYTEST1', use_current_session => true);
l_cnt is 40
PL/SQL procedure successfully completed.
SQL>
SQL> exec dbms_proxy_sql.enable_read_only_offload;
PL/SQL procedure successfully completed.
SQL> show con_name
CON_NAME
------------------------------
CDB1_PDB1
SQL>
SQL> set serveroutput on
SQL> -- Job runs in the foreground in the current session
SQL> -- expected to fetch from Refreshable Clone: 10
SQL> exec dbms_scheduler.RUN_JOB(job_name => 'PROXYTEST1', use_current_session => true);
l_cnt is 10
PL/SQL procedure successfully completed.
SQL>
SQL> -- Job runs in the background and is expected to fetch from Refreshable Clone: 10
SQL> exec dbms_scheduler.RUN_JOB(job_name => 'PROXYTEST1', use_current_session => false);
PL/SQL procedure successfully completed.Observações para Descarregar Consultas
Fornece observações adicionais para o recurso de descarregamento de consulta.
Observações para descarregamento da consulta:
-
Adição ou Remoção de um Clone Atualizável: quando um Clone Atualizável é adicionado como um membro do pool elástico, pode haver um atraso de até quinze minutos para que a adição seja refletida no líder do pool elástico. Um Clone Atualizável recém-adicionado não é considerado como um destino para descarregamentos de consulta até que o líder esteja ciente do membro do pool elástico recém-adicionado.
Da mesma forma, quando um Clone Atualizável é removido do pool elástico, pode haver um atraso de até quinze minutos para que a remoção seja refletida no líder do pool elástico. O Clone Atualizável removido é considerado como um destino para descarregamentos de consulta até que o líder saiba que o membro foi removido do pool elástico.
-
Atualização de Clone Atualizável: Quando um Clone Atualizável está sendo atualizado, as consultas que são descarregadas para o Clone Atualizável podem ser atrasadas.
-
Suporte a Pontos Finais Públicos e Privados: O offload de consulta é suportado para instâncias em um ponto final público e para instâncias em um ponto final privado.
-
Clone Atualizável Desconectado: Se um Clone Atualizável for desconectado, ele não será mais elegível como destino para descarregamento de consulta. Pode haver um atraso de até quinze minutos para o líder do pool elástico detectar que um Clone Atualizável se desconectou e interromper o descarregamento de consultas a ele.
Para garantir que um Clone Atualizável permaneça disponível para descarregamento de consultas, ative as atualizações automáticas ou atualize periodicamente manualmente o Clone Atualizável.
Consulte Atualizar um Clone Atualizável no Autonomous AI Database para mais informações.
-
Nome e Nome da Ação do Módulo com Distinção entre Maiúsculas e Minúsculas: Quando você descarrega consultas de uma lista de sessões que você especifica por módulo ou nome da ação, o nome do módulo e o nome da ação definidos com
DBMS_APPLICATION_INFOfazem distinção entre maiúsculas e minúsculas.DBMS_PROXY_SQL.ENABLE_READ_ONLY_OFFLOADadere a esse comportamento sensível a casos. Por exemplo, quando uma sessão tem um nome de módulo em letras minúsculas ou um nome de módulo em letras maiúsculas e minúsculas, a letra deve corresponder aos valores do parâmetro quando você ativa o descarregamento de consulta comDBMS_PROXY_SQL.ENABLE_READ_ONLY_OFFLOADe inclui os parâmetrosmodule_nameouaction_name.Você pode verificar o nome do módulo e o nome da ação para a sessão atual usando
DBMS_APPLICATION_INFO.READ_MODULE:set serveroutput on; declare l_mod varchar2(50); l_act varchar2(50); BEGIN DBMS_APPLICATION_INFO.READ_MODULE(l_mod, l_act); DBMS_OUTPUT.PUT_LINE('l_mod: ' || l_mod); DBMS_OUTPUT.PUT_LINE('l_act: ' || l_act); END; / -
Caso de Uso Típico: Um caso de uso para descarregamento de consulta é ativar o recurso durante o horário de pico para descarregar o Líder do Pool Elástico (ou fora do Membro do Pool Elástico onde o descarregamento de consulta está ativado). Durante o horário de silêncio, você pode desativar o descarregamento de consultas para executar operações de manutenção, como atualizar os Clones Atualizáveis.