Con questo breve post vorrei fugare un malinteso riguardante l'analisi AWR dei database che operano su Oracle Exadata. Da quasi 10 anni mi trovo costantemente di fronte alla domanda: qual è il contributo del software Exadata alle prestazioni? O, usando termini creativi: quanto è "exadatizzato" il lavoro di un certo database?

Spesso a questa domanda corretta, a mio avviso, viene data una risposta errata basata sulle statistiche AWR. Queste presentano un metodo di attesa sistemica che interpreta il tempo di risposta come la somma del tempo di lavoro dei processori (DB CPU) e il tempo di attesa di varie classi.
Con l'arrivo di Exadata, nelle statistiche AWR sono emerse attese sistemiche specifiche legate al funzionamento del software Exadata. Di norma, i nomi di tali attese iniziano con la parola "cell" (il server di storage Exadata è denominato così), e quelle più comuni sono le attese con nomi esplicativi come "cell smart table scan", "cell multiblock physical read" e "cell single block physical read".
Nella maggior parte dei casi, la quota di tali attese Exadata nel tempo di risposta totale è bassa, e quindi non compare nemmeno nella sezione Top10 Foreground Events by Total Wait Time (in questo caso, occorre cercarle nella sezione Foreground Wait Events). Abbiamo faticato a trovare un esempio di AWR giornaliero tra i nostri clienti in cui le attese Exadata figurassero nella sezione Top10 e ammontassero a circa il 5%:
Evento
Attese
Tempo Totale di Attesa (sec)
Attesa Media
% Tempo DB
Classe di Attesa
DB CPU
115.2K
70.4
SQL*Net più dati da dblink
670,196
5471.5
8.16ms
3.3
Network 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.07us
2.3
User I/O
Sync ASM rebalance
4,350,012
3481.3
800.30us
2.1
Altro
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 messaggio da dblink
7,983
1725
216.08ms
1.1
Network 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 — contenzione
652
795.8
1220.55ms
0.5
Application
Da tali statistiche AWR si traggono spesso le seguenti conclusioni:
1. Il contributo della magia di Exadata alle prestazioni del database non è alto — non supera il 5%, e il database è "exadatizzato" male.
2. Se si trasferisce un tale database da Exadata a un'architettura classica "server + array", le prestazioni non cambieranno molto. Perché anche se questo array risultasse tre volte più lento del sistema di storage Exadata (il che è difficile per gli attuali array All Flash), moltiplicando il 5% per tre si otterrebbe un aumento della quota di attese I/O fino al 15% — un tale database sicuramente lo sopporterebbe!
Entrambe queste conclusioni sono imprecise e, anzi, distorcono la comprensione dell'idea alla base del software Exadata. Exadata non offre solo un input-output rapido, ma funziona in modo fondamentalmente diverso rispetto all'architettura classica "server + array". Se il lavoro del database è davvero "exadatizzato" — allora la logica SQL viene trasferita al sistema di storage. server Lo Storage, grazie a una serie di meccanismi speciali (in primo luogo gli Exadata Storage Indexes, ma non solo), trova autonomamente i dati necessari e li invia ai server DB. Lo fa in modo piuttosto efficiente, quindi la quota di attese Exadata caratteristiche nel tempo di risposta totale è bassa.
Come cambierà questa quota al di fuori di Exadata? Come influirà sulle prestazioni del database nel suo complesso? La cosa migliore per rispondere a queste domande è eseguire dei test. Ad esempio, l'attesa "cell smart table scan" al di fuori di Exadata può trasformarsi in un costoso Table Full Scan, tanto che l'input-output occupa tutto il tempo di risposta e le prestazioni peggiorano drammaticamente. Proprio per questo non è corretto, nell'analisi AWR, considerare la percentuale totale di attese Exadata come un contributo della sua magia alle prestazioni e tanto meno usare questa percentuale per prevedere le prestazioni al di fuori di Exadata. Per capire quanto sia "exadatizzato" il lavoro di un database, è necessario esaminare le statistiche AWR della sezione "Instance Activity Stats" (lì ci sono molte statistiche con nomi esplicativi) e confrontarle fra loro.
E per capire come si comporterà il database al di fuori di Exadata, la cosa migliore è effettuare un clone del database dalla backup sull'architettura target e analizzare le prestazioni di questo clone sotto carico. Questa opportunità è di solito disponibile per chi possiede Exadata.
Autore: Aleksey Struchenko, responsabile del settore DB «Infosystem Jet»
Fonte: habr.com
