Descarga de consultas a clonaciones de refrescamiento de miembros

Cuando tiene cargas de trabajo de lectura pesadas, en las que varias consultas exploran una cantidad relativamente pequeña de datos, puede descargar consultas (lecturas) de un líder de pool elástico o de un miembro de pool elástico a Clones de Refrescamiento.

Acerca de la descarga de consultas

Proporciona información sobre el uso de la descarga de consultas con un pool elástico y describe las funciones de descarga de consultas.

La descarga de consultas de pool flexible proporciona ventajas de rendimiento al permitir que una o más clonaciones de refrescamiento gestionen consultas para un líder de pool flexible o para un miembro de pool flexible. Esta función también le permite agregar clonaciones de refrescamiento para adaptarse a la creciente demanda de consultas (lectura). La descarga de consultas permite a la aplicación escalar horizontalmente, donde puede agregar clonaciones de refrescamiento para mantener el rendimiento general del sistema según sea necesario para satisfacer el volumen de solicitud de consulta.

Cuando la descarga de consultas está activada, las consultas se envían al líder del pool elástico o a un miembro del pool elástico y una o más clonaciones de refrescamiento disponibles se convierten en candidatas para la descarga de consultas. Además, cuando se agregan más clonaciones de refrescamiento, la descarga de consultas se ajusta dinámicamente para utilizar los nuevos recursos.

Un caso de uso para la descarga de consultas es activar la función durante las horas punta para eliminar la carga de la líder del pool elástico o de un miembro del pool elástico. Durante las horas tranquilas, puede desactivar la descarga de consultas para realizar operaciones de mantenimiento, como refrescar los clones de refrescamiento.

Por defecto, la descarga de consultas tiene en cuenta las consultas de cualquier sesión. También puede descargar consultas de una lista de sesiones que especifique por nombre de módulo o acción.

En la siguiente figura, se muestran las consultas de descarga de la guía del pool elástico.



En la siguiente figura, se muestra la descarga de consultas de un miembro de pool elástico.



Los datos de las clonaciones de refrescamiento están actualizados en función de la última hora de refrescamiento de cada clonación de refrescamiento. Esto significa que cuando la descarga de consultas está activada, se realizan todas las operaciones DDL, DML y PL/SQL en el líder del pool elástico o en el miembro del pool elástico que está descargando consultas. A continuación, después de refrescar una clonación de refrescamiento, los cambios se reflejan en la clonación de refrescamiento.

Consulte Uso de clonaciones de refrescamiento con Autonomous Database para obtener más información.

Funciones de descarga de consultas

  • Agregación dinámica: las clonaciones de refrescamiento se pueden agregar como miembros del pool elástico en cualquier momento. La descarga de consultas se ajusta dinámicamente para utilizar nuevos miembros.

  • Eliminación dinámica: las clonaciones de refrescamiento se pueden eliminar como miembros del pool elástico en cualquier momento. La descarga de consultas se ajusta dinámicamente para detener la descarga de consultas en una clonación de refrescamiento que se ha eliminado del pool elástico.

  • Descarga de permanencia basada en sesión: la descarga de consulta es permanente en una sesión, lo que significa que si una consulta de una sesión se ha descargado en una clonación de refrescamiento concreta, la descarga de consulta utiliza la misma clonación de refrescamiento para descargar las consultas posteriores en la misma sesión.

  • Asignación de un servicio a otro: hay una asignación de uno a uno entre el servicio utilizado en el líder del pool elástico o el miembro del pool elástico por la consulta original y el servicio utilizado en una clonación de refrescamiento para cualquier consulta descargada. Por ejemplo, si una sesión está conectada al servicio MEDIUM, la descarga de consultas para esa sesión también utiliza el servicio MEDIUM en la clonación de refrescamiento.

  • Determinar si la sesión está descargada: mediante una consulta SYS_CONTEXT, puede determinar si una sesión se ejecuta en el miembro o líder del pool elástico o si se descarga en una clonación de refrescamiento.

  • Descarga de consultas desde PL/SQL: las consultas se descargan en una clonación de refrescamiento incluso si están embebidas en PL/SQL. El PL/SQL se puede almacenar procedimientos, funciones, paquetes o bloques anónimos.

  • Descarga de consulta del trabajo del programador: se descargan las consultas de un trabajo de Oracle Scheduler. Las consultas de trabajo de Oracle Scheduler se descargan tanto si el trabajo se ejecuta en primer plano como en segundo plano.

DBA_PROXY_SQL Vistas

