suchen
HeimDatenbankOracleSo zeigen Sie den Oracle-Ausführungsplan an

So zeigen Sie den Oracle-Ausführungsplan an

Was ist ein Ausführungsplan?

SQL ist eine dumme Sprache. Jede Bedingung ist eine Voraussetzung für unterschiedliche Ausführungspläne. Oracle muss eine Wahl treffen und kann jeweils nur einen Zugriffspfad haben. Der Ausführungsplan ist eine Beschreibung des Ausführungsprozesses oder Zugriffspfads einer Abfrageanweisung in Oracle.

Auswahl des Ausführungsplans:

Normalerweise verfügt eine SQL über mehrere Ausführungspläne. Wie wählen wir also aus? Derjenige mit geringerem Ausführungsaufwand bedeutet bessere Leistung und schnellere Geschwindigkeit. Dieser Prozess wird als Oracle-Analyseprozess bezeichnet, und dann wird Oracle den besseren Ausführungsplan in den Shared Pool von SGA einfügen. Sie müssen es nur aus dem gemeinsam genutzten Pool abrufen und müssen es nicht erneut analysieren.

Grundlage für die Auswahl des Ausführungsplans:

Wählen Sie einen Ausführungsplan basierend auf statistischen Informationen aus.

Statistische Informationen:

Was sind statistische Informationen: Anzahl der Datensätze, Anzahl der Blöcke usw., siehe dba_tables/dba_indexes für Details

Dynamisch Stichprobe:

Oracle sammelt normalerweise jeden Tag zu einer bestimmten Zeit statistische Informationen. Wie sammelt Oracle statistische Informationen für neu erstellte Tabellen? Verwenden Sie dynamisches Sampling.

Autotrace aktivieren
Liniengröße 1000 festlegen
--SQL-Anweisung ausführen
--für diese Anweisung verwendetes dynamisches Sampling (Stufe=2) Der Schlüssel

Sechs Ausführungspläne

Oracle bietet 6 Methoden zur Erfassung von Ausführungsplänen mit jeweils unterschiedlichem Schwerpunkt:

Befolgen Sie bei der Auswahl im Allgemeinen die folgenden Regeln:

1. Wenn es lange dauert, bis die SQL-Ausführung Ergebnisse liefert, verwenden Sie Methode 1: Plan erklären für

2 Der einfachste Weg, einen bestimmten SQL-Plan zu verfolgen, ist Methode 1: Plan erklären für , gefolgt von Methode 2: Autotrace aktivieren

3 Wenn Sie mehrere Ausführungspläne einer bestimmten SQL überprüfen möchten, können Sie nur Methode 4: dbms_xplan.display_cursor oder Methode 6: awrsqrpt.sql

verwenden

4. Wenn die SQL eine Funktion enthält und die Funktion SQL enthält, gibt es mehrere Ebenen von Aufrufen. Wenn Sie sie genau analysieren möchten, können Sie nur Methode 5: 10046-Tracking verwenden

5. Um den tatsächlichen Ausführungsplan anzuzeigen, können Sie nicht Methode 1: Plan erklären und Methode 2: Autotrace aktivieren verwenden kann nur Methode 3 verwenden: Statistics_level = all

So zeigen Sie den Oracle-Ausführungsplan anSo sammelt Oracle Statistiken:

1 Indexstatistiken in einem bestimmten Zeitraum (Standard Montag bis Freitag: 22:00 Uhr, Samstag und Sonntag: 06:00 Uhr), Benutzer können diese selbst anpassen, hauptsächlich um Spitzenzeiten zu vermeiden

2 und Indizes haben einen Schwellenwert, und die Analyse wird nur dann automatisch durchgeführt, wenn der Schwellenwert überschritten wird. Wenn die Datenänderungen nicht groß sind, analysiert Oracle sie nicht.

