get_connection_stats
Erläuterung der Funktion mysqli_get_connection_stats() in PHP, die Statistiken einer MySQL-Verbindung zurückgibt.
Die Funktion mysqli_get_connection_stats() gibt eine detaillierte Momentaufnahme der Low-Level-Statistiken einer MySQL-Verbindung zurück — übertragene Bytes, Abfrageanzahl, Puffergrößen und Dutzende weiterer Zähler, die vom zugrunde liegenden mysqlnd-Treiber erfasst werden. Diese Seite erklärt, was die Funktion zurückgibt, wann sie sinnvoll eingesetzt wird und wie die wichtigsten Werte zu lesen sind.
Was mysqli_get_connection_stats() macht
mysqli_get_connection_stats() gibt ein assoziatives array mit Laufzeitstatistiken für eine einzelne, bereits geöffnete MySQLi-Verbindung zurück. Die Zähler stammen von mysqlnd (dem MySQL Native Driver), dem Standard-Treiber, der seit PHP 5.4 mit PHP ausgeliefert wird. Die Funktion ist daher auf jeder modernen PHP-Installation verfügbar, solange mysqlnd verwendet wird.
Die Signatur lautet:
mysqli_get_connection_stats(mysqli $mysql): array- Parameter —
$mysqlist ein gültigesmysqli-Objekt, das vonmysqli_connect()(prozedural) odernew mysqli(...)(objektorientiert) zurückgegeben wird. - Rückgabewert — ein array mit
string => int|string-Paaren. Es gibt nur dannfalsezurück, wenn der Treiber keine Statistiken liefern kann (was bei einem normalen mysqlnd-Build praktisch nie vorkommt).
Ein wichtiger Unterschied: Diese Werte sind verbindungsbezogene Statistiken. Wenn Sie prozessweite Gesamtwerte über alle Verbindungen des aktuellen PHP-Requests benötigen, verwenden Sie stattdessen mysqli_get_client_stats().
Verwendung
Öffnen Sie eine Verbindung und übergeben Sie sie dann an die Funktion. Sowohl der prozedurale als auch der objektorientierte Stil funktionieren:
<?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() gibt das vollständige array aus, das mehr als 160 Einträge enthält. Ein gekürztes Beispiel sieht so aus:
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
...
)Die wichtigsten Zähler verstehen
Selten werden alle 160 Werte benötigt. Die folgenden sind besonders aufschlussreich:
| Zähler | Bedeutung |
|---|---|
bytes_sent / bytes_received | Gesamtnutzlast, die über das Netzwerk übertragen wurde, in Bytes. Nützlich, um überdimensionierte Ergebnismengen zu erkennen. |
packets_sent / packets_received | Anzahl der Protokollpakete — ein hohes Verhältnis zu den Bytes kann auf häufige Round-Trips hinweisen. |
connect_success / connect_failure | Anzahl erfolgreicher oder fehlgeschlagener Verbindungsversuche für dieses Handle. |
com_query | Anzahl der mit COM_QUERY gesendeten Anweisungen (d. h. nicht vorbereitete Abfragen). |
rows_fetched_from_server_normal | Vom Server für gepufferte Ergebnisse gesendete Zeilen — eine schnelle Methode, um versehentliche Volltabellenlesevorgänge zu erkennen. |
result_set_queries | Abfragen, die eine Ergebnismenge produziert haben. |
Da die meisten dieser Werte Ganzzahlen sind, können Sie einen einzelnen Wert direkt aus dem array auslesen:
<?php
$stats = mysqli_get_connection_stats($mysqli);
echo "Bytes received so far: " . $stats['bytes_received'] . PHP_EOL;Wann verwenden?
mysqli_get_connection_stats() ist sinnvoll, wenn Sie:
- Datenübertragung profilieren — prüfen, ob eine Abfrage deutlich mehr Zeilen oder Bytes als erwartet abruft.
- Verbindungsverhalten debuggen —
connect_failureoder verbindungsbezogene Zähler prüfen, wenn eine Verbindung instabil erscheint. - Einfache Diagnosen erstellen — nach einem Request einige Zähler protokollieren, um die Datenbankauslastung im Laufe der Zeit zu verfolgen.
Es handelt sich um ein reines Inspektionswerkzeug: Der Aufruf ändert weder die Verbindung noch die Daten. Zur allgemeinen Verbindungseinrichtung und -beendigung siehe mysqli_connect() und mysqli_close(); für Fehlerdetails siehe mysqli_connect_error().
Fazit
mysqli_get_connection_stats() stellt die verbindungsbezogenen Zähler von mysqlnd als einfaches array bereit und bietet damit einen unkomplizierten Einblick in die übertragene Datenmenge und die Anzahl der ausgeführten Abfragen einer Verbindung. In Kombination mit mysqli_get_client_stats() für requestweite Gesamtwerte ist es eine praktische, kostenfreie Möglichkeit, MySQL-Interaktionen zu profilieren und zu debuggen.