Pro databázi Oracle poskytněte tyto informace:
Popište příznaky problému
Popište chování, které způsobuje problém. Je chování dotazu stabilní nebo se problém vyskytuje pouze někdy, se specifickými parametry nebo jednoduše náhodně. Můžete toto chování reprodukovat v IDE (např. SQL Developer)?
Popište prostředí
Definujte přesnou verzi Oracle
select * from v$version
Popište, jak se připojujete k databázi:ovladač, ORM, programovací jazyk. Zadejte názvy a/nebo čísla verzí.
Popište dotaz
Zveřejněte text dotazu. Zkuste to zjednodušit – ukažte minimální reprodukovatelný příklad .
Příklad - váš problematický dotaz spojuje 10 tabulek. Zkontrolujte, zda vidíte stejné příznaky v dotazu s 9 nebo 8 spojeními. Odstupte, dokud neuvidíte problémy, a zobrazte pouze omezený dotaz.
Ano, je to nákladné, ale výrazně to zvyšuje šanci, že podporu získáte! Čím menší je dotaz, tím více přitahuje příznivce.
Popište plán provádění
Chcete-li získat plán provádění, spusťte tento příkaz (nahraďte text dotazu)
EXPLAIN PLAN SET STATEMENT_ID = '<some_id>' into plan_table FOR
select * from .... -- your query here
;
Prováděcí plán je uložen v PLAN_TABLE
, abyste viděli, že spouští tento dotaz
SELECT * FROM table(DBMS_XPLAN.DISPLAY('plan_table', '<some_id>','ALL'));
Zobrazit úplný výsledek (nejen tabulka s prováděcím plánem). Mimořádně důležitá může být sekce predikátů a poznámky níže.
Příklad pro select * from dual where dummy = :1;
Plan hash value: 272002086
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 2 | 2 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| DUAL | 1 | 2 | 2 (0)| 00:00:01 |
--------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
1 - SEL$1 / [email protected]$1
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("DUMMY"=:1)
Column Projection Information (identified by operation id):
-----------------------------------------------------------
1 - "DUMMY"[VARCHAR2,1]
Nevystřihujte a nevkládejte grafický výsledek vašeho plánu vysvětlení IDE.
Je tento plán provádění skutečný plán, který se provádí?
Bohužel ne vždy. Důvodů vysvětlených je několik plán provádění se může lišit od skutečného.
Pokud máte pochybnosti (zejména když vidíte dobrý plán, ale dotaz běží špatně), můžete extrahovat plán z mezipaměti DB poskytnutím SQL_ID
.
SELECT t.* FROM table(DBMS_XPLAN.DISPLAY_CURSOR('<SQL_ID>',null,'ALL')) t;
SQL_ID pro dotaz, který je aktuálně spuštěn (nebo byl spuštěn krátce a je stále uložen v mezipaměti), lze nalézt pomocí shody textu a/nebo uživatele databáze:
select sql_id, sql_fulltext from v$sql a where
lower(sql_text) like lower('%<some identifying part of the query text>%')
and parsing_schema_name = '<user running the query>';
Pokud máte licenci AWR, můžete odtud získat plán provádění, a to i pro dotazy spuštěné v historii.
SELECT t.*
FROM table(DBMS_XPLAN.DISPLAY_AWR('10u2rj016s96k' )) t;
SQL_ID lze nalézt pomocí
select sql_id, sql_text
from dba_hist_sqltext a
where lower(sql_text) like lower('%<some identifying part of the query text>%')
Popište data
Zobrazit DDL tabulek a indexů v těchto tabulkách.
Uveďte, zda se statistiky optimalizátoru shromažďují nedávno, a ukažte použité dbms_stats
shromáždit prohlášení.
U kritických tabulek uveďte informace o velikosti segmentu, čísle řádku, rozdělení,...
Pro sloupce používané v přístupu nebo spojení poskytněte informace o počtu různých hodnot. Jsou hodnoty rovnoměrně rozloženy nebo zkreslené (např. malý počet hodnot, které se vyskytují velmi často, a velký počet vzácných hodnot). Definujete histogramy?
Ještě něco?
Toto jsou samozřejmě pouze základní informace a stále mohou být vyžadovány další informace, jako jsou systémové statistiky nebo parametry optimalizátoru. Ale ještě jednou se pokuste poskytnout minimální informace, které (vy, co) můžete identifikovat problém. Na požádání zveřejněte další informace.
Hodně štěstí!