3. Die Erfassungsmethode ist flexibel. Dies kann für eine bestimmte Partition der Partitionstabelle durchgeführt werden und ein paralleler Mechanismus kann zum Sammeln von Tabellen- und Indexinformationen verwendet werden.

So sammeln Sie statistische Informationen:

--Sammeln Sie Tabellenstatistiken Informationen

exec dbms_stats.gather_table_stats(ownname => 'AAA', tabname => 'TEST02',estimate_percent =>
10,method_opt => 'for all indexed columns');

--Indexstatistiken sammeln

exec dbms_stats.gather_index_stats(ownname => 'AAA',indname => 'ID_IDX',estimate_percent =>
10,degree => '4');

--Tabellen- und Indexstatistiken sammeln

exec dbms_stats.gather_table_stats(ownname => 'AAA',tabname => 'TEST02',estimate_percent =>
10,method_opt => 'for all indexed columns',cascade => true);

(1) Plan erklären für

SQL> show user
     USER 为 "HR"
SQL> set linesize 1000
SQL> set pagesize 2000
SQL> explain plan for
2 select *
3 from employees,jobs
4 where employees.job_id=jobs.job_id
5 and employees.department_id=50;
已解释。
 
SQL> select * from table(dbms_xplan.display());
 
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------
Plan hash value: 303035560
------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 45 | 4590 | 6 (17)| 00:00:01 |
| 1 | MERGE JOIN | | 45 | 4590 | 6 (17)| 00:00:01 |
| 2 | TABLE ACCESS BY INDEX ROWID| JOBS | 19 | 627 | 2 (0)| 00:00:01 |
| 3 | INDEX FULL SCAN | JOB_ID_PK | 19 | | 1 (0)| 00:00:01 |
|* 4 | SORT JOIN | | 45 | 3105 | 4 (25)| 00:00:01 |
|* 5 | TABLE ACCESS FULL | EMPLOYEES | 45 | 3105 | 3 (0)| 00:00:01 |
------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
4 - access("EMPLOYEES"."JOB_ID"="JOBS"."JOB_ID")
filter("EMPLOYEES"."JOB_ID"="JOBS"."JOB_ID")
5 - filter("EMPLOYEES"."DEPARTMENT_ID"=50)
已选择19行。

Vorteile: Nein müssen tatsächlich ausgeführt werden.

Nachteile:

1 Es werden keine relevanten statistischen Informationen ausgegeben, z. B. wie viele logische Lesevorgänge, wie viele physische Lesevorgänge und wie viele rekursive Aufrufe generiert;

2. Es ist unmöglich zu beurteilen, wie viele Zeilen verarbeitet wurden

3. Es ist unmöglich zu beurteilen, wie oft die Tabelle ausgeführt wurde

( 2) Autotrace einschalten

Verwendung:

Befehlsfunktion:

SET AUTOT[RACE] OFF, um AutoTrace zu stoppen

SET AUTOT[RACE] ON auf Schalten Sie AutoTrace ein und zeigen Sie AUTOTRACE-Informationen und SQL-Ausführungsergebnisse an
SET AUTOT[RACE] TRACEONLY, um AutoTrace einzuschalten, zeigen Sie nur AUTOTRACE-Informationen an

SET AUTOT[RACE] ON EXPLAIN Schalten Sie AutoTrace ein, zeigen Sie nur EXPLAIN-Informationen von AUTOTRACE an
AUTOT[RACE] AUF STATISTIKEN EINSTELLEN. AutoTrace einschalten, nur AUTOTRACE-STATISTIK-Informationen anzeigen werden generiert, wie viele rekursive Aufrufe, wie viele physische Lesevorgänge usw.);

2. Der Ausführungsplan kann zwar erst ausgegeben werden, nachdem die Anweisung ausgeführt wurde, aber der Traceonly-Schalter kann verwendet werden um zu steuern, dass die Rückgabeergebnisse nicht auf dem Bildschirm ausgegeben werden;

