get_connection_stats
Функция mysqli_get_connection_stats() в PHP возвращает статистику по соединению MySQL: байты, запросы, буферы и другие счётчики mysqlnd.
Функция mysqli_get_connection_stats() возвращает подробный снимок низкоуровневой статистики о соединении MySQL — переданные байты, количество запросов, размеры буферов и десятки других счётчиков, собираемых базовым драйвером mysqlnd. На этой странице объясняется, что возвращает функция, когда она действительно полезна и как читать наиболее важные значения.
Что делает mysqli_get_connection_stats()
mysqli_get_connection_stats() возвращает ассоциативный array со статистикой времени выполнения для одного уже открытого соединения MySQLi. Счётчики поступают от mysqlnd (MySQL Native Driver) — драйвера по умолчанию, входящего в состав PHP начиная с PHP 5.4, поэтому функция доступна в любой современной установке PHP при использовании mysqlnd.
Её сигнатура:
mysqli_get_connection_stats(mysqli $mysql): array- Параметр —
$mysql— корректный объектmysqli, возвращённый функциейmysqli_connect()(процедурный стиль) илиnew mysqli(...)(объектно-ориентированный стиль). - Возвращаемое значение — array пар
string => int|string. Возвращаетfalseтолько в том случае, если драйвер не может предоставить статистику (что практически никогда не происходит при нормальной сборке mysqlnd).
Ключевое отличие: это статистика на уровне соединения. Если вам нужны общие итоги по всем соединениям в текущем PHP-запросе, используйте mysqli_get_client_stats().
Как использовать
Откройте соединение, затем передайте его в функцию. Поддерживаются как процедурный, так и объектно-ориентированный стиль:
<?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() выводит полный array, содержащий более 160 записей. Сокращённый пример выглядит так:
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
...
)Наиболее полезные счётчики
Редко когда нужны все 160 значений. Вот те, за которыми стоит следить:
| Счётчик | Значение |
|---|---|
bytes_sent / bytes_received | Общий объём данных, переданных по сети, в байтах. Помогает выявить чрезмерно большие результирующие наборы. |
packets_sent / packets_received | Количество протокольных пакетов — высокое соотношение к байтам может указывать на большое число мелких обращений. |
connect_success / connect_failure | Количество успешных и неудачных попыток подключения для данного дескриптора. |
com_query | Количество запросов, отправленных с помощью COM_QUERY (то есть неподготовленных запросов). |
rows_fetched_from_server_normal | Строки, отправленные сервером для буферизованных результатов — быстрый способ обнаружить случайное чтение всей таблицы. |
result_set_queries | Запросы, вернувшие результирующий набор. |
Поскольку большинство этих значений являются целыми числами, вы можете получить нужный счётчик напрямую из array:
<?php
$stats = mysqli_get_connection_stats($mysqli);
echo "Bytes received so far: " . $stats['bytes_received'] . PHP_EOL;Когда применять
Используйте mysqli_get_connection_stats(), когда вам нужно:
- Профилировать передачу данных — убедиться, что запрос не возвращает значительно больше строк или байт, чем ожидалось.
- Отлаживать поведение соединения — проверять счётчики
connect_failureили связанные с повторным подключением при нестабильном соединении. - Создавать лёгкую диагностику — логировать несколько счётчиков после запроса для отслеживания нагрузки на базу данных со временем.
Это инструмент только для чтения: вызов функции никогда не изменяет соединение или данные. Для настройки и завершения соединения смотрите mysqli_connect() и mysqli_close(); для получения сведений об ошибках — mysqli_connect_error().
Заключение
mysqli_get_connection_stats() предоставляет per-connection счётчики mysqlnd в виде обычного array, давая удобный доступ к информации о том, сколько данных было передано через соединение и сколько запросов оно выполнило. В сочетании с mysqli_get_client_stats() для общих итогов по запросу это удобный и бесплатный способ профилировать и отлаживать взаимодействие с MySQL.