SQL-Ausführungspläne mit SPM verwalten
Mit SQL Plan Management (SPM) können Sie sicherstellen, dass die Laufzeitperformance einer SQL-Anweisung aufgrund von SQL-Ausführungsplanänderungen (SQL-Planänderungen) nicht beeinträchtigt wird.
SPM ist ein vorbeugender Mechanismus, mit dem der Oracle-Optimizer SQL-Pläne automatisch verwalten kann. Dadurch wird sichergestellt, dass die Datenbank nur bekannte oder geprüfte Pläne verwendet. Die Performance jeder Datenbankanwendung hängt stark von der konsistenten Ausführung von SQL-Anweisungen ab. Der Ausführungsplan einer SQL-Anweisung kann sich aus einer Vielzahl von Gründen unerwartet ändern, wie z.B. das Erfassen von Optimizer-Statistiken, Änderungen an den Optimizer-Parametern oder Schema- oder Metadatendefinitionen. SPM bietet "Planstabilität" durch ein Framework, das die aktuellen SQL-Pläne inmitten von Umgebungsänderungen behält und dennoch Änderungen nur für bessere Pläne zulässt. Wenn ein neuer SQL-Plan für eine SQL-Anweisung gefunden wird, wird er erst verwendet, nachdem geprüft wurde, ob er eine vergleichbare oder bessere Performance als der aktuelle Plan hat.
SPM verwendet einen proaktiven Mechanismus namens SQL-Planbaseline. Dabei handelt es sich um eine Gruppe akzeptierter SQL-Pläne, die der Oracle-Optimizer für eine SQL-Anweisung verwenden darf. Durch die Verwendung von Baselines verhindert SPM Planregressionen durch Umgebungsänderungen, während der Optimizer bessere Pläne erkennen und verwenden kann.
Die Hauptkomponenten von SPM sind:
- Planerfassung: Die Techniken zum Erfassen und Speichern relevanter Informationen zu Plänen in der SQL-Managementbasis für eine Gruppe von SQL-Anweisungen. Die Erfassung eines Plans beinhaltet, SPM auf den Plan aufmerksam zu machen, und er kann durch Folgendes erfolgen:
- Automatische Planerfassung: Wenn diese Option aktiviert ist, prüft die Datenbank, ob ausgeführte SQL-Anweisungen für die automatische Erfassung zulässig sind. Um für die automatische Planerfassung berechtigt zu sein, muss eine ausgeführte Anweisung wiederholbar sein und darf von keinen Erfassungsfiltern ausgeschlossen werden.
- Manuelle Planerfassung: Vom Benutzer initiiertes Bulk Load vorhandener Ausführungspläne für SQL-Anweisungen in eine SQL-Planbaseline.
- Planauswahl: Die Oracle Optimizer-Fähigkeit, Planänderungen basierend auf der gespeicherten Planhistorie zu erkennen, und die Verwendung von SQL-Planbaselines zur Auswahl von Plänen, um potenzielle Performanceregressionen zu vermeiden.
- Planentwicklung: Der Prozess zum Hinzufügen neuer Pläne zu vorhandenen SQL-Planbaselines, entweder manuell oder automatisch. Der Oracle-Optimizer prüft neue Pläne und fügt sie einer vorhandenen SQL-Planbaseline hinzu.
Weitere Informationen zu SPM und den zugehörigen Komponenten finden Sie unter Überblick über SQL Plan Management in der Dokumentation Oracle Database SQL Tuning Guide.
Um SPM zu verwenden, gehen Sie zur Seite Details der verwalteten Datenbank, und klicken Sie im linken Bereich unter Ressourcen auf SQL-Planverwaltung. In Database Management Diagnostics & Management können Sie die folgenden SPM-Aufgaben ausführen:
- Verwalten Sie SQL-Planbaselines.
- Leiten Sie Aufgaben zum Laden von SQL-Plänen in SQL-Plan-Baselines weiter.
- Führen Sie Konfigurationsaufgaben aus, wie das Aktivieren, Deaktivieren oder Bearbeiten von SQL-Planbaseline, automatischer Planerfassung und automatischen SPM Evolve Advisor-Aufgabenparametern.
Erforderliche Berechtigungen zum Ausführen von SPM-Aufgaben
In der folgenden Tabelle sind SPM-Aufgaben und die erforderlichen Berechtigungen aufgeführt.
Jeder Benutzer, dem die Berechtigung
ADMINISTER SQL MANAGEMENT OBJECT
erteilt wurde, kann das Package DBMS_SPM
ausführen.
Aufgabe | Erforderliche Berechtigungen |
---|---|
Ändern Sie mindestens ein Attribut eines einzelnen SQL-Plans oder alle Pläne, die mit einer SQL-Anweisung verknüpft sind. | EXECUTE -Berechtigung für das Package SYS.DBMS_SPM .
|
Ändern Sie den Grenzwert für den Plattenspeicherplatz für die SQL-Verwaltungsbasis. | EXECUTE -Berechtigung für das Package SYS.DBMS_SPM .
|
Ändern Sie den Aufbewahrungszeitraum für nicht verwendete SQL-Pläne. | EXECUTE -Berechtigung für das Package SYS.DBMS_SPM .
|
Automatische Erfassungsfilter konfigurieren. | EXECUTE -Berechtigung für das Package SYS.DBMS_SPM .
|
Konfigurieren Sie die Advisor-Aufgabe für automatische SPM-Evolution. | EXECUTE -Berechtigung für das Package SYS.DBMS_SPM .
Hinweis: Nur der Benutzer |
Deaktivieren Sie die automatische Planerfassung. | ALTER SYSTEM privilege |
Deaktivieren Sie die Advisor-Aufgabe für automatische SPM-Evolution. | EXECUTE -Berechtigung für das Package SYS.DBMS_AUTO_TASK_ADMIN .
|
Advisor-Aufgabe für automatische SPM-Evolution deaktivieren | EXECUTE -Berechtigung für das Package SYS.DBMS_SPM .
|
Deaktivieren Sie die Verwendung von SQL Plan Baselines, die in der SQL Management Base gespeichert sind. | ALTER SYSTEM privilege |
Löschen Sie einen einzelnen SQL-Plan oder alle mit einer SQL-Anweisung verknüpften Pläne. | EXECUTE -Berechtigung für das Package SYS.DBMS_SPM .
|
Automatische Planerfassung aktivieren. | ALTER SYSTEM privilege |
Aktivieren Sie die Advisor-Aufgabe für automatische SPM-Evolution. | EXECUTE -Berechtigung für das Package SYS.DBMS_AUTO_TASK_ADMIN .
|
Aktivieren Sie den Advisor für häufige automatische SPM-Evolution. | EXECUTE -Berechtigung für das Package SYS.DBMS_SPM .
|
Aktivieren Sie die Verwendung von SQL-Plan-Baselines, die in der SQL Management Base gespeichert sind. | ALTER SYSTEM privilege |
Laden Sie SQL-Pläne aus AWR-Snapshots. | EXECUTE -Berechtigung für die Packages SYS.DBMS_SPM und SYS.DBMS_SCHEDULER .
|
Laden Sie SQL-Pläne aus dem Cursor Cache. | EXECUTE -Berechtigung für die Packages SYS.DBMS_SPM und SYS.DBMS_SCHEDULER .
|
Konfigurationsdetails für SQL-Plan-Baseline anzeigen. | Berechtigung SELECT oder READ für die folgenden Ansichten:
|
Details der SQL-Planbaseline anzeigen. |
|
Zeigen Sie SQL-Plan-Baselines an. | Berechtigung SELECT oder READ für die Ansicht SYS.DBA_SQL_PLAN_BASELINES .
|
Zeigen Sie die Jobs an, die zum Laden von SQL-Plan-Baselines weitergeleitet wurden. | Berechtigung SELECT oder READ für die Ansicht SYS.DBA_SCHEDULER_JOBS .
|
Zeigen Sie die Anzahl der SQL-Planbaselines an, die nach ihren Attributen aggregiert wurden. | Berechtigung SELECT oder READ für die Ansicht SYS.DBA_SQL_PLAN_BASELINES .
|
Zeigen Sie die Anzahl der SQL-Planbaselines an, die nach ihrer letzten Ausführung aggregiert wurden. | Berechtigung SELECT oder READ für die Ansicht SYS.DBA_SQL_PLAN_BASELINES .
|
Zeigen Sie die SQL-Anweisungen aus dem Cursorcache an. | Berechtigung SELECT oder READ für die Ansicht SYS.V_$SQL .
|
SQL-Plan-Baselines verwalten
Sie können SQL-Plan-Baselines auf der Registerkarte SQL-Plan-Baselines verwalten.
Die folgenden Kacheln werden oben auf der Registerkarte SQL-Planbaselines angezeigt:
- Übersicht: Zeigt die Gesamtanzahl der SQL-Planbaselines an und ob SQL-Planbaselines, automatische Planerfassung und automatische SPM Evolve Advisor-Aufgaben aktiviert sind. In der Kachel Übersicht können Sie SQL-Planbaseline, automatische Planerfassung und automatische SPM Evolve Advisor-Aufgaben aktivieren oder deaktivieren, indem Sie auf die Schaltflächen Aktivieren oder Deaktivieren klicken und Datenbankzugangsdaten angeben.
- Letzte Ausführungen des Basisplans: Zeigt die Anzahl der SQL-Planbaselines basierend auf dem Zeitpunkt der letzten Ausführung an. Bewegen Sie in der Kachel Letzte Basisausführungen den Mauszeiger auf das Tortendiagramm, um weitere Details anzuzeigen. Filtern Sie die im Diagramm angezeigten Daten, indem Sie auf die in der Legende aufgeführten Zeitperiodenoptionen klicken.
- SQL-Planstatistiken: Zeigt SQL-Pläne aufgeschlüsselt nach den folgenden Statistiken an:
- Aktiviert: SQL-Pläne, die vom Oracle-Optimizer verwendet werden können.
- Akzeptiert: SQL-Pläne, die sich in SQL-Plan-Baselines befinden und somit vom Oracle-Optimizer verwendet werden können.
- Reproduziert: SQL-Pläne, die vom Oracle-Optimizer reproduziert werden.
- Fest: Akzeptierte SQL-Pläne, die als bevorzugt markiert sind, sodass der Oracle Optimizer nur diese Pläne in der SQL-Planbaseline berücksichtigt.
- Automatisches Löschen: SQL-Pläne, die so konfiguriert sind, dass sie nach dem Standardaufbewahrungszeitraum automatisch gelöscht werden.
Bewegen Sie in der Kachel SQL-Planstatistiken den Mauszeiger auf das horizontale Balkendiagramm, um weitere Details anzuzeigen. Filtern Sie die im Diagramm angezeigten Daten, indem Sie auf die in der Legende aufgeführten Optionen klicken.
Im Abschnitt SQL-Pläne werden die ausgeführten SQL-Pläne mit zusätzlichen Details aufgeführt, z.B. wann ein SQL-Plan zuletzt ausgeführt wurde, ob er aktiviert, akzeptiert, reproduziert usw. ist und seinen Ursprung hat. So wird die Liste gefiltert:
- Klicken Sie auf einen Abschnitt des Tortendiagramms in der Kachel Letzte Basisausführungen, um nach der letzten Ausführungszeit zu filtern.
- Klicken Sie auf einen Balken in der Kachel SQL-Planstatistiken, um die Pläne basierend darauf zu filtern, ob sie aktiviert, akzeptiert, reproduziert, fest oder für das automatische Löschen konfiguriert sind.
Sie können das Suchfeld auch verwenden, um nach SQL-Text, Planname oder Ursprung zu suchen.
Im Abschnitt SQL-Pläne können Sie:
- Klicken Sie auf den SQL-Planlink in der Spalte SQL-Text, um den SQL-Plan anzuzeigen.
- Klicken Sie auf das Symbol Aktionen (
) für eine SQL-Anweisung, und verwenden Sie die folgenden Optionen im Menü:
- SQL-Anweisungsattribute bearbeiten: Klicken Sie auf diese Option, um SQL-Anweisungsattribute zu bearbeiten. Beachten Sie, dass alle Änderungen an den SQL-Anweisungsattributen sich auf alle verknüpften SQL-Pläne auswirken.
- SQL-Anweisung löschen: Klicken Sie auf diese Option, um die SQL-Anweisung zu löschen. Beachten Sie, dass durch Löschen der SQL-Anweisung die verknüpften SQL-Pläne gelöscht werden.
- Klicken Sie auf das Symbol Aktionen (
) für einen SQL-Plan, und verwenden Sie die folgenden Optionen im Menü:
- Details anzeigen: Klicken Sie auf diese Option, um den SQL-Plan anzuzeigen.
- Attribute bearbeiten: Klicken Sie auf diese Option, um die folgenden Attribute des SQL-Plans festzulegen oder zu bearbeiten.
- Automatisches Löschen: Aktivieren Sie dieses Kontrollkästchen, um den SQL-Plan nach dem angegebenen Aufbewahrungszeitraum automatisch zu löschen (zu löschen).
- Aktiviert: Aktivieren Sie dieses Kontrollkästchen, um anzugeben, dass der SQL-Plan ein aktivierter Plan ist.
- Fest: Aktivieren Sie dieses Kontrollkästchen, um anzugeben, dass es sich bei dem SQL-Plan um einen festen Plan handelt.
- Löschen: Klicken Sie auf diese Option, um den SQL-Plan aus der SQL-Plan-Baseline zu löschen.
SQL-Pläne laden
Sie können eine Aufgabe zum Laden von SQL-Plänen in SQL-Planbaselines auf der Registerkarte SQL-Pläne laden weiterleiten.
Sie können SQL-Pläne aus den folgenden Quellen laden:
- AWR: Ladepläne aus Automatic Workload Repository-(AWR-)Snapshots. Weitere Informationen finden Sie unter SQL-Pläne aus AWR laden.
Hinweis
Die Unterstützung für das Laden von SQL-Plänen aus AWR ist nur für Oracle-Datenbanken Version 12.2 und höher verfügbar. - Cursorcache: Laden Sie Pläne aus dem Shared SQL-Bereich (Cursorcache). Weitere Informationen finden Sie unter SQL-Pläne aus Cursorcache laden.
SQL-pläne aus AWR laden
- Klicken Sie im Abschnitt SQL-Planverwaltung auf die Registerkarte SQL-Pläne laden.
- Wählen Sie in der Dropdown-Liste SQL-Plan laden aus die Option AWR aus, und klicken Sie auf Laden.
- Führen Sie im Bereich SQL-Pläne aus AWR laden folgende Schritte aus:
- Geben Sie die folgenden Informationen an, um die Aufgabe im Abschnitt Allgemein weiterzuleiten:
- Aufgabenname: Prüfen Sie den automatisch ausgefüllten Namen der Aufgabe, und nehmen Sie bei Bedarf Änderungen vor.
- Beschreibung: Geben Sie optional eine Beschreibung für die Aufgabe ein.
- Snapshot beginnen: Geben Sie die Nummer des ersten Snapshots im Bereich ein, und wählen Sie ihn aus der Dropdown-Liste aus.
- End-Snapshot: Geben Sie die Nummer des letzten Snapshots im Bereich ein, und wählen Sie ihn aus der Dropdown-Liste aus.
- SQL-Textfilter: Geben Sie optional SQL-Text ein, um nur die Pläne zu laden, die den Filterkriterien entsprechen. Wenn kein Wert angegeben wird, werden alle Pläne innerhalb des angegebenen Snapshot-Bereichs in AWR ausgewählt.
- Planattribute: Aktivieren Sie die folgenden Kontrollkästchen, um Planattribute anzugeben:
- Fest: Aktivieren Sie dieses Kontrollkästchen, um anzugeben, dass es sich bei den geladenen Plänen um feste Pläne handelt.
- Aktiviert: Aktivieren Sie dieses Kontrollkästchen, um anzugeben, dass die geladenen Pläne aktiv sind.
- Wählen Sie eine der verfügbaren Optionen in der Dropdown-Liste Zugangsdatentyp im Abschnitt Zugangsdaten aus, um Datenbankzugangsdaten für die Verbindung zur verwalteten Datenbank anzugeben. Informationen zu Zugangsdatentypen finden Sie unter Diagnose- und Verwaltungsaufgaben mit Zugangsdaten ausführen.
- Klicken Sie auf Änderungen speichern.
- Geben Sie die folgenden Informationen an, um die Aufgabe im Abschnitt Allgemein weiterzuleiten:
SQL-Pläne aus Cursor Cache laden
- Klicken Sie im Abschnitt SQL-Planverwaltung auf die Registerkarte SQL-Pläne laden.
- Wählen Sie in der Dropdown-Liste SQL-Plan laden aus die Option Cursorcache aus, und klicken Sie auf Laden.
- Führen Sie im Bereich SQL-Pläne aus dem Cursor Cache laden folgende Schritte aus:
- Geben Sie die folgenden Informationen an, um die Aufgabe im Abschnitt Allgemein weiterzuleiten:
- Aufgabenname: Prüfen Sie den automatisch ausgefüllten Namen der Aufgabe, und nehmen Sie bei Bedarf Änderungen vor.
- Beschreibung: Geben Sie optional eine Beschreibung für die Aufgabe ein.
- Baseline abrufen mit: Verwenden Sie eine der folgenden Optionen, um den SQL-Plan zu laden:
- SQL-ID: Aktivieren Sie dieses Optionsfeld, um die SQL-Anweisung im Cursorcache zu identifizieren, deren SQL-Pläne Sie laden möchten. Bei Auswahl dieses Optionsfeldes werden die folgenden Felder angezeigt:
- SQL-ID: Geben Sie die SQL-Anweisungs-ID ein.
- Plan-Hashwert: Geben Sie optional den Plan-Hashwert des SQL-Plans ein. Wenn kein Wert angegeben wird, werden alle Pläne im Cursorcache für die SQL-Anweisung geladen.
- Parameter zur Identifizierung der SQL-Planbaseline, in die die Pläne geladen werden: Wählen Sie optional entweder die Optionsfelder SQL-Text oder SQL-Handle aus, und geben Sie den Parameterwert in das Feld Parameterwert ein. Wenn kein Wert angegeben wird, wird der Text der identifizierten SQL-Anweisung aus dem Cursorcache extrahiert und zur Identifizierung der SQL-Planbaseline verwendet, in die die Pläne geladen werden. Wenn die SQL-Planbaseline nicht vorhanden ist, wird sie erstellt.
- Filtername: Aktivieren Sie dieses Optionsfeld, um den Filter zur Identifizierung einer SQL-Anweisung oder einer Gruppe von SQL-Anweisungen anzugeben. Bei Auswahl dieses Optionsfeldes werden die folgenden Felder angezeigt:
- Filtername: Wählen Sie einen Filternamen aus der Dropdown-Liste.
- Filterwert: Geben Sie den entsprechenden Filterwert ein.
- SQL-ID: Aktivieren Sie dieses Optionsfeld, um die SQL-Anweisung im Cursorcache zu identifizieren, deren SQL-Pläne Sie laden möchten. Bei Auswahl dieses Optionsfeldes werden die folgenden Felder angezeigt:
- Planattribute: Aktivieren Sie die folgenden Kontrollkästchen, um Planattribute anzugeben:
- Fest: Aktivieren Sie dieses Kontrollkästchen, um anzugeben, dass es sich bei den geladenen Plänen um feste Pläne handelt. Ein fester Plan ist ein akzeptierter Plan, der als bevorzugt gekennzeichnet ist, sodass der Optimizer nur die festen Pläne in der Baseline berücksichtigt.
- Aktiviert: Aktivieren Sie dieses Kontrollkästchen, um anzugeben, dass die geladenen Pläne aktiv sind. Aktivierte Pläne können vom Oracle-Optimizer verwendet werden.
- Wählen Sie eine der verfügbaren Optionen in der Dropdown-Liste Zugangsdatentyp im Abschnitt Zugangsdaten aus, um Datenbankzugangsdaten für die Verbindung zur verwalteten Datenbank anzugeben. Informationen zu Zugangsdatentypen finden Sie unter Diagnose- und Verwaltungsaufgaben mit Zugangsdaten ausführen.
- Klicken Sie auf Änderungen speichern.
- Geben Sie die folgenden Informationen an, um die Aufgabe im Abschnitt Allgemein weiterzuleiten:
SPM-Konfigurationsaufgaben ausführen
Sie können SPM-Konfigurationsaufgaben wie das Aktivieren oder Deaktivieren von SQL-Planbaseline- und automatischen Planerfassungsparametern auf der Registerkarte Konfiguration ausführen.
Die Registerkarte Konfiguration enthält die folgenden Hauptabschnitte:
- SQL-Planbaseline: Stellt die Optionen zum Aktivieren oder Deaktivieren der SQL-Planbaseline bereit. Wenn die SQL-Planbaseline aktiviert ist, werden die folgenden Parameter in diesem Abschnitt angezeigt. Um Änderungen daran vorzunehmen, klicken Sie auf Bearbeiten:
- Planaufbewahrung (Wochen): Die Anzahl der Wochen, die nicht verwendete SQL-Pläne beibehalten werden müssen, bevor sie gelöscht werden. Der Zeitraum kann zwischen 5 und 523 Wochen liegen, und der Standardwert beträgt 53 Wochen.
- Speicherplatzbudget (%): Der maximale Prozentsatz von
SYSAUX
Speicherplatz, den die SQL-Managementbasis verwenden kann. Der zulässige Bereich für diesen Grenzwert liegt zwischen 1% und 50%, und der Standardwert beträgt 10%.
- Automatische Planerfassung: Stellt die Optionen zum Aktivieren oder Deaktivieren der automatischen Planerfassung bereit. Mit einem automatischen Filter können Sie nur die gewünschten Anweisungen erfassen und nicht kritische Anweisungen ausschließen. Diese Technik spart Speicherplatz im Tablespace
SYSAUX
.Wenn die automatische Planerfassung aktiviert ist, werden in diesem Abschnitt die folgenden Filter angezeigt. Um Änderungen vorzunehmen, klicken Sie auf Bearbeiten:
- Einzuschließende Aktionen oder Auszuschließende Aktionen: Die Aktionen, die bei der automatischen Erfassung einbezogen oder ausgeschlossen werden sollen.
- Einzuschließende Module oder Auszuschließende Module: Die Module, die bei der automatischen Erfassung ein- oder ausgeschlossen werden sollen.
- Einzuschließende Parsing-Schemanamen oder Auszuschließende Parsing-Schemanamen: Die Parsing-Schemanamen, die in die automatische Erfassung aufgenommen oder daraus ausgeschlossen werden sollen.
- Einzuschließender SQL-Text oder Auszuschließender SQL-Text: Der SQL-Text, der in die automatische Erfassung aufgenommen oder daraus ausgeschlossen werden soll.
Hinweis
Die selektive Planerfassung (Filter) ist nur für Oracle-Datenbanken ab Version 12.2 verfügbar. - Advisor-Aufgabe für automatische SPM-Evolution: Enthält die Optionen zum Aktivieren oder Deaktivieren der Advisor-Aufgabe für die automatische SPM-Evolution. Wenn die Aufgabe "Automatic SPM Evolve Advisor" aktiviert ist, werden die folgenden Parameter in diesem Abschnitt angezeigt. Um Änderungen daran vorzunehmen, klicken Sie auf Bearbeiten:
- Advisor Aufgabe für die automatische SPM-Evolution: Zeigt an, ob die Advisor-Aufgabe für die automatische SPM-Evolution häufiger aktiviert ist.
- Alternative Planquellen: Die Quellen für die Suche nach zusätzlichen Plänen.
- Alternative Plan-Baselines: Die alternativen Pläne, die geladen werden müssen. Der Standardwert ist Vorhanden.
- Limit alternativer Pläne: Die maximale Anzahl an Plänen, die insgesamt geladen werden sollen. Der Standardwert ist Unbegrenzt.
- Pläne automatisch akzeptieren: Zeigt an, ob die empfohlenen Pläne automatisch akzeptiert werden müssen.
- Zulässiges Zeitlimit (s): Das globale Zeitlimit in Sekunden. Dies ist die zulässige Gesamtzeit für die Aufgabe.
Hinweis
- Für autonome Datenbanken können keine Konfigurationsaufgaben für die SQL-Planverwaltung ausgeführt werden.
SYSDBA
-Berechtigungen sind erforderlich, um die Parameter der Aufgabe "Automatischer SPM Evolve Advisor" zu bearbeiten.- Aufgabe "Automatischer SPM Evolve Advisor" ist nur für Oracle-Datenbanken Version 12.2 und höher verfügbar.
- High-frequency Automatic SPM Evolve Advisor-Aufgabe ist nur für Oracle Databases 19c und höher verfügbar, die auf der Oracle Exadata-Plattform ausgeführt werden.