Sie müssen warten, bis die SQL-Anweisung ausgeführt wird

2. Es ist nicht möglich zu sehen, wie oft auf die Tabelle zugegriffen wurde >Schritt 2: Führen Sie das zu analysierende SQL aus

Schritt 3: select * from table(dbms_xplan.display_cursor('sql_id/hash_value',null,'allstats last'));

SQL> set autotrace on
SQL> select * from employees,jobs where employees.job_id=jobs.job_id and employees.department_id=50;
--输出结果(略)
-- ...
已选择45行。
 
执行计划
----------------------------------------------------------
Plan hash value: 303035560
------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 45 | 4590 | 6 (17)| 00:00:01 |
| 1 | MERGE JOIN | | 45 | 4590 | 6 (17)| 00:00:01 |
| 2 | TABLE ACCESS BY INDEX ROWID| JOBS | 19 | 627 | 2 (0)| 00:00:01 |
| 3 | INDEX FULL SCAN | JOB_ID_PK | 19 | | 1 (0)| 00:00:01 |
|* 4 | SORT JOIN | | 45 | 3105 | 4 (25)| 00:00:01 |
|* 5 | TABLE ACCESS FULL | EMPLOYEES | 45 | 3105 | 3 (0)| 00:00:01 |
------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
4 - access("EMPLOYEES"."JOB_ID"="JOBS"."JOB_ID")
filter("EMPLOYEES"."JOB_ID"="JOBS"."JOB_ID")
5 - filter("EMPLOYEES"."DEPARTMENT_ID"=50)
统计信息
----------------------------------------------------------
0 recursive calls
0 db block gets
13 consistent gets
0 physical reads
0 redo size
5040 bytes sent via SQL*Net to client
433 bytes received via SQL*Net from client
4 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
45 rows processed

Schlüsselwortinterpretation:

Anfänge: die Anzahl der SQL-Ausführungen;

2 3. R-Zeilen: Die tatsächliche Anzahl der vom Ausführungsplan zurückgegebenen Zeilen; A-Zeit: Die Ausführungszeit jedes Schritts (HH:MM:SS.FF). Sie können wissen, wo die SQL-Zeit verbracht wird;

5 Vorteile:

1. Kann klar sein, wie oft auf die Tabelle zugegriffen wurde

2、可以从E-Rows和A-Rows得到预测的行数和真实的行数,从而可以准确判断Oracle评估是否准确;

3、虽然没有准确的输出运行时的相关统计信息,但是执行计划中的Buffers就是真实的逻辑读的数值;

缺点:

1、必须要等执行完后才能输出结果;

2、无法控制结果打屏输出,不像autotrace可以设置traceonly保证不输出结果;

3、看不出递归调用,看不出物理读的数值

(4)dbms_xplan.display_cursor获取

步骤1:select * from table( dbms_xplan.display_cursor('&sql_id') ); --该方法是从共享池得到

注释:

1、还有1种方法,select * from table( dbms_xplan.display_awr('&sql_id') ); --该方法是从awr性能视图里面获取

2、如果有多个执行计划,可用以下方法查出:

select * from table(dbms_xplan.display_cursor('&sql_id',0));
select * from table(dbms_xplan.display_cursor('&sql_id',1));
*/
SQL> select * from table(dbms_xplan.display_cursor('5hkd01f03y43d'));
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID 5hkd01f03y43d, child number 0
-------------------------------------
select * from test where table_name = 'LOG$'
Plan hash value: 2408911181
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 2 (100)|
| 1 | TABLE ACCESS BY INDEX ROWID| TEST | 1 | 241 | 2 (0)|
|* 2 | INDEX RANGE SCAN | IDX_TEST_1 | 1 | | 1 (0)|
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("TABLE_NAME"='LOG$')
19 rows selected

注释:如何查看1个sql语句的sql_id,可直接查看v$sql

优点:

