Met deze korte post wil ik een misverstand ontkrachten dat verband houdt met de AWR-analyse van databases die draaien op Oracle Exadata. Al bijna 10 jaar krijg ik steeds de vraag: wat is de bijdrage van Exadata Software aan de prestaties? Of in nieuwe termen: in hoeverre is de werking van elk database 'exadata't?

Vaak wordt er op deze juiste vraag, naar mijn mening, een onjuist antwoord gegeven met een verwijzing naar AWR-statistieken. Hierin wordt een methode voor systeemwachttijden gepresenteerd, die de responstijd interpreteert als de som van de tijd dat de processors werken (DB CPU) en de tijd van wachttijden van verschillende klassen.
Met de komst van Exadata zijn er specifieke systeemwachttijden aan de AWR-statistieken toegevoegd, gerelateerd aan de werking van Exadata Software. Gewoonlijk beginnen de namen van deze wachttijden met het woord 'cell' (de cell is de Exadata Storage server), en de meest voorkomende wachttijden hebben sprekende namen zoals 'cell smart table scan', 'cell multiblock physical read' en 'cell single block physical read'.
In de meeste gevallen is het aandeel van zulke Exadata-wachttijden in de totale responstijd klein, en daarom komen ze zelfs niet in de sectie Top10 Foreground Events by Total Wait Time voor (in dat geval moeten ze worden gezocht in de sectie Foreground Wait Events). We hebben met moeite een voorbeeld van een dagelijkse AWR bij onze klanten gevonden waarin Exadata-wachttijden in de Top10-sectie voor kwamen en gezamenlijk ongeveer 5% uitmaakten:
Evenement
Wachttijden
Totale wachttijd (sec)
Gem. wachttijd
% DB tijd
Wachtklasse
DB CPU
115,2K
70.4
SQL*Net meer gegevens van dblink
670,196
5471.5
8,16ms
3.3
Netwerk global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy stats timeout 30s user haproxy group haproxy daemondefaults log global mode http option httplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000frontend http_front bind *:80 stats uri /haproxy?stats default_backend http_backbackend http_back balance roundrobin server server_name1 private_ip1:80 check server server_name2 private_ip2:80 check
cell single block physical read
5,661,452
3827.6
676,07µs
2.3
User I/O
Sync ASM rebalance
4,350,012
3481.3
800,30µs
2.1
Overig
cell multiblock physical read
759,885
2252
2,96ms
1.4
User I/O
direct path read
374,368
1811.3
4,84ms
1.1
User I/O
SQL*Net bericht van dblink
7,983
1725
216,08ms
1.1
Netwerk global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy stats timeout 30s user haproxy group haproxy daemondefaults log global mode http option httplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000frontend http_front bind *:80 stats uri /haproxy?stats default_backend http_backbackend http_back balance roundrobin server server_name1 private_ip1:80 check server server_name2 private_ip2:80 check
cell smart table scan
1,007,520
1260.7
1,25ms
0.8
User I/O
direct path read temp
520,211
808.4
1,55ms
0.5
User I/O
enq: TM — contentie
652
795.8
1220,55ms
0.5
) — dit is de enige plek waar je de backend hoeft op te geven. Alles andere past transparant in het concept “specificatie->wrapper”, waar we het verder over zullen hebben.
Van dergelijke AWR-statistieken worden vaak de volgende conclusies getrokken:
1. De bijdrage van de magie van Exadata aan de databaseprestaties is niet hoog — het overschrijdt niet de 5%, en de database 'exedata't' slecht.
2. Als zo'n database van Exadata naar een klassieke architectuur 'server + array' wordt overgezet, zal de prestatie niet veel veranderen. Want zelfs als deze array drie keer langzamer blijkt te zijn dan het opslag systeem van Exadata (wat voor moderne All Flash arrays nauwelijks mogelijk is), dan vermenigvuldigen we 5% met drie en krijgen we een toename van de wachtijden voor invoer en uitvoer tot 15% — dit kan de database zeker overleven!
Beide deze outputs zijn onnauwkeurig, bovendien vervormen ze het begrip van het idee dat in Exadata Software is gelegd. Exadata zorgt niet alleen voor snelle input-output, het werkt fundamenteel anders dan de klassieke architectuur van 'server + opslag'. Als de database echt ‘exadata’ is, wordt de SQL-logica overgebracht naar het opslagsysteem. Storage servers dankzij een reeks speciale mechanismen (voornamelijk Exadata Storage Indexes, maar niet alleen) vinden zij zelf de benodigde gegevens en sturen deze naar de DB-servers. Ze doen dit vrij efficiënt, waardoor het aandeel van typische Exadata-wachttijden in de totale reactie-tijd klein is.
Hoe verandert dit aandeel buiten Exadata? Wat zijn de gevolgen voor de algehele databasesprestaties? Deze vragen kunnen het beste worden beantwoord door testen. Bijvoorbeeld, de wachttijd ‘cell smart table scan’ buiten Exadata kan veranderen in een zware Table Full Scan, waardoor de input-output alle tijd voor de reactie in beslag neemt en de prestaties dramatisch verslechteren. Daarom is het onjuist om bij de analyse van AWR het totale percentage van Exadata-wachttijden als bijdrage van zijn magie aan de prestaties te beschouwen, laat staan om dit percentage te gebruiken voor het voorspellen van de prestaties buiten Exadata. Om te begrijpen hoe ‘exadata’ de werking van de database is, moet je de statistieken van de AWR-sectie “Instance Activity Stats” bestuderen (daar zijn veel statistieken met veelzeggende namen) en ze met elkaar vergelijken.
Om te begrijpen hoe de database zich buiten Exadata zal voelen, is het het beste om uit een back-up een kloon van de database te maken op de doelarchitectuur en de prestaties van deze kloon onder belasting te analyseren. Gewoonlijk hebben eigenaren van Exadata deze mogelijkheid.
Auteur: Aleksey Struchenko, hoofd van de DB-afdeling bij 'Infosystemy Jet'
Bron: habr.com
