PDA

View Full Version : [MYSQL] Rilevare numero queries effettuate


biowep
25-11-2013, 20:15
Ciao, vorrei rilevare il numero di queries che uno script effettua. Non ho la possibilità di modificare tale script, per cui posso usare solo gli strumenti di PHP e MYSQL.

Ho pensato di effettuare una query prima di eseguire tale script dalla quale estraggo il conteggio query totale. Il problema è che non so esattamente cosa usare perché in mysql ci sono 2 voci di statistiche "Questions" e "Queries" e non ho capito la differenza.

In pratica voglio contare le queries di Joomla ma il attivando il debug mi dice che il numero è differente (sempre minore di 2). Si, ho controllato anche senza il debug attivato (nel caso tale sistema eseguisse delle queriesaggiuntive) ed il numero che ottengo è sempre quello.<?php
$db = new mysqli("localhost", "root", "", "joomla2");
if ($db->error) die($db->errno);
$queries = $db->query('SHOW GLOBAL STATUS LIKE "questions"')->fetch_array()[1];
$time = microtime(TRUE);
require 'index.php';
$time = microtime(TRUE)-$time;
$queries = $db->query('SHOW GLOBAL STATUS LIKE "questions"')->fetch_array()[1] - $queries - 1;//-1 perché quella precedente era una query
?>
<div style="background:#000; color:#fff">
Execution time: <?php echo $time*1000; ?>ms
<br />
Queries: <?php echo $queries; ?>
</div>
Se invece di questions uso queries il numero calcolato è +1;

airon
25-11-2013, 20:51
A quanto ricordi, se attivi il modulo debug e lo sistemi per bene ti fa vedere le query totali sulla pagina e il tempo impiegato tra query e rendering, memoria usata ecc.
E' fatto apposta. Dubito tu debba fare come stai facendo :)

biowep
25-11-2013, 22:17
In realtà volevo fare dei test sulla velocità di esecuzione, per cui eseguo la pagina tante volte e faccio dei calcoli sul tempo totale e numero di query effettuate. Inoltre volevo provare anche altri cms per fare delle comparazioni con joomla.

Credo di aver risolto, lo scrivo nel caso servisse.
Lo script finale è questo:
<?php
$db = new mysqli("localhost", "root", "", "nomeDatabase");
if ($db->error) die($db->error);
$queries = $db->query('SHOW GLOBAL STATUS LIKE "questions"')->fetch_array(MYSQLI_NUM)[1];//(string)
$time = microtime(TRUE);
require 'index.php';
$time = microtime(TRUE)-$time;
//siccome potrei aver numeri molto grandi, uso una funzione che lavora con le stringhe
$queries = (int)bcsub($db->query('SHOW GLOBAL STATUS LIKE "questions"')->fetch_array(MYSQLI_NUM)[1], $queries, 0) - 2;
?>
Sottraggo 2 al numero totale di queries perché anche la connessione è conteggiata come "question", l'altra è ovviamente quella in cui chiedo il numero di queries. A questo punto attivando il sistema di debug di Joomla le query che compaiono sono [quelle che ho contato] - 1. Quella che manca è la connessione al dbms che giustamente non viene considerata query ma comunque conteggiata nelle statistiche di mysql.