W3docs

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.

Практика

Практика
Какова функция getConnectionStats() в PHP?
Какова функция getConnectionStats() в PHP?
Was this page helpful?