Signatur
Beschreibung
mysqli_get_client_stats() gibt ein assoziatives Array mit detaillierten Statistiken zur aktuellen Nutzung der mysqlnd-Bibliothek (MySQL Native Driver) zurück. Diese Statistiken beziehen sich auf den gesamten PHP-Prozess und nicht auf eine einzelne Verbindung.
Das zurückgegebene Array enthält Kennzahlen wie die Anzahl der gesendeten und empfangenen Bytes, die Anzahl der ausgeführten Abfragen, Puffer-Informationen, Netzwerk-Traffic sowie Cache-Statistiken. Dies ist besonders nützlich beim Performance-Profiling oder beim Debuggen von Datenbankzugriffen in komplexen Anwendungen.
Wichtig: Diese Funktion steht nur zur Verfügung, wenn PHP mit dem mysqlnd-Treiber kompiliert wurde. Bei Verwendung von libmysqlclient ist die Funktion nicht verfügbar und gibt false zurück.
Im Gegensatz zu mysqli_get_connection_stats(), die Statistiken einer einzelnen Verbindung liefert, aggregiert mysqli_get_client_stats() alle Daten des gesamten Prozesses – ideal für globale Übersichten in Monitoring- oder Diagnose-Szenarien.
Rückgabewert
mysqlnd nicht verfügbar, wird false zurückgegeben. Die Schlüssel des Arrays umfassen u. a. bytes_sent, bytes_received, packets_sent, packets_received, protocol_overhead_in, result_set_queries, non_result_set_queries, buffered_sets, unbuffered_sets und viele weitere Metriken.Beispiele
Alle Client-Statistiken ausgeben
<?php
$stats = mysqli_get_client_stats();
if ($stats === false) {
echo 'mysqlnd ist nicht verfügbar.';
} else {
foreach ($stats as $key => $value) {
echo htmlspecialchars($key) . ': ' . htmlspecialchars($value) . PHP_EOL;
}
}
?>
Netzwerk-Traffic vor und nach einer Abfrage messen
<?php
$mysqli = new mysqli('localhost', 'user', 'password', 'testdb');
if ($mysqli->connect_errno) {
die('Verbindungsfehler: ' . $mysqli->connect_error);
}
$vorher = mysqli_get_client_stats();
$result = $mysqli->query('SELECT * FROM produkte LIMIT 100');
if ($result) {
$result->free();
}
$nachher = mysqli_get_client_stats();
$bytesDiff = $nachher['bytes_received'] - $vorher['bytes_received'];
echo 'Empfangene Bytes durch die Abfrage: ' . $bytesDiff . PHP_EOL;
$queriesDiff = $nachher['result_set_queries'] - $vorher['result_set_queries'];
echo 'Ausgeführte Result-Set-Abfragen: ' . $queriesDiff . PHP_EOL;
$mysqli->close();
?>
// Wichtig · Fallstricke
Verfügbarkeit: mysqli_get_client_stats() ist ausschließlich mit dem mysqlnd-Treiber verfügbar. Viele Hosting-Anbieter nutzen standardmäßig mysqlnd, aber in einigen älteren oder speziell konfigurierten Umgebungen kann libmysqlclient verwendet werden – dort ist die Funktion nicht vorhanden und führt zu einem fatalen Fehler oder gibt false zurück.
Die Statistiken sind prozessbezogen (nicht verbindungsbezogen) und werden für die gesamte Lebensdauer des PHP-Prozesses akkumuliert. In einer PHP-FPM-Umgebung bedeutet das, dass die Werte über mehrere Requests hinweg anwachsen können. Für verbindungsbezogene Statistiken sollte stattdessen mysqli_get_connection_stats() genutzt werden.
Die Funktion existiert nur in der prozeduralen Schreibweise – eine objektorientierte Variante ($mysqli->get_client_stats()) gibt es nicht.