1、知道sql_id即可得到执行计划,与explain plan for一样无需执行;

2、可得到真实的执行计划

缺点:

1、没有输出运行的统计相关信息;

2、无法判断处理了多少行;

3、无法判断表被访问了多少次;

(5)事件10046 trace跟踪

步骤1:alter session set events '10046 trace name context forever,level 12'; --开启追踪

步骤2:执行sql语句;

步骤3:alter session set events '10046 trace name context off'; --关闭追踪

步骤4:找到跟踪后产生的文件(开启10046前先用‘ls -lrt’看一下文件,执行结束后再看哪个是多出来的文件即可)

步骤5:tkprof trc文件 目标文件 sys=no sort=prsela,exeela,fchela --格式化命令

优点:

1、可以看出sql语句对应的等待事件;

2、如果函数中有sql调用,函数中有包含sql,将会被列出,无处遁形;

3、可以方便的看处理的行数,产生的逻辑物理读;

4、可以方便的看解析时间和执行时间;

5、可以跟踪整个程序包

缺点:

1、步骤繁琐;

2、无法判断表被访问了多少次;

3、执行计划中的谓词部分不能清晰的展现出来

推荐:Oracle数据库学习教程

Das obige ist der detaillierte Inhalt vonSo zeigen Sie den Oracle-Ausführungsplan an. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Dieser Artikel ist reproduziert unter:CSDN. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Der Zweck von Oracle: Business Solutions und DatenmanagementDer Zweck von Oracle: Business Solutions und DatenmanagementApr 13, 2025 am 12:02 AM

Oracle hilft Unternehmen, durch seine Produkte und Dienstleistungen digitaler Transformation und Datenmanagement zu erreichen. 1) Oracle bietet ein umfassendes Produktportfolio, einschließlich Datenbankverwaltungssysteme, ERP- und CRM -Systeme, mit denen Unternehmen Geschäftsprozesse automatisieren und optimieren können. 2) ERP-Systeme von Oracle wie E-Businesssuite und Fusion Applications erkennen die End-to-End-Geschäftsprozessautomatisierung, verbessern die Effizienz und die Kosten für die Kosten, haben jedoch hohe Implementierungs- und Wartungskosten. 3) Oracledatabase bietet eine hohe Datenverarbeitung und hohe Verfügbarkeitsdatenverarbeitung, hat jedoch hohe Lizenzkosten. 4) Leistungsoptimierung und Best Practices umfassen die rationale Verwendung von Indexierungs- und Partitionierungstechnologie, regelmäßige Datenbankwartung und Einhaltung der Codierungsspezifikationen.

So löschen Sie Oracle Library -FehlerSo löschen Sie Oracle Library -FehlerApr 12, 2025 am 06:21 AM

Schritte zum Löschen der fehlgeschlagenen Datenbank, nachdem Oracle eine Bibliothek nicht erstellt hat: Verwenden Sie den SYS -Benutzernamen, um eine Verbindung zur Zielinstanz herzustellen. Verwenden Sie die Drop -Datenbank, um die Datenbank zu löschen. Abfrage V $ Datenbank Um zu bestätigen, dass die Datenbank gelöscht wurde.

So erstellen Sie Cursor in Oracle LoopSo erstellen Sie Cursor in Oracle LoopApr 12, 2025 am 06:18 AM

In Oracle kann die For -Loop -Schleife Cursors dynamisch erzeugen. Die Schritte sind: 1. Definieren Sie den Cursortyp; 2. Erstellen Sie die Schleife; 3.. Erstellen Sie den Cursor dynamisch; 4. Führen Sie den Cursor aus; 5. Schließen Sie den Cursor. Beispiel: Ein Cursor kann mit dem Zyklus für Kreislauf erstellt werden, um die Namen und Gehälter der Top 10 Mitarbeiter anzuzeigen.

So exportieren Sie Oracle ViewSo exportieren Sie Oracle ViewApr 12, 2025 am 06:15 AM

