Signatur
Beschreibung
mysqli_get_connection_stats() liefert ein assoziatives Array mit detaillierten Statistiken zur aktuellen Datenbankverbindung. Diese Statistiken werden vom MySQL Native Driver (mysqlnd) gesammelt und umfassen unter anderem Informationen über gesendete und empfangene Bytes, Puffernutzung, Anzahl von Abfragen sowie Verbindungsaufbau-Zähler.
Die Funktion ist ausschließlich verfügbar, wenn PHP mit dem mysqlnd-Treiber kompiliert wurde. Bei Verwendung der libmysqlclient-Bibliothek steht sie nicht zur Verfügung und gibt false zurück.
Typische Einsatzgebiete sind Performance-Analysen, Debugging von Datenbankoperationen sowie die Überwachung von Verbindungsverhalten in Produktionsumgebungen. Die zurückgegebenen Metriken helfen dabei, unnötig viele Abfragen oder großen Datentransfer zu identifizieren.
Ergänzend zu dieser verbindungsspezifischen Funktion gibt es mysqli_get_client_stats(), die prozessweite Statistiken über alle bisherigen Verbindungen zusammenfasst.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $mysql Pflicht | mysqli | Eine aktive mysqli-Verbindungsinstanz, wie sie von mysqli_connect() oder new mysqli() zurückgegeben wird. |
Rückgabewert
false zurückgegeben. Das Array enthält Schlüssel wie bytes_sent, bytes_received, packets_sent, packets_received, protocol_overhead_in, rows_fetched_from_server_normal u. v. m.Beispiele
Verbindungsstatistiken ausgeben
<?php
$mysqli = new mysqli('localhost', 'root', 'secret', 'testdb');
if ($mysqli->connect_error) {
die('Verbindungsfehler: ' . $mysqli->connect_error);
}
// Einige Abfragen ausführen
$mysqli->query('SELECT 1');
$mysqli->query('SELECT 2');
$stats = mysqli_get_connection_stats($mysqli);
if ($stats === false) {
echo 'mysqlnd ist nicht verfügbar.';
} else {
echo 'Gesendete Bytes: ' . $stats['bytes_sent'] . PHP_EOL;
echo 'Empfangene Bytes: ' . $stats['bytes_received'] . PHP_EOL;
echo 'Gesendete Pakete: ' . $stats['packets_sent'] . PHP_EOL;
echo 'Empfangene Pakete: ' . $stats['packets_received'] . PHP_EOL;
}
$mysqli->close();
?>
Performance-Analyse: Datentransfer vor und nach einer Abfrage messen
<?php
$mysqli = new mysqli('localhost', 'root', 'secret', 'testdb');
$statsBefore = mysqli_get_connection_stats($mysqli);
// Abfrage mit potenziell großem Ergebnis
$result = $mysqli->query('SELECT * FROM large_table LIMIT 1000');
while ($row = $result->fetch_assoc()) {
// Verarbeitung ...
}
$result->free();
$statsAfter = mysqli_get_connection_stats($mysqli);
$bytesTransferred = $statsAfter['bytes_received'] - $statsBefore['bytes_received'];
echo 'Übertragene Bytes für diese Abfrage: ' . $bytesTransferred . PHP_EOL;
$mysqli->close();
?>
// Wichtig · Fallstricke
Treiber-Abhängigkeit: Die Funktion ist nur mit dem MySQL Native Driver (mysqlnd) verfügbar. Wird PHP gegen die externe libmysqlclient gelinkt, gibt die Funktion false zurück. Seit PHP 5.4.0 ist mysqlnd der Standard-Treiber für MySQL-Erweiterungen.
Prozessweite vs. verbindungsspezifische Statistiken: mysqli_get_connection_stats() liefert nur Metriken der übergebenen Verbindung. Für prozessweite Statistiken aller jemals geöffneten Verbindungen sollte mysqli_get_client_stats() verwendet werden.
Die Schlüssel des zurückgegebenen Arrays sind zahlreich (über 60 Einträge); eine vollständige Liste findet sich in der offiziellen PHP-Dokumentation unter den mysqlnd-Statistiken.