Prestaties van relationele databasequery's afstemmen

Veel klanten ervaren prestatieproblemen met toepassingen voor datawarehouse. In enkele gevallen zijn de SQL-query's die door Oracle Analytics worden gegenereerd ingewikkeld te analyseren. Dit onderwerp biedt enkele richtlijnen voor hoe u prestatieproblemen kunt analyseren en minimaliseren die kunnen voortkomen uit de SQL-query's die zijn gegenereerd door Oracle Analytics.

In dit onderwerp worden geen prestatieproblemen beschreven die veroorzaakt worden door uw netwerk, browser of presentatie van een rapport.

Het querylogbestand voor Oracle Analytics analyseren (Logbestandniveau 3 vereist)

Voor informatie over hoe u dit logbestand kunt vinden of de inhoud kunt begrijpen, zie Querylogbestanden verzamelen en analyseren.

  1. Vergelijk de hoeveelheid tijd die uw query spendeert in Oracle Analytics met de gespendeerde tijd in de database, ofwel de responstijd ten opzichte van de duur van de fysieke query. Normaal gesproken bedraagt de in Oracle Analytics gespendeerde tijd niet meer dan enkele seconden.
  2. Als de responstijd langer is dan enkele seconden, analyseer dan de afzonderlijke stappen die in Oracle Analytics worden genomen, om de oorzaak te achterhalen (logbestandsniveau 5 vereist).

De fysieke SQL-query analyseren

  1. Controleer of alle in de query opgenomen tabellen noodzakelijk zijn. Zoek naar tabellen die samengevoegd zijn, maar niet zijn opgenomen in de clausule SELECT en of ze geen filters hebben toegepast (echte filters, geen joinvoorwaarden).
  2. Stel vast hoeveel fysieke query's en subquery's worden gegenereerd. Om precies te zijn, hoe vaak de query een feitentabel leest. In een perfecte wereld leest de query slechts eenmaal één feitentabel. Als er meer dan één feitentabel is, onderzoek dan waarom dat zo is en of u er een paar kunt verwijderen.
  3. Controleer op uitgesloten kolommen, niet-additieve aggregatieregels (REPORT_AGGREGATE, count(distinct)...), selectiestappen, een subquery in het rapport, ingestelde operatoren (UNION), totalen, subtotalen, meerdere weergaven, enzovoorts.
  4. Controleer op outer joins. Onderzoek waar ze vandaan komen en of u er enkele kunt verwijderen door het ontwerp te wijzigen.

Het uitvoeringsplan analyseren

Als het optimaliseren van de SQL niet voldoende is, analyseer dan het uitvoeringsplan om de hoofdoorzaak van uw prestatieproblemen te vinden. Vraag uw databasebeheerder (DBB) om u te helpen. Er zijn vier hoofdmanieren om op dit punt uw prestaties te verbeteren:
  1. Verklein het volume van input-output-aanroepen door toegangspaden voor gegevens (indexen) te verbeteren.
  2. Verklein het volume van input-output-aanroepen door het volume gelezen gegevens te verkleinen. U kunt bijvoorbeeld de toegepaste filters of de modelstructuur van de gegevens evalueren (zie de volgende sectie).
  3. Een groter parallellisme (het aantal threads dat wordt gebruikt om grote tabellen te lezen).
  4. Verbeter de snelheid van input-output-aanroepen (verbeteringen aan de infrastructuur, in-memory database, enzovoorts).

Evalueer en verbeter het gegevensmodel om het volume gelezen gegevens te verkleinen.

  1. Maak aggregatietabellen.
  2. Gebruik fragmentatie.

    Als gebruikers bijvoorbeeld met name gegevens uit het huidige jaar, kwartaal of de huidige maand selecteren, kunt u het feit in twee tabellen splitsen: huidig en archief. In de Oracle database kunt u ook gebruikmaken van partitionering.

  3. Gebruik denormalisatie om het aantal joins te verkleinen.
  4. Splits tabellen om het aantal kolommen te verkleinen.

    Het volume gelezen gegevens hangt niet alleen af van het aantal rijen in elke tabel. Het tabelvolume hangt ook af van het aantal en de grootte van de kolommen. U kunt bijvoorbeeld een grote tabel met 500 kolommen in twee tabellen splitsen: een tabel met de 50 meestgebruikte kolommen en een andere met de resterende 450 kolommen die weinig worden gebruikt.

Veel prestatieproblemen in Oracle Analytics komen voort uit slecht ontwerp, omdat slecht ontwerp ervoor zorgt dat suboptimale SQL-query's worden gegenereerd. Door het ontwerp te wijzigen, kunt u de SQL-query's verbeteren die door Oracle Analytics worden gegenereerd. Dit kan een enorme impact tot gevolg hebben, niet alleen op de prestaties van uw rapporten maar ook op het volume aan resources dat in de database wordt gebruikt.