Start · Sprachen · PHP · Referenz · mysqli_get_connection_stats

mysqli_get_connection_stats

Funktion

Gibt Verbindungsstatistiken der aktuellen <code>mysqli</code>-Verbindung zurück (nur verfügbar mit mysqlnd-Treiber).

seit PHP 5.3.0 Kategorie: db

Signatur

mysqli_get_connection_stats(mysqli $mysql): array|false

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

Typ
array|false
Beschreibung
Gibt ein assoziatives Array mit Verbindungsstatistiken zurück. Ist mysqlnd nicht verfügbar, wird 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();
?>
Gesendete Bytes: 148 Empfangene Bytes: 312 Gesendete Pakete: 3 Empfangene Pakete: 6

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();
?>
Übertragene Bytes für diese Abfrage: 48320

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