sql >> Database teknologi >  >> RDS >> Oracle

Hvordan beskrives ydeevneproblemet i relationel database?

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 tabeller

For 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!




  1. Hvad er en betroet forbindelse?

  2. Sådan omdøbes et tabelnavn i SQL Server

  3. Konverter SQLITE SQL dump-fil til POSTGRESQL

  4. Hvad skal jeg bruge for at køre SQL?