Décharger les interrogations sur les clones actualisables de membre
Lorsque vous avez de lourdes charges de travail de lecture, où une quantité relativement faible de données est balayée par plusieurs interrogations, vous pouvez décharger les interrogations (lectures) soit d'un chef de groupe élastique, soit d'un membre de groupe élastique vers des clones actualisables.
- À propos du déchargement d'interrogation
Fournit des informations sur l'utilisation du déchargement d'interrogation avec un groupe élastique et décrit les fonctions de déchargement d'interrogation. - Activer le déchargement d'interrogation
Décrit comment activer le déchargement d'interrogation pour un responsable de groupe élastique ou pour un membre de groupe élastique. - Désactiver le déchargement d'interrogation
Décrit comment désactiver le déchargement d'interrogation pour un responsable de groupe élastique ou pour un membre de groupe élastique. - Déchargement d'interrogation à partir de PL/SQL
Lorsque le déchargement d'interrogation est activé, les interrogations sont déchargées vers des clones actualisables même si elles sont intégrées dans PL/SQL. Le code PL/SQL peut être stocké sous forme de procédures, de fonctions, de packages ou de blocs anonymes. - Déchargement d'interrogation à partir d'une tâche de programmateur
Lorsque le déchargement d'interrogation est activé, les interrogations à partir d'une action de tâche Oracle Scheduler sont déchargées vers des clones actualisables. Les interrogations sont déchargées, que le travail s'exécute au premier plan ou en arrière-plan. - Notes pour le déchargement des interrogations
Fournit des notes supplémentaires pour la fonction de déchargement des interrogations.
À propos du déchargement d'interrogation
Fournit des informations sur l'utilisation du déchargement d'interrogation avec un groupe élastique et décrit les fonctions de déchargement d'interrogation.
Le déchargement des interrogations de groupe élastique offre des avantages en matière de performance en permettant à un ou plusieurs clones actualisables de traiter les interrogations pour un chef de groupe élastique ou pour un membre de groupe élastique. Cette fonction vous permet également d'ajouter des clones actualisables pour répondre à une demande croissante d'interrogation (lecture). Le déchargement des interrogations permet à votre application de faire une mise à l'échelle horizontale, où vous pouvez ajouter des clones actualisables pour assurer la performance globale du système, si nécessaire, pour répondre au volume de vos demandes d'interrogation.
Lorsque le déchargement des interrogations est activé, les interrogations sont soumises au chef de groupe élastique ou à un membre de groupe élastique et un ou plusieurs clones actualisables disponibles deviennent des candidats pour le déchargement des interrogations. En outre, lorsque d'autres clones actualisables sont ajoutés, le déchargement des interrogations s'ajuste dynamiquement pour utiliser les nouvelles ressources.
Un cas d'utilisation pour le déchargement des interrogations est d'activer la fonction pendant les heures de pointe pour retirer le chargement du chef de groupe élastique ou d'un membre de groupe élastique. Pendant les heures tranquilles, vous pouvez désactiver le déchargement des interrogations pour effectuer des opérations de maintenance telles que l'actualisation des clones actualisables.
Par défaut, le déchargement des interrogations prend en compte les interrogations de n'importe quelle session. Vous pouvez également décharger les interrogations d'une liste de sessions que vous spécifiez par nom de module ou d'action.
La figure suivante illustre le déchargement des interrogations à partir du leader du pool élastique.
La figure suivante illustre le déchargement des interrogations à partir d'un membre de pool élastique.
Les données des clones actualisables sont à jour en fonction de l'heure de la dernière actualisation pour chaque clone actualisable. Cela signifie que lorsque le déchargement des interrogations est activé, vous effectuez toutes les opérations LDD, LMD et PL/SQL sur le leader du pool élastique ou sur le membre du pool élastique qui décharge les interrogations. Ensuite, après l'actualisation d'un clone actualisable, les modifications sont répercutées sur le clone actualisable.
Pour plus d'informations, voir Utiliser des clones actualisables avec une base de données d'IA autonome.
Caractéristiques de déchargement d'interrogation
-
Ajout dynamique : Les clones actualisables peuvent être ajoutés en tant que membres du groupe élastique à tout moment. Le déchargement des interrogations s'ajuste dynamiquement pour utiliser de nouveaux membres.
-
Suppression dynamique : Les clones actualisables peuvent être supprimés en tant que membres du groupe élastique à tout moment. Le déchargement des interrogations s'ajuste dynamiquement pour arrêter le déchargement des interrogations vers un clone actualisable qui a été supprimé du groupe élastique.
-
Déchargement persistant basé sur la session : Le déchargement d'interrogation est persistant dans une session, ce qui signifie que si une interrogation d'une session a été déchargée vers un clone actualisable particulier, le déchargement d'interrogation utilise le même clone actualisable pour décharger les interrogations suivantes dans la même session.
-
Mappage un-à-un du service : Il existe un mappage un-à-un entre le service utilisé dans le chef du groupe élastique ou le membre du groupe élastique par l'interrogation initiale et le service utilisé dans un clone actualisable pour toute interrogation déchargée. Par exemple, si une session est connectée au service MEDIUM, le déchargement des interrogations pour cette session utilise également le service MEDIUM sur le clone actualisable.
-
Déterminer si la session est déchargée : À l'aide d'une interrogation
SYS_CONTEXT, vous pouvez déterminer si une session est exécutée sur le responsable ou le membre du groupe élastique, ou si elle est déchargée sur un clone actualisable. -
Déchargement d'interrogation à partir de PL/SQL : Les interrogations sont déchargées vers un clone actualisable même si elles sont intégrées dans PL/SQL. Le code PL/SQL peut être stocké sous forme de procédures, de fonctions, de packages ou de blocs anonymes.
-
Déchargement d'interrogation à partir d'une tâche de programmateur : Les interrogations à partir d'une action de tâche Oracle Scheduler sont déchargées. Les interrogations de travail Oracle Scheduler sont déchargées, que le travail s'exécute au premier plan ou en arrière-plan.
Vues DBA_PROXY_SQL
Utilisez les vues DBA_PROXY_SQL DBA_PROXY_SQL_ACTIONS et DBA_PROXY_SQL_MODULES pour afficher la liste des modules ou des actions configurés pour le déchargement d'interrogation. Vous devez interroger ces vues à partir d'une session qui n'est pas activée pour le déchargement des interrogations.
Rubrique parent : Décharger les interrogations sur les clones actualisables de membre
Activer le déchargement d'interrogation
Décrit comment activer le déchargement des interrogations pour un responsable de groupe élastique ou pour un membre de groupe élastique.
Voici les conditions requises pour activer le déchargement des interrogations :
-
Vous pouvez activer le déchargement des interrogations pour un responsable de groupe élastique ou pour un membre de groupe élastique sans clones actualisables. Après avoir activé le déchargement des interrogations, vous pouvez ajouter des clones actualisables et la fonction de déchargement des interrogations s'ajuste dynamiquement pour utiliser les clones actualisables.
-
Un clone actualisable qui est candidat pour le déchargement d'interrogation doit :
-
Avoir le chef de groupe élastique comme base de données source et être dans la même région que le chef de groupe élastique.
ou
Avoir un membre de pool élastique comme base de données source et être dans la même région que le membre de pool élastique.
-
Soyez un membre élastique du pool.
-
Pour activer le déchargement d'interrogation :
Lorsque le déchargement des interrogations est activé pour une session, vous pouvez trouver le nom du clone actualisable vers lequel les interrogations sont déchargées. Par exemple, à partir de la session, exécutez cette interrogation :
SELECT sys_context('userenv', 'con_name') FROM DUAL;
Si les interrogations ne sont pas déchargées vers un clone actualisable, cette interrogation affiche le nom du chef de groupe élastique (ou du membre de groupe élastique qui n'est pas un clone actualisable).
Pour plus d'informations, voir SYS_CONTEXT.
Pour plus d'informations, voir ProcédureENABLE_READ_ONLY_OFFLOAD.
- Activer le déchargement des interrogations pour les modules ou actions nommés
Décrit comment activer le déchargement des interrogations pour les sessions avec des modules ou des actions nommés.
Rubrique parent : Décharger les interrogations sur les clones actualisables de membre
Activer le déchargement des interrogations pour les modules ou actions nommés
Décrit comment activer le déchargement des interrogations pour les sessions avec des modules ou des actions nommés.
Pour activer le déchargement des interrogations pour des sessions spécifiques par nom de module ou par nom d'action :
Lorsque le déchargement des interrogations est activé pour une session, à partir de cette session, vous pouvez trouver le nom du clone actualisable vers lequel les interrogations sont déchargées. Exemple :
SELECT sys_context('userenv', 'con_name') FROM DUAL;
Si les interrogations ne sont pas déchargées vers un clone actualisable, cette interrogation affiche le nom du chef de groupe élastique (ou du membre de groupe élastique qui n'est pas un clone actualisable).
Pour plus d'informations, voir SYS_CONTEXT.
Les vues DBA_PROXY_SQL_ACTIONS et DBA_PROXY_SQL_MODULES affichent la liste des modules ou des actions configurés pour le déchargement des interrogations. Vous devez interroger ces vues à partir d'une session qui n'est pas activée pour le déchargement des interrogations. Pour plus d'informations, voir Vues DBA_PROXY_SQL.
Pour plus d'informations, voir ProcédureENABLE_READ_ONLY_OFFLOAD.
Rubrique parent : Activer le déchargement d'interrogation
Désactiver le déchargement d'interrogation
Décrit comment désactiver le déchargement des interrogations pour un responsable de groupe élastique ou pour un membre de groupe élastique.
Sur l'instance qui décharge les interrogations, désactivez le déchargement des interrogations.
Exemple :
EXEC DBMS_PROXY_SQL.DISABLE_READ_ONLY_OFFLOAD;
Pour plus d'informations, voir ProcédureDISABLE_READ_ONLY_OFFLOAD.
Rubrique parent : Décharger les interrogations sur les clones actualisables de membre
Déchargement des interrogations à partir de code PL/SQL
Lorsque le déchargement des interrogations est activé, les interrogations sont déchargées vers des clones actualisables même si elles sont intégrées dans du code PL/SQL. Le code PL/SQL peut être stocké sous forme de procédures, de fonctions, de packages ou de blocs anonymes.
Par exemple, vous pouvez démontrer qu'une interrogation est déchargée vers un clone actualisable lorsque vous activez le déchargement d'interrogation pour un module et une action spécifiques. Dans cet exemple, supposons que les données du chef de file ont été mises à jour et que le clone actualisable n'a pas encore été mis à jour (les données du clone actualisable sont donc obsolètes et différentes). Dans cet exemple, avec des valeurs différentes pour le chef de groupe élastique et le clone actualisable, vous pouvez voir quand les données proviennent du chef ou du clone actualisable.
-
Activez le déchargement des interrogations et spécifiez les sessions admissibles par nom de module et nom d'action. Par exemple, '
mod1', 'act1'.DECLARE mod_values clob := to_clob('["mod1"]'); act_values clob := to_clob('["act1"]'); BEGINDBMS_PROXY_SQL.ENABLE_READ_ONLY_OFFLOAD( module_name => mod_values, action_name => act_values); END; / -
Définissez la fonction
f1pour tester le déchargement de l'interrogation.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. -
Exécutez la fonction
f1. L'interrogation avec la fonctionf1s'exécute sur le chef de groupe élastique (ou sur un membre de groupe élastique pour lequel l'interrogation de déchargement est activée). Cette session s'exécute avec des noms de module et d'action non spécifiés qui ne correspondent pas à ceux spécifiés pour le déchargement d'interrogation à l'étape 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. -
Spécifiez le nom du module et le nom de l'action pour la session afin qu'ils correspondent aux noms spécifiés à l'étape 1. Les interrogations de cette session peuvent désormais être déchargées vers un clone actualisable.
SQL> exec dbms_application_info.set_module('mod1', 'act1'); PL/SQL procedure successfully completed. -
Exécutez de nouveau la fonction
f1. Dans ce cas, le nom du module et le nom de l'action correspondent aux noms spécifiés à l'étape 1. L'interrogation de la fonctionf1est déchargée dans un clone actualisable.SQL> -- Expected to fetch from Refreshable Clone and returns value 10 SQL> select f1(3) from dual; F1(3) ---------- 10 1 row selected. -
Spécifiez les noms de module et d'action comme autre chose que
mod1etact1. Les interrogations de cette session ne peuvent plus être déchargées vers un clone actualisable, car les noms de module et d'action ne correspondent pas à ceux spécifiés à l'étape 1.SQL> exec dbms_application_info.set_module('random', 'random'); PL/SQL procedure successfully completed. -
Exécutez l'interrogation avec la fonction
f1. Comme le nom du module et de l'action pour cette session ne correspondent pas à ceux définis à l'étape 1, cette interrogation n'est pas déchargée et s'exécute sur le leader du pool élastique.SQL> -- expected to fetch from Elastic Pool Leader and returns value 40 SQL> select f1(3) from dual; F1(3) ---------- 40 1 row selected.
Rubrique parent : Décharger les interrogations sur les clones actualisables de membre
Déchargement d'interrogation à partir d'une tâche de programmateur
Lorsque le déchargement des interrogations est activé, les interrogations d'une action de tâche Oracle Scheduler sont déchargées vers des clones actualisables. Les interrogations sont déchargées, que le travail s'exécute au premier plan ou en arrière-plan.
Par exemple, comme dans l'exemple précédent pour PL/SQL, vous pouvez démontrer qu'une interrogation est déchargée vers un clone actualisable lorsque vous activez le déchargement des interrogations pour un travail Oracle Scheduler. Dans cet exemple, supposons que les données du chef de file ont été mises à jour et que le clone actualisable n'a pas encore été mis à jour (les données du clone actualisable sont donc obsolètes et différentes). Dans cet exemple, avec des valeurs différentes pour le chef de groupe élastique et le clone actualisable, vous pouvez voir quand les données proviennent du chef ou du clone actualisable.
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.Rubrique parent : Décharger les interrogations sur les clones actualisables de membre
Notes pour le déchargement des interrogations
Fournit des notes supplémentaires pour la fonction de déchargement des interrogations.
Notes pour le déchargement d'interrogation :
-
Ajout ou suppression d'un clone actualisable : Lorsqu'un clone actualisable est ajouté en tant que membre du groupe élastique, il peut y avoir un délai allant jusqu'à quinze minutes pour que l'ajout soit reflété dans le chef du groupe élastique. Un clone actualisable nouvellement ajouté n'est pas considéré comme une cible pour les décharges d'interrogation tant que le responsable n'a pas connaissance du membre de groupe élastique nouvellement ajouté.
De même, lorsqu'un clone actualisable est retiré du pool élastique, il peut y avoir un délai de quinze minutes maximum pour que le retrait soit reflété dans le leader du pool élastique. Le clone actualisable supprimé est considéré comme une cible pour les décharges d'interrogation jusqu'à ce que le responsable sache que le membre a été supprimé du pool élastique.
-
Actualiser le clone actualisable : Lorsqu'un clone actualisable est en cours d'actualisation, les interrogations déchargées vers le clone actualisable peuvent être retardées.
-
Prise en charge des points d'extrémité publics et privés : Le déchargement d'interrogation est pris en charge pour les instances d'un point d'extrémité public et pour les instances d'un point d'extrémité privé.
-
Clone actualisable déconnecté : Si un clone actualisable est déconnecté, il n'est plus admissible en tant que cible pour le déchargement d'interrogation. Il peut y avoir un délai allant jusqu'à quinze minutes pour que le chef de groupe élastique détecte qu'un clone actualisable a été déconnecté et cesse de lui décharger des interrogations.
Pour vous assurer qu'un clone actualisable reste disponible pour le déchargement des interrogations, activez les actualisations automatiques ou actualisez manuellement périodiquement le clone actualisable.
Pour plus d'informations, voir Actualiser un clone actualisable sur une base de données d'IA autonome.
-
Nom du module sensible à la casse et nom de l'action : Lorsque vous déchargez des interrogations à partir d'une liste de sessions que vous spécifiez par nom de module ou d'action, le nom du module et le nom de l'action définis avec
DBMS_APPLICATION_INFOsont sensibles à la casse.DBMS_PROXY_SQL.ENABLE_READ_ONLY_OFFLOADrespecte ce comportement sensible à la casse. Par exemple, lorsqu'une session a un nom de module en minuscules ou un nom de module en majuscules et minuscules, la casse doit correspondre dans les valeurs de paramètre lorsque vous activez le déchargement d'interrogation avecDBMS_PROXY_SQL.ENABLE_READ_ONLY_OFFLOADet que vous incluez les paramètresmodule_nameouaction_name.Vous pouvez vérifier le nom du module et le nom de l'action pour la session courante à l'aide de
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; / -
Cas d'utilisation type : Un cas d'utilisation pour le déchargement d'interrogation est d'activer la fonction pendant les heures de pointe pour retirer le chargement du responsable du groupe élastique (ou hors du membre du groupe élastique où le déchargement d'interrogation est activé). Pendant les heures tranquilles, vous pouvez désactiver le déchargement des interrogations pour effectuer des opérations de maintenance telles que l'actualisation des clones actualisables.
Rubrique parent : Décharger les interrogations sur les clones actualisables de membre