Utilice las vistas DBA_PROXY_SQL DBA_PROXY_SQL_ACTIONS y DBA_PROXY_SQL_MODULES para mostrar la lista de módulos o acciones configurados para la descarga de consultas. Debe consultar estas vistas desde una sesión que no esté activada para la descarga de consultas.

Activar descarga de consulta

Describe cómo activar la descarga de consultas para un líder de pool elástico o para un miembro de pool elástico.

A continuación se muestran los requisitos para activar la descarga de consultas:

  • Puede activar la descarga de consultas para un líder de pool elástico o para un miembro de pool elástico sin clonaciones de refrescamiento. Después de activar la descarga de consultas, puede agregar clonaciones de refrescamiento y la función de descarga de consultas se ajusta dinámicamente para utilizar las clonaciones de refrescamiento.

  • Una clonación de refrescamiento que sea candidata para la descarga de consultas debe:

    • Tenga el líder de pool elástico como base de datos de origen y esté en la misma región que el líder de pool elástico.

      o

      Tener un miembro de pool elástico como base de datos origen y estar en la misma región que el miembro de pool elástico.

    • Ser un miembro de pool elástico.

Para activar la descarga de consulta:

  1. Verifique que la instancia de Autonomous Database es una líder de pool elástico o un miembro de pool elástico:
    1. Utilice la siguiente consulta para verificar que una instancia es una líder de pool elástico:
      SELECT sys_context('userenv', 'is_elastic_pool_leader') FROM DUAL;

      Esta consulta debe devolver YES.

    2. Utilice la siguiente consulta para verificar que una instancia es un miembro de pool elástico:
      SELECT sys_context('userenv', 'is_elastic_pool_member') FROM DUAL;

      Esta consulta debe devolver YES.

    Nota

    Puede que haya un retraso de hasta 15 minutos para que el valor sys_context refleje el valor actual si el pool elástico se ha creado o modificado recientemente.
  2. Active la descarga de consultas.

    Hay dos opciones: puede activar la descarga de consultas para consultas de cualquier sesión o limitar la descarga de consultas a las sesiones que especifique por nombre de módulo o acción.

    • Para activar la descarga de consultas para todas las sesiones, ejecute DBMS_PROXY_SQL.ENABLE_READ_ONLY_OFFLOAD sin parámetros. Por ejemplo:

      EXEC DBMS_PROXY_SQL.ENABLE_READ_ONLY_OFFLOAD;
    • Para activar la descarga de consultas para sesiones específicas por nombre de módulo o nombre de acción, ejecute DBMS_PROXY_SQL.ENABLE_READ_ONLY_OFFLOAD con los parámetros module_name o action_name.

      Consulte Activación de la descarga de consultas para módulos o acciones con nombre para obtener más información.

Cuando la descarga de consultas está activada para una sesión, puede encontrar el nombre de la clonación de refrescamiento en la que se descargan las consultas. Por ejemplo, desde la sesión, ejecute esta consulta:

SELECT sys_context('userenv', 'con_name') FROM DUAL;

Si las consultas no se están descargando en una clonación de refrescamiento, esta consulta muestra el nombre del líder del pool elástico (o del miembro del pool elástico que no es una clonación de refrescamiento).

Consulte SYS_CONTEXT para obtener más información.

Consulte ENABLE_READ_ONLY_OFFLOAD Procedure para obtener más información.

Activar descarga de consulta para módulos o acciones con nombre

Describe cómo activar la descarga de consultas para sesiones con módulos o acciones con nombre.

Para activar la descarga de consultas para sesiones específicas por nombre de módulo o nombre de acción:

  1. Verifique que la instancia es una líder de pool elástico o un miembro de pool elástico.
    1. Utilice la siguiente consulta para verificar que una instancia es una líder de pool elástico:
      SELECT sys_context('userenv', 'is_elastic_pool_leader') FROM DUAL;

      Esta consulta debe devolver YES.

    2. Utilice la siguiente consulta para verificar que una instancia es un miembro de pool elástico:
      SELECT sys_context('userenv', 'is_elastic_pool_member') FROM DUAL;

      Esta consulta debe devolver YES.

    Nota

    Puede que haya un retraso de hasta 15 minutos para que el valor sys_context refleje el valor actual si el pool elástico se ha creado o modificado recientemente.
  2. Utilice las rutinas SET_ACTION o SET_MODULE en DBMS_APPLICATION_INFO para definir el nombre del módulo o el nombre de la acción en la sesión actual.

    Por ejemplo:

    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 obtener más información.

  3. Active la descarga de consultas y especifique las sesiones elegibles por nombre de módulo o por nombre de acción (o por nombre de módulo y nombre de acción).

    Por ejemplo:

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

