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 in aktualisierbare Klone ausgelagert, selbst wenn sie in PL/SQL eingebettet sind. Bei PL/SQL kann es sich um Stored Procedures, Funktionen, Packages oder anonyme Blöcke handeln. - 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 das Feature zum Auslagern von Abfragen.
Übergeordnetes Thema: Variable Pools in Autonomous Database verwenden und verwalten
Informationen zum Auslagern von Abfragen
Stellt Informationen zur Verwendung von Abfrageauslagerungen mit einem elastischen Pool bereit 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.
Standardmäßig berücksichtigt die Abfrageauslagerung Abfragen aus jeder Session. 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.
Abfrageauslagerungsfunktionen
-
Dynamisches Hinzufügen: 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 elastischen Pools entfernt werden. Die Abfrageauslagerung wird dynamisch angepasst, um das Auslagern von Abfragen in einen aktualisierbaren Klon zu stoppen, der aus dem elastischen Pool entfernt wurde.
-
Sessionbasierte Sticky-Auslagerung: Die Abfrageauslagerung ist innerhalb einer Session Sticky. Wenn also eine Abfrage in einer Session in einen bestimmten aktualisierbaren Klon ausgelagert wurde, verwendet die Abfrageauslagerung denselben aktualisierbaren Klon, 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. -
Abfrageauslagerung aus PL/SQL: Abfragen werden in einen aktualisierbaren Klon ausgelagert, selbst wenn sie in PL/SQL eingebettet sind. Bei PL/SQL kann es sich um Stored Procedures, Funktionen, Packages oder anonyme Blöcke handeln.
-
Aus Scheduler-Job abfragen: Abfragen aus Oracle Scheduler-Jobaktionen 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
-Ansichten 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 Views 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.
Für die Aktivierung der Abfrageauslagerung sind folgende Voraussetzungen erforderlich:
-
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:
-
Führen Sie den Elastic Pool als Quelldatenbank an, 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.
-
Ein elastisches Poolmitglied sein.
-
So aktivieren Sie die Abfrageauslagerung:
Wenn das Auslagern von Abfragen für eine Session aktiviert ist, finden Sie den Namen des aktualisierbaren Klons, in den Abfragen ausgelagert werden. Beispiel: Führen Sie aus der Session die folgende 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 das Auslagern von Abfragen für eine Session aktiviert ist, finden Sie in der Session den Namen des aktualisierbaren Klons, in den Abfragen ausgelagert werden. Beispiele:
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.
In den Views DBA_PROXY_SQL_ACTIONS
und DBA_PROXY_SQL_MODULES
wird die Liste der Module oder Aktionen angezeigt, die für die Abfrageauslagerung konfiguriert sind. Sie müssen diese Views 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.
Beispiele:
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
Abfrageauslagerung aus PL/SQL
Wenn das Auslagern von Abfragen aktiviert ist, werden Abfragen an aktualisierbare Klone ausgelagert, selbst wenn sie in PL/SQL eingebettet sind. Bei PL/SQL kann es sich um Stored Procedures, Funktionen, Packages oder anonyme Blöcke handeln.
Beispiel: Sie können zeigen, dass eine Abfrage in einen aktualisierbaren Klon ausgelagert wird, wenn Sie die Abfrageauslagerung für ein bestimmtes Modul und eine bestimmte Aktion aktivieren. In diesem Beispiel wird angenommen, 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
zum Testen der Abfrageauslagerung.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 in Schritt 1 angegebenen Namen. Die Abfrage in Funktionf1
wird in 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 den Modul- und Aktionsnamen als etwas anderes als
mod1
undact1
an. Die Abfragen aus dieser Session können nicht mehr in einen aktualisierbaren Klon ausgelagert werden, da das Modul und die 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 der Funktion
f1
aus. Da der Modul- und Aktionsname für diese Session nicht mit den in Schritt 1 festgelegten Werten übereinstimmt, wird diese Abfrage nicht ausgelagert und auf der Elastic Pool-Führungslinie 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 zeigen, dass eine Abfrage in einen aktualisierbaren Klon ausgelagert wird, wenn Sie die Abfrageauslagerung für einen Oracle Scheduler-Job aktivieren. In diesem Beispiel wird angenommen, 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
Enthält zusätzliche Hinweise zur Abfrageauslagerungsfunktion.
Hinweise zum Auslagern von Abfragen:
-
Hinzufügen oder Entfernen eines aktualisierbaren Klons: Wenn ein aktualisierbarer Klon als elastisches Pool-Element hinzugefügt wird, kann es zu einer Verzögerung von bis zu fünfzehn Minuten kommen, bis das Hinzufügen im Elastic Pool-Leader wiedergegeben wird. Ein neu hinzugefügter aktualisierbarer Klon wird erst dann als Ziel für das Ausladen von Abfragen betrachtet, wenn dem Anführer das neu hinzugefügte elastische Poolmitglied bekannt ist.
Wenn ein aktualisierbarer Klon aus dem elastischen Pool entfernt wird, kann es ebenfalls zu einer Verzögerung von bis zu fünfzehn Minuten kommen, bis die Entfernung im elastischen Poolführer widergespiegelt wird. Der entfernte aktualisierbare Klon wird als Ziel für Abfrageauslagerungen betrachtet, bis der Anführer weiß, dass das Element aus dem elastischen Pool entfernt wurde.
-
Aktualisierung des aktualisierbaren Klons: 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 ein aktualisierbarer 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 geben, damit der Elastic Pool Leader erkennt, dass ein aktualisierbarer Klon getrennt wurde und keine Abfragen mehr an ihn ausgelagert werden.
Um sicherzustellen, dass ein aktualisierbarer Klon für das Auslagern von Abfragen 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 Moduls "Groß-/Kleinschreibung beachten": Wenn Sie Abfragen aus einer Liste von Sessions auslagern, die Sie nach Modul- oder Aktionsname angeben, werden der Modulname und der Aktionsname, die mit
DBMS_APPLICATION_INFO
festgelegt sind, zwischen Groß- und Kleinschreibung unterschieden.DBMS_PROXY_SQL.ENABLE_READ_ONLY_OFFLOAD
beachtet dieses Verhalten, bei dem die Groß-/Kleinschreibung beachtet wird. Beispiel: Wenn eine Session einen Modulnamen in Kleinbuchstaben oder einen Modulnamen mit gemischter Groß-/Kleinschreibung enthält, 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