it-swarm-eu.dev

Jak získáte plán vysvětlování?

Může někdo prosím vysvětlit něco o plánu vysvětlit a jak lze získat plán vysvětlit pro dotaz. Také, pokud existuje nějaký skript sql, který lze použít jako nástroj pro tento účel, bylo by to skvělé.

10
user419534

Můžete použít balíček DBMS_XPLAN :

SQL> explain plan for select * from dual;

Explained

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
--------------------------------------------------------------------
| Id  | Operation            |  Name       | Rows  | Bytes | Cost  |
--------------------------------------------------------------------
|   0 | SELECT STATEMENT     |             |     1 |     2 |     2 |
|   1 |  TABLE ACCESS FULL   | DUAL        |     1 |     2 |     2 |
--------------------------------------------------------------------
Note: cpu costing is off
9
Vincent Malgrat

Příkaz EXPLAIN PLAN zobrazuje plány provádění vybrané optimalizátorem pro příkazy SELECT, UPDATE, INSERT a DELETE. Plán provádění příkazu je posloupnost operací, které databáze provádí ke spuštění příkazu.

EXPLAIN PLAN FOR ...

Nahraďte ... svým příkazem SQL. Po spuštění tohoto spuštění zobrazíte následující plán:

SELECT * FROM table(dbms_xplan.display);

Další informace naleznete v oddílech Přehled nebo Použití v Průvodci laděním výkonu Oracle 11g.

5
Leigh Riffel

Toto je velmi běžná otázka, proto jsem se rozhodl tuto odpověď změnit na článek .

Odhadovaný plán provádění SQL

Odhadovaný plán provádění je generován optimalizátorem bez provedení dotazu SQL. Odhadovaný plán provádění můžete vygenerovat z jakéhokoli klienta SQL pomocí VYPLATIT PLÁN PRO nebo můžete použít Oracle SQL Developer pro tento úkol.

VYSVĚTLIVÝ PLÁN PRO

Používáte-li Oracle, připojte EXPLAIN PLAN FOR příkaz k danému dotazu SQL, databáze uloží odhadovaný plán provádění do přidruženého PLAN_TABLE:

EXPLAIN PLAN FOR
SELECT p.id
FROM post p
WHERE EXISTS (
  SELECT 1
  FROM post_comment pc
  WHERE
    pc.post_id = p.id AND
    pc.review = 'Bingo'
)
ORDER BY p.title
OFFSET 20 ROWS
FETCH NEXT 10 ROWS ONLY

Chcete-li zobrazit odhadovaný plán provádění, musíte použít DBMS_XPLAN.DISPLAY, jak je znázorněno v následujícím příkladu:

SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY (FORMAT=>'ALL +OUTLINE'))

Možnost formátování ALL + OUTLINE vám umožní získat více podrobností o odhadovaném plánu provádění než použití výchozí možnosti formátování.

Oracle SQL Developer

Pokud jste nainstalovali SQL Developer, můžete snadno získat odhadovaný plán provádění pro jakýkoli dotaz SQL, aniž byste museli předepsat příkaz EXPLAIN PLAN FOR:

enter image description here

Skutečný plán provádění SQL

Skutečný plán provádění SQL generuje Optimizer při spuštění dotazu SQL. Na rozdíl od odhadovaného plánu provádění tedy musíte provést dotaz SQL, abyste získali jeho skutečný plán provádění.

Skutečný plán by se neměl výrazně lišit od odhadovaného plánu, pokud byly statistické tabulky správně shromážděny podkladovou relační databází.

Nápověda k dotazu GATHER_PLAN_STATISTICS

Chcete-li společnosti Oracle přikázat, aby uložila skutečný plán provádění pro daný dotaz SQL, můžete použít GATHER_PLAN_STATISTICS tip nápovědy:

SELECT /*+ GATHER_PLAN_STATISTICS */
  p.id
FROM post p
WHERE EXISTS (
  SELECT 1
  FROM post_comment pc
  WHERE
    pc.post_id = p.id AND
    pc.review = 'Bingo'
)
ORDER BY p.title
OFFSET 20 ROWS
FETCH NEXT 10 ROWS ONLY

K vizualizaci skutečného plánu provádění můžete použít DBMS_XPLAN.DISPLAY_CURSOR:

SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(FORMAT=>'ALLSTATS LAST ALL +OUTLINE'))

Povolte STATISTICS na úrovni připojení DB

Pokud chcete získat plány provádění pro všechny dotazy generované v dané relaci, můžete nastavit STATISTICS_LEVEL konfigurace relace na VŠE:

ALTER SESSION SET STATISTICS_LEVEL='ALL'

To bude mít stejný účinek jako nastavení GATHER_PLAN_STATISTICS tip nápovědy pro každý prováděcí dotaz. Stejně jako u GATHER_PLAN_STATISTICS tip nápovědy, můžete použít DBMS_XPLAN.DISPLAY_CURSOR pro zobrazení skutečného plánu provádění.

Měli byste resetovat STATISTICS_LEVEL nastavení do výchozího režimu, jakmile skončíte s shromažďováním prováděcích plánů, které vás zajímají. To je velmi důležité, zejména pokud používáte sdružování připojení a připojení k databázi se znovu používají.

ALTER SESSION SET STATISTICS_LEVEL='TYPICAL'
1
Vlad Mihalcea