Cuando la descarga de consultas está activada para una sesión, desde la sesión puede encontrar el nombre de la clonación de refrescamiento en la que se descargan las consultas. Por ejemplo:

SELECT sys_context('userenv', 'con_name') FROM DUAL;

Si las consultas no se están descargando en una clonación de refrescamiento, esta consulta muestra el nombre del líder del pool elástico (o del miembro del pool elástico que no es una clonación de refrescamiento).

Consulte SYS_CONTEXT para obtener más información.

Las vistas DBA_PROXY_SQL_ACTIONS y DBA_PROXY_SQL_MODULES muestran la lista de módulos o acciones configurados para la descarga de consultas. Debe consultar estas vistas desde una sesión que no esté activada para la descarga de consultas. Consulte Vistas de DBA_PROXY_SQL para obtener más información.

Consulte ENABLE_READ_ONLY_OFFLOAD Procedure para obtener más información.

Desactivar descarga de consulta

Describe cómo desactivar la descarga de consultas para un líder de pool elástico o para un miembro de pool elástico.

En la instancia que está descargando consultas, desactive la descarga de consultas.

Por ejemplo:

EXEC DBMS_PROXY_SQL.DISABLE_READ_ONLY_OFFLOAD;

Consulte DISABLE_READ_ONLY_OFFLOAD Procedure para obtener más información.

Descarga de consulta desde PL/SQL

Cuando la descarga de consultas está activada, las consultas se descargan en clonaciones de refrescamiento incluso si están embebidas en PL/SQL. El PL/SQL se puede almacenar procedimientos, funciones, paquetes o bloques anónimos.

Por ejemplo, puede demostrar que una consulta se descarga en una clonación de refrescamiento cuando activa la descarga de consulta para un módulo y una acción específicos. En este ejemplo, supongamos que los datos de la líder se han actualizado y que la clonación de refrescamiento aún no se ha actualizado (de modo que los datos de la clonación de refrescamiento están desactualizados y son diferentes). En este ejemplo, con diferentes valores en la líder de pool elástico y la clonación de refrescamiento, puede ver cuándo provienen los datos de la líder o de la clonación de refrescamiento.

  1. Active la descarga de consultas y especifique las sesiones elegibles por nombre de módulo y nombre de acción. Por ejemplo, '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;
    /
  2. Defina la función f1 para probar la descarga de consultas.

    SQL> create or replace function f1 (n number)
      2  return number
      3  as
      4    l_cnt number;
      5  begin
      6    select sum(c1) into l_cnt from u2.tab1;
      7    return l_cnt;
      8  end;
      9  /
     
    Function created.
  3. Ejecute la función f1. La consulta con la función f1 se ejecuta en el líder del pool elástico (o en un miembro del pool elástico que tenga activada la consulta de descarga). Esta sesión se ejecuta con nombres de acción y módulo no especificados que no coinciden con los especificados para la descarga de consulta en el paso 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.
  4. Especifique el nombre del módulo y el nombre de la acción para que la sesión coincida con los nombres especificados en el paso 1. Las consultas de esta sesión ahora se pueden descargar en una clonación de refrescamiento.

    SQL> exec dbms_application_info.set_module('mod1', 'act1');
     
    PL/SQL procedure successfully completed.
  5. Vuelva a ejecutar la función f1. En este caso, el nombre del módulo y el nombre de la acción coinciden con los nombres especificados en el paso 1. La consulta de la función f1 se descarga en una clonación de refrescamiento.

    SQL> -- Expected to fetch from Refreshable Clone and returns value 10
    SQL> select f1(3) from dual;
     
         F1(3)
    ----------
            10
     
    1 row selected.
  6. Especifique los nombres de módulo y acción como un valor distinto de mod1 y act1. Las consultas de esta sesión ya no son elegibles para ser descargadas en una clonación de refrescamiento, debido a que los nombres de módulo y acción no coinciden con los especificados en el paso 1.

    SQL> exec dbms_application_info.set_module('random', 'random');
     
    PL/SQL procedure successfully completed.
  7. Ejecute la consulta con la función f1. Debido a que el nombre del módulo y la acción para esta sesión no coinciden con los definidos en el paso 1, esta consulta no se descarga y se ejecuta en la guía de agrupación elástica.

    SQL> -- expected to fetch from Elastic Pool Leader and returns value 40
    SQL> select f1(3) from dual;
         F1(3)
    ----------
            40
     
    1 row selected.

Descarga de consulta desde un trabajo del programador

Cuando la descarga de consultas está activada, las consultas de una acción de trabajo de Oracle Scheduler se descargan en clonaciones de refrescamiento. Las consultas se descargan tanto si el trabajo se ejecuta en primer plano como en segundo plano.