Oracle -Ansichten können über das Exp -Dienstprogramm exportiert werden: Melden Sie sich in der Oracle -Datenbank an. Starten Sie das EXP -Dienstprogramm und geben Sie das Ansichtsname und das Exportverzeichnis an. Geben Sie Exportparameter ein, einschließlich Zielmodus, Dateiformat und Tablespace. Mit dem Export beginnen. Überprüfen Sie den Exportieren mithilfe des IMPDP -Dienstprogramms.

So stoppen Sie die Oracle -DatenbankSo stoppen Sie die Oracle -DatenbankApr 12, 2025 am 06:12 AM

Führen Sie die folgenden Schritte aus, um eine Oracle -Datenbank zu stoppen: 1. Eine Verbindung zur Datenbank herstellen; 2. Sofort herunterfahren; 3.. Herunterfahren vollständig.

Was tun, wenn das Oracle -Protokoll voll istWas tun, wenn das Oracle -Protokoll voll istApr 12, 2025 am 06:09 AM

Wenn Oracle -Protokolldateien voll sind, können die folgenden Lösungen übernommen werden: 1) alte Protokolldateien reinigen; 2) die Größe der Protokolldatei erhöhen; 3) die Protokolldateigruppe erhöhen; 4) automatische Protokollverwaltung einrichten; 5) die Datenbank neu initialisieren. Vor der Implementierung einer Lösung wird empfohlen, die Datenbank zu sichern, um den Datenverlust zu verhindern.

So erstellen Sie Oracle Dynamic SQLSo erstellen Sie Oracle Dynamic SQLApr 12, 2025 am 06:06 AM

SQL -Anweisungen können basierend auf der Laufzeiteingabe erstellt und ausgeführt werden, indem die dynamische SQL von Oracle verwendet wird. Zu den Schritten gehören: Vorbereitung einer leeren Zeichenfolgenvariable zum Speichern von dynamisch generierten SQL -Anweisungen. Verwenden Sie die sofortige Ausführung oder Vorbereitung, um dynamische SQL -Anweisungen zu kompilieren und auszuführen. Verwenden Sie die Bind -Variable, um die Benutzereingabe oder andere dynamische Werte an dynamische SQL zu übergeben. Verwenden Sie sofortige Ausführung oder führen Sie aus, um dynamische SQL -Anweisungen auszuführen.

Was tun, wenn Oracle DeadlockWas tun, wenn Oracle DeadlockApr 12, 2025 am 06:03 AM

Oracle Deadlock -Handhabungshandbuch: Identifizieren Sie Deadlocks: Überprüfen Sie, ob "Deadlock erkannte" Fehler in Protokolldateien. STADLOCK -Informationen anzeigen: Verwenden Sie das Paket Get_deadlock oder die V $ Lock -Ansicht, um Deadlock -Sitzungs- und Ressourceninformationen zu erhalten. Analysieren Sie das Deadlock -Diagramm: Erzeugen Sie das Deadlock -Diagramm, um die Halten- und Wartesituation des Schlosses zu visualisieren und die Grundursache des Deadlocks zu bestimmen. Rollback -Deadlock -Sitzungen: Verwenden Sie den Befehl Kill Session, um die Sitzung zurückzurufen, kann jedoch zu Datenverlust führen. Interrupt -Deadlock -Zyklus: Verwenden Sie den Befehl trennen Sie die Sitzung, um die Sitzung zu trennen und die Hold -Lock zu veröffentlichen. Deadlocks verhindern: Abfragen optimieren, optimistische Verriegelung verwenden, Transaktionsmanagement durchführen und regelmäßig

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Leistungsstarke integrierte PHP-Entwicklungsumgebung

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

VSCode Windows 64-Bit-Download

VSCode Windows 64-Bit-Download

Ein kostenloser und leistungsstarker IDE-Editor von Microsoft