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. - Activar descarga de consulta
Describe cómo activar la descarga de consulta para un líder de pool elástico o para un miembro de pool elástico. - Desactivar descarga de consulta
Describe cómo desactivar la descarga de consulta para un líder de pool elástico o para un miembro de pool elástico. - Descarga de consultas 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. - Descarga de Consultas de un Trabajo del Planificador
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. - Notas para descargar consultas
Proporciona notas adicionales para la función de descarga de consultas.
Tema principal: Uso y gestión de pools elásticos en Autonomous Database
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:
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 consultas para módulos o acciones con nombre
Describe cómo activar la descarga de consultas para sesiones con módulos o acciones con nombre.
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:
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.
Tema principal: Activar descarga de consulta
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.
-
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; / -
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.
-
Ejecute la función
f1
. La consulta con la funciónf1
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.
-
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.
-
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ónf1
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.
-
Especifique los nombres de módulo y acción como un valor distinto de
mod1
yact1
. 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.
-
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 conDBMS_PROXY_SQL.ENABLE_READ_ONLY_OFFLOAD
e incluir los parámetrosmodule_name
oaction_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.