Por ejemplo, de forma similar al ejemplo anterior para PL/SQL, puede demostrar que una consulta se descarga en una clonación de refrescamiento al activar la descarga de consulta para un trabajo de Oracle Scheduler. En este ejemplo, supongamos que los datos de la líder se han actualizado y que la clonación de refrescamiento aún no se ha actualizado (de modo que los datos de la clonación de refrescamiento están desactualizados y son diferentes). En este ejemplo, con diferentes valores en la líder de pool elástico y la clonación de refrescamiento, puede ver cuándo provienen los datos de la líder o de la clonación de refrescamiento.

SQL> create or replace procedure sproc1 (n number)
  2  as
  3    l_cnt number;
  4  begin
  5    select sum(c1) into l_cnt from u2.tab1;
  6    dbms_output.put_line('l_cnt is ' || l_cnt);
  7  end;
  8  /
 
Procedure created.

Offload Queries from Elastic Pool Leader to Member Refreshable Clones

SQL> create or replace procedure sproc1 (n number)
  2  as
  3    l_cnt number;
  4  begin
  5    select sum(c1) into l_cnt from u2.tab1;
  6    dbms_output.put_line('l_cnt is ' || l_cnt);
  7  end;
  8  /
 
Procedure created.
 
SQL>
SQL> BEGIN
  2    dbms_scheduler.create_job(job_name    => 'PROXYTEST1',
  3                              job_type    => 'PLSQL_BLOCK',
  4                              job_action  => 'BEGIN sproc1(3); END;',
  5                              enabled     => FALSE);
  6  END;
  7  /
 
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.

Notas para descargar consultas

Proporciona notas adicionales para la función de descarga de consultas.

Notas para la descarga de consultas:

  • Agregación o eliminación de una clonación de refrescamiento: cuando se agrega una clonación de refrescamiento como miembro de agrupación elástica, puede haber un retraso de hasta quince minutos para que la adición se refleje en la líder de agrupación elástica. Una clonación de refrescamiento recién agregada no se considera un destino para las descargas de consulta hasta que el líder conozca el miembro de pool elástico recién agregado.

    Del mismo modo, cuando se elimina una clonación de refrescamiento de la agrupación elástica, puede haber un retraso de hasta quince minutos para que la eliminación se refleje en la guía de agrupación elástica. La clonación de refrescamiento eliminada se considera un destino para las descargas de consulta hasta que el líder sepa que el miembro se ha eliminado del pool elástico.

  • Refrescamiento de clonación de refrescamiento: cuando se refresca una clonación de refrescamiento, las consultas que se descargan en la clonación de refrescamiento se pueden retrasar.

  • Soporte de punto final público y privado: la descarga de consultas está soportada para instancias de un punto final público y para instancias de un punto final privado.

  • Clonación de refrescamiento desconectada: si una clonación de refrescamiento se desconecta, ya no es elegible como destino para la descarga de consultas. Puede haber un retraso de hasta quince minutos para que el líder de agrupación elástica detecte que se ha desconectado una clonación de refrescamiento y deje de descargarle consultas.

    Para asegurarse de que una clonación de refrescamiento permanece disponible para la descarga de consultas, active los refrescamientos automáticos o refresque manualmente periódicamente la clonación de refrescamiento.

    Consulte Refrescamiento de una clonación de refrescamiento en Autonomous Database para obtener más información.

  • Nombre de módulo sensible a mayúsculas/minúsculas y nombre de acción: al descargar consultas de una lista de sesiones que especifique por nombre de módulo o acción, el nombre de módulo y el nombre de acción definidos con DBMS_APPLICATION_INFO distinguen entre mayúsculas y minúsculas. DBMS_PROXY_SQL.ENABLE_READ_ONLY_OFFLOAD se adhiere a este comportamiento sensible a mayúsculas/minúsculas. Por ejemplo, cuando una sesión tiene un nombre de módulo en minúscula o un nombre de módulo con mayúsculas y minúsculas, las mayúsculas y minúsculas deben coincidir en los valores de los parámetros al activar la descarga de consultas con DBMS_PROXY_SQL.ENABLE_READ_ONLY_OFFLOAD e incluir los parámetros module_name o action_name.

    Puede comprobar el nombre del módulo y el nombre de la acción para la sesión actual mediante 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: un caso de uso para la descarga de consultas es activar la función durante las horas punta para quitar la carga del líder de agrupación elástica (o fuera del miembro de agrupación elástica donde está activada la descarga de consultas). Durante las horas tranquilas, puede desactivar la descarga de consultas para realizar operaciones de mantenimiento, como refrescar los clones de refrescamiento.