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

Spesso a questa giusta domanda, a mio avviso, viene data una risposta errata citando le statistiche AWR. Queste presentano un metodo di attesa del sistema, in cui il tempo di risposta è considerato come la somma del tempo di lavoro dei processori (DB CPU) e dei tempi di attesa di diverse classi.
Con l'introduzione di Exadata, nella statistica AWR sono emerse specifiche attese del sistema legate al funzionamento del software Exadata. Di solito i nomi di queste attese iniziano con la parola “cell” (il server di archiviazione Exadata è chiamato cella), e le attese più comuni hanno nomi tutti descrittivi 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 pertanto non compaiono nemmeno nella sezione Top10 Foreground Events by Total Wait Time (in questo caso devono essere cercate nella sezione Foreground Wait Events). Con grande fatica abbiamo scoperto presso i nostri clienti un esempio di AWR giornaliero in cui le attese Exadata sono entrate nella sezione Top10 e in totale hanno rappresentato 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 more data from dblink
670,196
5471.5
8.16ms
3.3
Network 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.07us
2.3
Utente 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
Utente I/O
lettura percorso diretto
374,368
1811.3
4.84ms
1.1
Utente I/O
SQL*Net message from dblink
7,983
1725
216.08ms
1.1
Network 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
Utente I/O
lettura percorso diretto temp
520,211
808.4
1.55ms
0.5
Utente I/O
enq: TM — contesa
652
795.8
1220.55ms
0.5
Application
Dalla statistica AWR si fanno spesso tali conclusioni:
1. Il contributo della magia Exadata alle prestazioni del database non è alto — non supera il 5%, e il database "exadatizza" male.
2. Se un tale database venisse spostato da Exadata a un'architettura classica "server + array", le prestazioni non cambierebbero significativamente. Perché anche se questo array risultasse tre volte più lento del sistema di archiviazione Exadata (cosa che di certo è difficile per i moderni array All Flash), moltiplicando il 5% per tre otterremmo un incremento della quota di attese di I/O fino al 15% — un database del genere sicuramente lo sopporterebbe!
Entrambi questi risultati sono imprecisi, e anzi distorcono la comprensione dell'idea trasmessa da Exadata Software. Exadata non fornisce solo un rapido input/output, ma funziona in modo completamente diverso rispetto all'architettura classica "server + array". Se il lavoro del database è veramente "exadata-like", allora la logica SQL viene trasferita nel sistema di storage. Storage servers grazie a una serie di meccanismi speciali (in primo luogo gli Exadata Storage Indexes, ma non solo), trovano autonomamente i dati richiesti e li inviano ai server DB. Lo fanno in modo abbastanza efficiente, quindi la quota delle attese tipiche di Exadata nel tempo di risposta totale è bassa.
Come cambierà questa quota al di fuori di Exadata? Come influenzerà le prestazioni del database in generale? Le migliori risposte a queste domande derivano dai test. Ad esempio, l'attesa "cell smart table scan" al di fuori di Exadata può trasformarsi in una pesante scansione completa della tabella, causando un input/output che occupa tutto il tempo di risposta e deteriorando le prestazioni drammaticamente. È per questo che è errato considerare nel'analisi AWR la percentuale totale delle attese di Exadata come un contributo della sua magia nelle prestazioni, tanto meno usare questa percentuale per prevedere le prestazioni al di fuori di Exadata. Per comprendere quanto sia "exadata-like" il lavoro del database, è necessario studiare le statistiche AWR della sezione "Instance Activity Stats" (lì ci sono molte statistiche con nomi indicativi) e confrontarle tra loro.
E per capire come si comporterà il database al di fuori di Exadata, è meglio creare un clone del database a partire dal backup sull'architettura target e analizzare le prestazioni di questo clone sotto carico. Tale possibilità è generalmente disponibile per i possessori di Exadata.
Autore: Aleksej Strucenko, responsabile del dipartimento DB di "InfoSystem Jet"
Fonte: habr.com
