Abfragen an aktualisierbare Klone des Elements auslagern
Wenn Sie umfangreiche Lese-Workloads haben, bei denen eine relativ kleine Datenmenge durch mehrere Abfragen gescannt wird, können Sie Abfragen (Lesevorgänge) entweder von einem Elastic Pool Leader oder von einem Elastic Pool Member zu Refreshable Clones auslagern.
- Info zum Auslagern von Abfragen
Stellt Informationen zur Verwendung der Abfrageauslagerung mit einem elastischen Pool bereit und beschreibt die Funktionen zum Auslagern von Abfragen. - Abfrageauslagerung aktivieren
Beschreibt, wie Sie die Abfrageauslagerung für einen Elastic Pool Leader oder für ein Elastic Pool Member aktivieren. - Abfrageauslagerung deaktivieren
Beschreibt, wie Sie die Abfrageauslagerung für einen Elastic Pool Leader oder für ein Elastic Pool Member deaktivieren. - Abfrageauslagerung aus PL/SQL
Wenn die Abfrageauslagerung aktiviert ist, werden Abfragen an aktualisierbare Klone ausgelagert, selbst wenn sie in PL/SQL eingebettet sind. PL/SQL kann Stored Procedures, Funktionen, Packages oder anonyme Blöcke sein. - Abfrageauslagerung aus einem Scheduler-Job
Wenn die Abfrageauslagerung aktiviert ist, werden Abfragen aus einer Oracle Scheduler-Jobaktion in aktualisierbare Klone ausgelagert. Die Abfragen werden ausgelagert, unabhängig davon, ob der Job im Vordergrund oder im Hintergrund ausgeführt wird. - Hinweise zum Auslagern von Abfragen
Bietet zusätzliche Hinweise für die Abfrageauslagerungsfunktion.
Übergeordnetes Thema: Elastische Pools in Autonomous Database verwenden und verwalten
Informationen zum Auslagern von Abfragen
Enthält Informationen zur Verwendung der Abfrageauslagerung mit einem elastischen Pool und beschreibt die Abfrageauslagerungsfunktionen.
Elastic Pool Query Offload bietet Performancevorteile, da mindestens ein aktualisierbarer Klon Abfragen für einen Elastic Pool Leader oder für ein Elastic Pool Member verarbeiten kann. Mit dieser Funktion können Sie auch aktualisierbare Klone hinzufügen, um dem steigenden Abfrage- (Lese-)Bedarf gerecht zu werden. Durch das Auslagern von Abfragen kann Ihre Anwendung horizontal skaliert werden. Dort können Sie aktualisierbare Klone hinzufügen, um die gesamte Systemleistung nach Bedarf zu erhalten und das Volumen Ihrer Abfrageanforderungen zu erfüllen.
Wenn die Abfrageauslagerung aktiviert ist, werden Abfragen entweder an den Elastic Pool Leader oder an ein Elastic Pool Member weitergeleitet, und mindestens ein aktualisierbarer Klon wird zum Kandidaten für die Abfrageauslagerung. Wenn mehr aktualisierbare Klone hinzugefügt werden, passt sich die Abfrageauslagerung dynamisch an, um die neuen Ressourcen zu nutzen.
Ein Anwendungsfall für die Abfrageauslagerung besteht darin, das Feature während Spitzenzeiten zu aktivieren, um die Auslastung des elastischen Poolleiters oder eines elastischen Poolmitglieds zu entziehen. In ruhigen Stunden können Sie die Abfrageauslagerung deaktivieren, um Wartungsvorgänge wie die Aktualisierung der aktualisierbaren Klone auszuführen.
Bei der Abfrageauslagerung werden standardmäßig Abfragen aus jeder Session berücksichtigt. Alternativ können Sie Abfragen aus einer Liste von Sessions auslagern, die Sie nach Modul oder Aktionsname angeben.
In der folgenden Abbildung wird dargestellt, wie Abfragen vom Elastic Pool Leader ausgelagert werden.
In der folgenden Abbildung wird dargestellt, wie Abfragen von einem elastischen Poolmitglied ausgelagert werden.
Die Daten auf den aktualisierbaren Klonen sind basierend auf der letzten Aktualisierungszeit für jeden aktualisierbaren Klon aktuell. Wenn also die Abfrageauslagerung aktiviert ist, führen Sie alle DDL-, DML- und PL/SQL-Vorgänge entweder für den Elastic Pool Leader oder für das Elastic Pool Member aus, das Abfragen auslagert. Nachdem ein aktualisierbarer Klon aktualisiert wurde, werden die Änderungen im aktualisierbaren Klon übernommen.
Weitere Informationen finden Sie unter Aktualisierbare Klone mit Autonomous Database verwenden.
Funktionen zur Abfrageauslagerung
-
Dynamische Hinzufügung: Aktualisierbare Klone können jederzeit als Mitglieder des elastischen Pools hinzugefügt werden. Die Abfrageauslagerung wird dynamisch angepasst, um neue Elemente zu verwenden.
-
Dynamische Entfernung: Aktualisierbare Klone können jederzeit als Mitglieder des Elastic Pool entfernt werden. Die Abfrageauslagerung wird dynamisch angepasst, sodass keine Abfragen mehr an einen aktualisierbaren Klon ausgelagert werden, der aus dem elastischen Pool entfernt wurde.
-
Sessionbasierte Sticky Offload: Die Abfrageauslagerung ist innerhalb einer Session klebrig, d.h. wenn eine Abfrage in einer Session an einen bestimmten Refreshable Clone ausgelagert wurde, verwendet die Abfrageauslagerung denselben Refreshable Clone, um nachfolgende Abfragen in derselben Session auszulagern.
-
One-to-One-Service-Zuordnung: Es gibt eine Eins-zu-Eins-Zuordnung zwischen dem Service, der entweder im Elastic Pool Leader oder im Elastic Pool Member von der ursprünglichen Abfrage verwendet wird, und dem Service, der in einem aktualisierbaren Klon für jede ausgelagerte Abfrage verwendet wird. Beispiel: Wenn eine Sitzung mit dem MEDIUM-Dienst verbunden ist, verwendet die Abfrageauslagerung für diese Sitzung auch den MEDIUM-Dienst auf dem aktualisierbaren Klon.
-
Bestimmen, ob die Session ausgelagert ist: Mit einer
SYS_CONTEXT
-Abfrage können Sie bestimmen, ob eine Session auf dem Elastic Pool Leader oder Member ausgeführt oder auf einen aktualisierbaren Klon ausgelagert wird. -
Abfrage-Offload aus PL/SQL: Abfragen werden in einen aktualisierbaren Klon ausgelagert, selbst wenn sie in PL/SQL eingebettet sind. PL/SQL kann Stored Procedures, Funktionen, Packages oder anonyme Blöcke sein.
-
Abfrageauslagerung aus Scheduler-Job: Abfragen aus einer Oracle Scheduler-Jobaktion werden ausgelagert. Oracle Scheduler-Jobabfragen werden ausgelagert, unabhängig davon, ob der Job im Vordergrund oder im Hintergrund ausgeführt wird.
DBA_PROXY_SQL Ansichten
Verwenden Sie die DBA_PROXY_SQL
-Views DBA_PROXY_SQL_ACTIONS
und DBA_PROXY_SQL_MODULES
, um die Liste der Module oder Aktionen anzuzeigen, die für die Abfrageauslagerung konfiguriert sind. Sie müssen diese Ansichten aus einer Session abfragen, die nicht für die Abfrageauslagerung aktiviert ist.
Übergeordnetes Thema: Abfragen an aktualisierbare Member-Klone ausliefern
Abfrageauslagerung aktivieren
Beschreibt, wie die Abfrageauslagerung für einen Elastic Pool Leader oder für ein Elastic Pool Member aktiviert wird.
Die folgenden Anforderungen gelten für die Aktivierung der Abfrageauslagerung:
-
Sie können die Abfrageauslagerung für einen Elastic Pool Leader oder für ein Elastic Pool Member ohne aktualisierbare Klone aktivieren. Nachdem Sie die Abfrageauslagerung aktiviert haben, können Sie aktualisierbare Klone hinzufügen, und die Abfrageauslagerungsfunktion passt sich dynamisch an, um die aktualisierbaren Klone zu verwenden.
-
Ein aktualisierbarer Klon, der für die Abfrageauslagerung in Frage kommt, muss:
-
Verwenden Sie den Elastic Pool Leader als Quelldatenbank und befinden Sie sich in derselben Region wie der Elastic Pool Leader.
oder
Verwenden Sie ein Elastic Pool Member als Quelldatenbank, und befinden Sie sich in derselben Region wie das Elastic Pool Member.
-
Seien Sie ein elastisches Poolmitglied.
-
So aktivieren Sie die Abfrageauslagerung:
Wenn die Abfrageauslagerung für eine Session aktiviert ist, können Sie den Namen des aktualisierbaren Klons finden, an den Abfragen ausgelagert werden. Beispiel: Führen Sie in der Session diese Abfrage aus:
SELECT sys_context('userenv', 'con_name') FROM DUAL;
Wenn Abfragen nicht an einen aktualisierbaren Klon ausgelagert werden, zeigt diese Abfrage den Namen des Elastic Pool-Leaders (oder des Elastic Pool-Elements, das kein aktualisierbarer Klon ist) an.
Weitere Informationen finden Sie unter SYS_CONTEXT.
Weitere Informationen finden Sie unter Prozedur ENABLE_READ_ONLY_OFFLOAD.
- Abfrageauslagerung für benannte Module oder Aktionen aktivieren
Beschreibt, wie die Abfrageauslagerung für Sessions mit benannten Modulen oder Aktionen aktiviert wird.
Übergeordnetes Thema: Abfragen an aktualisierbare Member-Klone ausliefern
Abfrageauslagerung für benannte Module oder Aktionen aktivieren
Beschreibt, wie Sie die Abfrageauslagerung für Sessions mit benannten Modulen oder Aktionen aktivieren.
So aktivieren Sie die Abfrageauslagerung für bestimmte Sessions nach Modulname oder Aktionsname:
Wenn die Abfrageauslagerung für eine Session aktiviert ist, können Sie in der Session den Namen des aktualisierbaren Klons finden, an den Abfragen ausgelagert werden. Beispiel:
SELECT sys_context('userenv', 'con_name') FROM DUAL;
Wenn Abfragen nicht an einen aktualisierbaren Klon ausgelagert werden, zeigt diese Abfrage den Namen des Elastic Pool-Leaders (oder des Elastic Pool-Elements, das kein aktualisierbarer Klon ist) an.
Weitere Informationen finden Sie unter SYS_CONTEXT.
Die Ansichten DBA_PROXY_SQL_ACTIONS
und DBA_PROXY_SQL_MODULES
zeigen die Liste der Module oder Aktionen an, die für die Abfrageauslagerung konfiguriert sind. Sie müssen diese Ansichten aus einer Session abfragen, die nicht für die Abfrageauslagerung aktiviert ist. Weitere Informationen finden Sie unter DBA_PROXY_SQL Views.
Weitere Informationen finden Sie unter Prozedur ENABLE_READ_ONLY_OFFLOAD.
Übergeordnetes Thema: Abfrageauslagerung aktivieren
Abfrageauslagerung deaktivieren
Beschreibt, wie die Abfrageauslagerung für einen Elastic Pool Leader oder für ein Elastic Pool Member deaktiviert wird.
Deaktivieren Sie auf der Instanz, die Abfragen auslagert, die Abfrageauslagerung.
Beispiel:
EXEC DBMS_PROXY_SQL.DISABLE_READ_ONLY_OFFLOAD
;
Weitere Informationen finden Sie unter Prozedur DISABLE_READ_ONLY_OFFLOAD.
Übergeordnetes Thema: Abfragen an aktualisierbare Member-Klone ausliefern
Abfrage-Offload aus PL/SQL
Wenn die Abfrageauslagerung aktiviert ist, werden Abfragen an aktualisierbare Klone ausgelagert, selbst wenn sie in PL/SQL eingebettet sind. PL/SQL kann Stored Procedures, Funktionen, Packages oder anonyme Blöcke sein.
Beispiel: Sie können demonstrieren, dass eine Abfrage an einen aktualisierbaren Klon ausgelagert wird, wenn Sie die Abfrageauslagerung für ein bestimmtes Modul und eine bestimmte Aktion aktivieren. In diesem Beispiel wird davon ausgegangen, dass die Daten des Leiters aktualisiert wurden und der aktualisierbare Klon noch nicht aktualisiert wurde (die Daten des aktualisierbaren Klons sind daher veraltet und unterschiedlich). In diesem Beispiel können Sie mit unterschiedlichen Werten für den Elastic Pool Leader und den aktualisierbaren Klon sehen, wann Daten vom Leader oder vom aktualisierbaren Klon stammen.
-
Aktivieren Sie die Abfrageauslagerung, und geben Sie die berechtigten Sessions nach Modulname und Aktionsname an. Beispiel: "
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; / -
Definieren Sie die Funktion
f1
, um die Abfrageauslagerung zu testen.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.
-
Starten Sie die Funktion
f1
. Die Abfrage mit Funktionf1
wird auf dem Elastic Pool Leader (oder auf einem Elastic Pool Member, für das die Auslagerungsabfrage aktiviert ist) ausgeführt. Diese Session wird mit nicht angegebenen Modul- und Aktionsnamen ausgeführt, die nicht mit denen übereinstimmen, die in Schritt 1 für die Abfrageauslagerung angegeben wurden.SQL> -- expected to fetch from Elastic Pool Leader and returns value 40 SQL> select f1(3) from dual; F1(3) ---------- 40 1 row selected.
-
Geben Sie den Modulnamen und den Aktionsnamen für die Session an, damit sie mit den in Schritt 1 angegebenen Namen übereinstimmen. Die Abfragen aus dieser Session können jetzt an einen aktualisierbaren Klon ausgelagert werden.
SQL> exec dbms_application_info.set_module('mod1', 'act1'); PL/SQL procedure successfully completed.
-
Führen Sie die Funktion
f1
erneut aus. In diesem Fall entsprechen der Modulname und der Aktionsname den Namen, die in Schritt 1 angegeben sind. Die Abfrage in Funktionf1
wird an einen aktualisierbaren Klon ausgelagert.SQL> -- Expected to fetch from Refreshable Clone and returns value 10 SQL> select f1(3) from dual; F1(3) ---------- 10 1 row selected.
-
Geben Sie die Modul- und Aktionsnamen als einen anderen Namen als
mod1
undact1
an. Die Abfragen aus dieser Session können nicht mehr an einen aktualisierbaren Klon ausgelagert werden, da die Modul- und Aktionsnamen nicht mit den in Schritt 1 angegebenen übereinstimmen.SQL> exec dbms_application_info.set_module('random', 'random'); PL/SQL procedure successfully completed.
-
Führen Sie die Abfrage mit Funktion
f1
aus. Da der Modul- und Aktionsname für diese Session nicht mit dem in Schritt 1 festgelegten übereinstimmen, wird diese Abfrage nicht ausgelagert und wird auf dem Elastic Pool Leader ausgeführt.SQL> -- expected to fetch from Elastic Pool Leader and returns value 40 SQL> select f1(3) from dual; F1(3) ---------- 40 1 row selected.
Übergeordnetes Thema: Abfragen an aktualisierbare Member-Klone ausliefern
Auslagerung aus einem Scheduler-Job abfragen
Wenn die Abfrageauslagerung aktiviert ist, werden Abfragen aus einer Oracle Scheduler-Jobaktion in aktualisierbare Klone ausgelagert. Die Abfragen werden ausgelagert, unabhängig davon, ob der Job im Vordergrund oder im Hintergrund ausgeführt wird.
Beispiel: Wie im vorherigen Beispiel für PL/SQL können Sie demonstrieren, dass eine Abfrage an einen aktualisierbaren Klon ausgelagert wird, wenn Sie die Abfrageauslagerung für einen Oracle Scheduler-Job aktivieren. In diesem Beispiel wird davon ausgegangen, dass die Daten des Leiters aktualisiert wurden und der aktualisierbare Klon noch nicht aktualisiert wurde (die Daten des aktualisierbaren Klons sind daher veraltet und unterschiedlich). In diesem Beispiel können Sie mit unterschiedlichen Werten für den Elastic Pool Leader und den aktualisierbaren Klon sehen, wann Daten vom Leader oder vom aktualisierbaren Klon stammen.
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.
Übergeordnetes Thema: Abfragen an aktualisierbare Member-Klone ausliefern
Hinweise zum Auslagern von Abfragen
Bietet zusätzliche Hinweise für die Abfrageauslagerungsfunktion.
Hinweise zur Abfrageauslagerung:
-
Hinzufügen oder Entfernen eines aktualisierbaren Klons: Wenn ein aktualisierbarer Klon als elastisches Poolmitglied hinzugefügt wird, kann es zu einer Verzögerung von bis zu fünfzehn Minuten kommen, damit die Hinzufügung im Elastic Pool-Leader widergespiegelt wird. Ein neu hinzugefügter aktualisierbarer Klon wird erst dann als Ziel für Abfrageauslagerungen betrachtet, wenn der Leiter Kenntnis vom neu hinzugefügten elastischen Poolmitglied hat.
Wenn ein aktualisierbarer Klon aus dem elastischen Pool entfernt wird, kann es zu einer Verzögerung von bis zu fünfzehn Minuten kommen, damit die Entfernung im elastischen Poolleiter widergespiegelt wird. Der entfernte aktualisierbare Klon wird als Ziel für Abfrageauslagerungen betrachtet, bis der Leader weiß, dass das Element aus dem elastischen Pool entfernt wurde.
-
Aktualisierung von aktualisierbarem Klon: Wenn ein aktualisierbarer Klon aktualisiert wird, können Abfragen, die in den aktualisierbaren Klon ausgelagert werden, verzögert werden.
-
Unterstützung für öffentliche und private Endpunkte: Die Abfrageauslagerung wird für Instanzen auf einem öffentlichen Endpunkt und für Instanzen auf einem privaten Endpunkt unterstützt.
-
Nicht verbundener aktualisierbarer Klon: Wenn eine Verbindung zu einem aktualisierbaren Klon getrennt wird, ist er nicht mehr als Ziel für die Abfrageauslagerung zulässig. Es kann eine Verzögerung von bis zu fünfzehn Minuten für den Leiter des elastischen Pools geben, um zu erkennen, dass ein aktualisierbarer Klon getrennt wurde, und um das Auslagern von Abfragen daran zu stoppen.
Um sicherzustellen, dass ein aktualisierbarer Klon für die Abfrageauslagerung verfügbar bleibt, aktivieren Sie entweder automatische Aktualisierungen oder aktualisieren Sie den aktualisierbaren Klon regelmäßig manuell.
Weitere Informationen finden Sie unter Aktualisierbaren Klon in Autonomous Database aktualisieren.
-
Name und Aktionsname des sensiblen Moduls bei Groß-/Kleinschreibung: Wenn Sie Abfragen aus einer Liste von Sessions auslagern, die Sie nach Modul- oder Aktionsname angeben, beachten Sie bei dem mit
DBMS_APPLICATION_INFO
festgelegten Modulnamen und Aktionsnamen die Groß-/Kleinschreibung.DBMS_PROXY_SQL.ENABLE_READ_ONLY_OFFLOAD
hält sich an dieses Verhalten unter Berücksichtigung der Groß-/Kleinschreibung. Beispiel: Wenn eine Session einen Modulnamen in Kleinbuchstaben oder einen Modulnamen in gemischter Groß-/Kleinschreibung hat, muss die Groß-/Kleinschreibung in den Parameterwerten übereinstimmen, wenn Sie die Abfrageauslagerung mitDBMS_PROXY_SQL.ENABLE_READ_ONLY_OFFLOAD
aktivieren und die Parametermodule_name
oderaction_name
einschließen.Sie können den Modulnamen und den Aktionsnamen für die aktuelle Session mit
DBMS_APPLICATION_INFO.READ_MODULE
prüfen: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; /
-
Typischer Anwendungsfall: Ein Anwendungsfall für die Abfrageauslagerung besteht darin, dass das Feature während der Spitzenzeiten die Auslastung des Elastic Pool Leader (oder des Elastic Pool Member, bei dem die Abfrageauslagerung aktiviert ist) aufheben kann. In ruhigen Stunden können Sie die Abfrageauslagerung deaktivieren, um Wartungsvorgänge wie die Aktualisierung der aktualisierbaren Klone auszuführen.
Übergeordnetes Thema: Abfragen an aktualisierbare Member-Klone ausliefern