Justera prestanda för frågor mot relationsdatabaser

Många kunder upplever prestandaproblem med applikationer för datalager. I vissa fall är de SQL-frågor som genereras i Oracle Analytics svåra att analysera. I det här avsnittet finns anvisningar för hur du analyserar och minimerar prestandaproblem som kan komma från SQL-frågorna som genereras i Oracle Analytics.

Hjälpavsnittet omfattar inte prestandaproblem som beror på nätverket, webbläsaren eller hur rapporten presenteras.

Analysera frågeloggen för Oracle Analytics (loggnivå 3 krävs)

Information om hur du hittar den här loggen och ska tolka innehållet finns i Samla in och analysera frågeloggar.

  1. Jämför frågans körningstid i Oracle Analytics med körningstiden i databasen, det vill säga svarstiden jämfört med den fysiska frågetiden. I normala fall bör tiden i Oracle Analytics högst vara några sekunder.
  2. Om svarstiden är längre än några sekunder ska du analysera de enskilda stegen som utförs i Oracle Analytics så att du hittar orsaken (loggnivå 5 krävs).

Analysera den fysiska SQL-frågan

  1. Kontrollera om alla tabeller som finns med i frågan behövs. Leta efter tabeller som är kopplade men inte ingår i SELECT-satsen och inte har några tillämpade filter (riktiga filter, inte kopplingsvillkor).
  2. Identifiera hur många fysiska frågor och delfrågor som genereras. Närmare bestämt hur många gånger frågan läser en faktatabell? I idealfallet ska frågan läsa en enda faktatabell, en enda gång. När det finns fler än en faktatabell tar du reda på varför och om du kan ta bort några.
  3. Leta efter exkluderade kolumner, icke additiva aggregeringsregler (REPORT_AGGREGATE, count(distinct)...), urvalssteg, en delfråga i rapporten, mängdoperatorer (UNION), totalsummor, delsummor, multipla vyer och liknande.
  4. Leta efter yttre kopplingar. Ta reda på ursprunget och om du kan ta bort några genom att ändra designen.

Analysera exekveringsplanen

Om det inte räcker att optimera SQL-frågan analyserar du exekveringsplanen så att du hittar rotorsaken till prestandaproblemet. Be databasadministratören (DBA) om hjälp. I det här läget finns det fyra huvudsakliga sätt att få bättre prestanda:
  1. Minska antalet anrop om indata-utdata genom att förbättra dataåtkomstvägarna (indexen).
  2. Minska antalet anrop om indata-utdata genom att minska mängden data som läses. Du kan till exempel granska vilka filter som används eller datamodellens struktur (se nästa sektion).
  3. Öka graden av parallellism (antalet trådar som används till att läsa stora tabeller).
  4. Öka hastigheten för anrop om indata-utdata (uppgradera exempelvis infrastrukturen eller databasens minne).

Granska och förbättra datamodellen så att du minskar mängden data som läses

  1. Skapa aggregeringstabeller.
  2. Använd fragmentering.

    Om användarna till exempel ofta väljer data från År, Kvartal eller Månad kan du dela upp fakta i två tabeller: aktuellt och arkiv. Du kan även använda partitionering för Oracle-databasen.

  3. Använd avnormalisering för att minska antalet kopplingar.
  4. Dela upp tabellerna så att de får färre kolumner.

    Mängden data som läses beror inte bara på antalet rader i respektive tabell. Tabellvolymen beror även på antalet kolumner och deras storlek. Du kan till exempel dela upp en stor tabell med 500 kolumner i två tabeller, en med de 50 kolumner som används oftast och en annan med återstående 450 kolumner som används mer sällan.

Många prestandaproblem i Oracle Analytics beror på att suboptimala SQL-frågor genereras på grund av designen. Genom att ändra designen kan du se till att Oracle Analytics genererar bättre SQL-frågor. Det här kan få stor effekt, inte bara när det gäller dina rapporters prestanda utan även mängden resurser som databasen förbrukar.