För Oracle Database ge denna information:
Beskriv symptomen på problemet
Beskriv beteendet som orsakar problemet. Är frågans beteende stabilt eller uppstår problemet bara ibland, med specifika parametrar eller helt enkelt slumpmässigt. Kan du återskapa detta beteende i en IDE (t.ex. SQL-utvecklare)?
Beskriv miljön
Definiera den exakta versionen av Oracle
select * from v$version
Beskriv hur du ansluter till databasen:drivrutin, ORM, programmeringsspråk. Ange namn och/eller versionsnummer.
Beskriv frågan
Lägg upp frågetexten. Försök att förenkla - visa ett minimalt reproducerbart exempel .
Exempel - din problematiska fråga sammanfogar 10 tabeller. Kontrollera om du ser samma symptom i en fråga med 9 eller 8 joins. Kliv ner tills du ser problemen och visa bara den reducerade frågan.
Ja, det här är dyrt, men det ökar chansen att du får support! Ju mindre frågan är desto högre lockar den supportrarna.
Beskriv genomförandeplanen
För att få exekveringsplanen kör den här satsen (ersätt din frågetext)
EXPLAIN PLAN SET STATEMENT_ID = '<some_id>' into plan_table FOR
select * from .... -- your query here
;
Exekveringsplanen lagras i PLAN_TABLE
, för att se den kör den här frågan
SELECT * FROM table(DBMS_XPLAN.DISPLAY('plan_table', '<some_id>','ALL'));
Visa det fullständiga resultatet (inte bara tabellen med utförandeplanen). Extremt viktigt kan vara predikatsektionen och anteckningarna nedan.
Exempel för 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]
Klipp och klistra inte in det grafiska resultatet av din IDE förklara planen.
Är den här genomförandeplanen den verkliga som genomförs?
Tyvärr inte alltid. Det finns flera anledningar till att förklarade genomförandeplanen kan skilja sig från den verkliga.
Om du är tveksam (särskilt när du ser en bra plan, men frågan går dåligt) kan du extrahera planen från DB-cachen och tillhandahålla en SQL_ID
.
SELECT t.* FROM table(DBMS_XPLAN.DISPLAY_CURSOR('<SQL_ID>',null,'ALL')) t;
SQL_ID för en fråga som körs för närvarande (eller kördes inom kort och fortfarande är cachad) kan hittas med textmatchning och/eller databasanvändaren:
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>';
Om du har AWR-licens kan du få exekveringsplanen därifrån, även för frågor som körs i historiken.
SELECT t.*
FROM table(DBMS_XPLAN.DISPLAY_AWR('10u2rj016s96k' )) t;
SQL_ID kan hittas med
select sql_id, sql_text
from dba_hist_sqltext a
where lower(sql_text) like lower('%<some identifying part of the query text>%')
Beskriv data
Visa DDL för tabellerna och indexen på dessa tabeller.
Nämn om optimeringsstatistiken har samlats in nyligen och visar använda dbms_stats
samla uttalande.
För de kritiska tabellerna, tillhandahåll information om segmentstorlek, radnummer, partitionering,...
För kolumnerna som används i åtkomst eller kopplingar, ge information om antalet distinkta värden. Är värdena jämnt fördelade eller skeva (t.ex. ett litet antal värden som förekommer mycket ofta och ett stort antal sällsynta värden). Definierar du histogram?
Något annat?
Naturligtvis är detta bara grunderna och annan information kan fortfarande krävas, såsom systemstatistik eller optimeringsparametrar. Men försök återigen att tillhandahålla den minimala information som (du) kan identifiera problemet. Lägg upp ytterligare information på begäran.
Lycka till!