Til Oracle Database give disse oplysninger:
Beskriv symptomerne på problemet
Beskriv den adfærd, der forårsager problemet. Er forespørgslens adfærd stabil, eller opstår problemet kun nogle gange, med specifikke parametre eller simpelt tilfældigt. Kan du gengive denne adfærd i en IDE (f.eks. SQL Developer)?
Beskriv miljøet
Definer den nøjagtige version af Oracle
vælg * fra v$version
Beskriv hvordan du forbinder til databasen:driver, ORM, programmeringssprog. Angiv navne og/eller versionsnumre.
Beskriv forespørgslen
Send forespørgselsteksten. Prøv at forenkle - vis et minimalt reproducerbart eksempel .
Eksempel - din problematiske forespørgsel forbinder 10 tabeller. Tjek, om du ser de samme symptomer i en forespørgsel med 9 eller 8 joinforbindelser. Træd ned, indtil du ser problemerne, og vis kun den reducerede forespørgsel.
Ja, det er dyrt, men det øger i høj grad chancen for, at du modtager support! Jo mindre forespørgslen er, jo højere tiltrækker den tilhængerne.
Beskriv udførelsesplanen
For at få udførelsesplanen køre denne erklæring (erstat din forespørgselstekst)
EXPLAIN PLAN SET STATEMENT_ID ='' i plan_table FOR vælg * fra .... -- din forespørgsel her;
Udførelsesplanen er gemt i PLAN_TABLE
, for at se den køre denne forespørgsel
SELECT * FROM table(DBMS_XPLAN.DISPLAY('plan_table', '','ALL'));
Vis det komplette resultat (ikke kun tabellen med udførelsesplanen). Ekstremt vigtigt kan prædikatafsnittet og bemærkningerne nedenfor være.
Eksempel på vælg * fra dual hvor dummy =:1;
Planens hashværdi:272002086---------------------------------------------- ----------------------------------| Id | Betjening | Navn | Rækker | Bytes | Omkostninger (%CPU)| Tid |------------------------------------------------ --------------------------| 0 | VÆLG UDTALELSE | | 1 | 2 | 2 (0)| 00:00:01 ||* 1 | TABELADGANG FULD| DOBBELT | 1 | 2 | 2 (0)| 00:00:01 |------------------------------------------------ ------------------------------Forespørgselsbloknavn/objektalias (identificeret ved operations-id):------- -------------------------------------------------- ---- 1 - SEL$1 / [email protected]$1 Prædikatoplysninger (identificeret ved operations-id):-------------------------------- -------------------------- 1 - filter("DUMMY"=:1) Kolonneprojektionsoplysninger (identificeret ved operations-id):---- -------------------------------------------------- ----- 1 - "DUMMY"[VARCHAR2,1]
Klip og indsæt ikke det grafiske resultat af din IDE-forklar plan.
Er denne udførelsesplan den rigtige, der udføres?
Desværre ikke altid. Der er flere grunde til forklaringen udførelsesplan kan afvige fra den rigtige.
Hvis du er i tvivl (især når du ser en god plan, men forespørgslen kører dårligt), kan du udtrække planen fra DB-cachen med et SQL_ID
.
SELECT t.* FROM table(DBMS_XPLAN.DISPLAY_CURSOR('',null,'ALL')) t;
SQL_ID'et for en forespørgsel, der kører i øjeblikket (eller kørte kort og stadig er cachelagret) kan findes med tekstmatch og/eller databasebrugeren:
vælg sql_id, sql_fulltext fra v$sql a hvor lower(sql_text) som lower('%%') og parsing_schema_name ='';
Hvis du har AWR-licens, kan du muligvis få udførelsesplanen derfra, selv for forespørgsler, der kører i historikken.
SELECT t.*FROM table(DBMS_XPLAN.DISPLAY_AWR('10u2rj016s96k' )) t;
SQL_ID'et kan findes ved hjælp af
vælg sql_id, sql_text fra dba_hist_sqltext a where lower(sql_text) som lower('%%')
Beskriv dataene
Vis DDL for tabellerne og indekserne på disse tabeller.
Nævn, om optimeringsstatistikken er indsamlet for nylig, og viser de brugte dbms_stats
samle erklæring.
Angiv oplysninger om segmentstørrelse, rækkenummer, partitionering,...
for de kritiske tabellerFor de kolonner, der bruges i adgang eller joins, skal du give oplysninger om antallet af distinkte værdier. Er værdierne jævnt fordelt eller skæve (f.eks. et lille antal værdier, der forekommer meget ofte og et stort antal sjældne værdier). Definerer du histogrammer?
Noget andet?
Dette er selvfølgelig kun det grundlæggende, og andre oplysninger kan stadig være påkrævet, såsom systemstatistik eller optimeringsparametre. Men prøv endnu en gang at give den minimale information, der kan identificere problemet. Send yderligere oplysninger efter anmodning.
Held og lykke!