Comparazione delle prestazioni del RQG
Test delle prestazioni
performance/perfrun.pl
esegue tutte le query su un dato insieme di server tw e mostra i risultati.
perl performance/perfrun.pl --input-directory=... --dsn1=... --dsn2=... --output-file=... --filter=...
--input-directory
contiene le query da eseguire, una query per ogni file. I futuro vi saranno altre fonti per le query;--dsn1
e--dsn2
specificano dove si trovano i due server da comparare, nel formato degli URL di Perl DBI. Se le query non sono pienamente qualificate, il formato del DSN deve contenere il nome del database. Anche il nome utente e la password sono forniti via DSN. Per esempio:
--dsn1=dbi:mysql:host=127.0.0.1:port=19300:user=root:database=test \ --dsn2=dbi:mysql:host=127.0.0.1:port=19302:user=root:database=test
--output-file=...
specifica un file dove le query corrispondenti verranno scritte in una forma che sia adatta a filtrarle successivamente conperfreport
- Se
--filter
non è specificato, tutte le query dell'input verranno stampate;
Visualizzazione delle performance
Lo script performance/perfreport.pl
prende un file di ouput creato da perfrun
e stampa i suoi contenuti, eventualmente applicando un filtro nel processo:
perl performance/perfreport.pl --input-file=... --filter=...
Se --filter
non è specificato, tutte le query dell'input verranno stampate.
Filtri
Le query riportate dal sistema possono essere filtrate utilizzando le espressioni regolati basate su Perl. Un filtro può essere applicato durante la fase di raccolta dei dati, e questo determina quali informazioni vengono registrate nel file di output.
Se non si specifica alcun filtro, vengono stampate tutte le query.
Le seguenti variabili possono partecipare al filtraggio:
- Le variabili prese da
SHOW SESSION STATUS
, eccetto:- quelle che non vengono reimpostate all'inizio della query, comprese
Com_*
,Uptime
,Opened_files
e simili; - quelle relative alla crittografia SSL o alla cache delle query;
- quelle che non vengono reimpostate all'inizio della query, comprese
- Variabili prese da
SHOW GLOBAL STATUS LIKE 'Innodb_%'
Ad ogni variabile di stato di MySQL corrispondono 4 variabili Perl — il valore della variabile di MySQL in ogni server, le loro differenze assolute e il loro rapporto. Per esempio, per filtrare in Perl la variabile di MySQL Innodb_rows_read
, si possono utilizzare Innodb_rows_read1
, Innodb_rows_read2
, Innodb_rows_read_delta
e Innodb_rows_read_ratio
.
In aggiunta alle variabili di stato di MySQL, il framework fornisce le seguenti variabili:
$Execution_time{1|2|delta|ratio}
contiene il tempo di esecuzione della query in secondi. Il valore viene troncato ai millisecondi per prevenire rapporti di prestazioni esorbitanti sulle query molto veloci;$Temperature
può avere il valorecold
owarm
, a seconda che venga effettuata la prima o la seconda esecuzione della query.$Query
contiene il testo della query, per permettere un filtraggio del tipo$Query !~ m{l_receiptDATE}
Per esempio, la seguente invocazione da riga di comando:
--filter='($Execution_time1 > 0.1 || $Execution_time2 > 0.1) && $Temperature eq "warm"'
...esegue e stampa soltanto le query che hanno impiegato più di 0.1 secondi su un server "warm".
Formato su schermo
Il formato della visualizzazione ASCII su schermo è il seguente:
Query: SELECT l_linenumber FROM lineitem WHERE l_suppkey IN ( 10 , 1 ) AND l_shipdate NOT IN ( '1993-06-06' , '1998-02-04' , '1992-01-08' ) AND l_linenumber NOT IN ( 8 , 7 ) AND l_quantity <> 3 AND ( l_orderkey NOT IN ( 1298 , 93 ) OR l_suppkey = 10 ) AND ( l_suppkey BETWEEN 4 AND 10 + 4 OR l_linenumber = 2 AND l_commitDATE BETWEEN '1993-06-27' AND '1993-09-05' AND l_linenumber BETWEEN 3 AND 9 + 9 ); Cache: warm 5.3.0-MariaDB- 5.2.6-MariaDB- Delta Ratio ------------------------------------------------------------------------------------------------------- Execution time 0.011s 0.004s -0.007s 0.36 Innodb_buffer_pool_read_requests 2171 1836 -335 0.85 Handler_read_rnd 583 0 -583 Handler_read_next 583 602 19 1.03 Innodb_rows_read 1166 602 -564 0.52
Vengono visualizzate solo le variabili che hanno valori differenti sui due server. In questo esempio, la query è stata eseguita più lentamente su 5.3.0-MariaDB
con una cache "warm" e ha richiesto un numero doppio di Innodb_rows_read
.
Formato dei dati su disco
Il formato dei dati su disco consiste in oggetti Data::Dumper
, racchiusi nei tag <![CDATA[ ... ]]>
, senza che il file sia pieno di XML. La rappresentazione serializzata viene creata da GenTest::QueryPerformanceDelta::serialize()
e viene letta tramite eval()
in performance/perfreport.pl
.