Start · Sprachen · PHP · Referenz · mysqli_get_client_stats

mysqli_get_client_stats

Funktion

Liefert prozessbezogene Client-Statistiken der <code>mysqlnd</code>-Bibliothek als assoziatives Array.

seit PHP 5.3.0 Kategorie: db

Signatur

mysqli_get_client_stats(): array|false

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

Typ
array|false
Beschreibung
Gibt ein assoziatives Array mit Client-Statistiken zurück. Ist 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;
    }
}
?>
bytes_sent: 0 bytes_received: 0 packets_sent: 0 packets_received: 0 ...

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();
?>
Empfangene Bytes durch die Abfrage: 4821 Ausgeführte Result-Set-Abfragen: 1

// 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.