get_connection_stats
Guida alla funzione mysqli_get_connection_stats() in PHP per ottenere statistiche dettagliate su una connessione MySQL tramite il driver mysqlnd.
La funzione mysqli_get_connection_stats() restituisce un'istantanea dettagliata di statistiche di basso livello su una connessione MySQL — byte trasferiti, conteggi delle query, dimensioni dei buffer e decine di altri contatori raccolti dal driver sottostante mysqlnd. Questa pagina spiega cosa restituisce la funzione, quando è davvero utile e come leggere i valori più importanti.
Cosa fa mysqli_get_connection_stats()
mysqli_get_connection_stats() restituisce un array associativo di statistiche di runtime per una singola connessione MySQLi già aperta. I contatori provengono da mysqlnd (il MySQL Native Driver), che è il driver predefinito incluso con PHP dalla versione 5.4, quindi la funzione è disponibile in ogni installazione PHP moderna purché sia in uso mysqlnd.
La sua firma è:
mysqli_get_connection_stats(mysqli $mysql): array- Parametro —
$mysqlè un oggettomysqlivalido restituito damysqli_connect()(stile procedurale) onew mysqli(...)(stile orientato agli oggetti). - Valore di ritorno — un array di coppie
string => int|string. Restituiscefalsesolo se il driver non riesce a fornire statistiche (praticamente mai in una build mysqlnd normale).
Una distinzione fondamentale: queste sono statistiche per connessione. Se desideri totali a livello di processo attraverso ogni connessione nella richiesta PHP corrente, usa invece mysqli_get_client_stats().
Come utilizzarla
Apri una connessione, poi passala alla funzione. Funzionano entrambi gli stili, procedurale e orientato agli oggetti:
<?php
// Procedural style
$mysqli = mysqli_connect("localhost", "username", "password", "database");
if (!$mysqli) {
die("Connection failed: " . mysqli_connect_error());
}
$stats = mysqli_get_connection_stats($mysqli);
print_r($stats);
mysqli_close($mysqli);<?php
// Object-oriented style — identical result
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_errno) {
die("Connection failed: " . $mysqli->connect_error);
}
$stats = $mysqli->get_connection_stats();
print_r($stats);
$mysqli->close();print_r() esegue il dump dell'intero array, che ha più di 160 voci. Un esempio ridotto appare così:
Array
(
[bytes_sent] => 43
[bytes_received] => 80
[packets_sent] => 1
[packets_received] => 2
[connect_success] => 1
[com_query] => 0
[rows_fetched_from_server_normal] => 0
[result_set_queries] => 0
...
)Lettura dei contatori più utili
Raramente hai bisogno di tutti i 160 valori. Questi sono quelli che vale la pena monitorare:
| Contatore | Significato |
|---|---|
bytes_sent / bytes_received | Payload totale trasmesso sulla rete, in byte. Utile per individuare result set troppo grandi. |
packets_sent / packets_received | Conteggi dei pacchetti di protocollo — un rapporto elevato rispetto ai byte può indicare round-trip eccessivi. |
connect_success / connect_failure | Quanti tentativi di connessione sono riusciti o falliti su questo handle. |
com_query | Numero di istruzioni inviate con COM_QUERY (cioè query non preparate). |
rows_fetched_from_server_normal | Righe inviate dal server per risultati bufferizzati — un modo rapido per individuare letture accidentali di tabelle intere. |
result_set_queries | Query che hanno prodotto un result set. |
Poiché la maggior parte di questi valori sono interi, puoi estrarne uno singolo direttamente dall'array:
<?php
$stats = mysqli_get_connection_stats($mysqli);
echo "Bytes received so far: " . $stats['bytes_received'] . PHP_EOL;Quando utilizzarla
Ricorri a mysqli_get_connection_stats() quando hai bisogno di:
- Profilare il trasferimento di dati — verificare che una query non stia recuperando molte più righe o byte del previsto.
- Debug del comportamento della connessione — controllare
connect_failureo i contatori legati alla riconnessione quando una connessione sembra instabile. - Costruire diagnostiche leggere — registrare alcuni contatori dopo una richiesta per monitorare il carico del database nel tempo.
È uno strumento di ispezione in sola lettura: chiamarla non modifica mai la connessione né i dati. Per la configurazione e la chiusura generale della connessione, vedi mysqli_connect() e mysqli_close(); per i dettagli sugli errori, vedi mysqli_connect_error().
Conclusione
mysqli_get_connection_stats() espone i contatori per connessione di mysqlnd come un semplice array, offrendoti una finestra facile su quanti dati una connessione ha trasferito e quante query ha eseguito. Combinata con mysqli_get_client_stats() per i totali a livello di richiesta, è un modo pratico e a costo zero per profilare e fare debug delle tue interazioni con MySQL.