# Статистика

MySQL Native Driver поддерживает сбор статистики по взаимодействию клиента с сервером. Статистические данные собираются с двух основных точек:

- Клиентская статистика
- Статистика соединения

При работе с модулем mysqli эти статистические данные получают через два API-вызова:

- mysqli_get_client_stats()
- mysqli_get_connection_stats()

> Замечание: Статистика агрегируется по всем расширениям, которые работают через драйвер MySQL Native Driver. Например, при настройке модуля mysqli и MySQL-драйвера модуля PDO на работу с драйвером MySQLnd вызовы функций модуля mysqli и вызовы методов класса PDO влияют на статистику. Невозможно узнать, насколько конкретный API-вызов модуля, который скомпилировали с драйвером MySQL Native Driver, повлиял на конкретную статистику.

## Получение статистики

Клиентскую статистику получают через вызов функции mysqli_get_client_stats().

Статистику соединения получают через вызов функции mysqli_get_connection_stats().

Обе функции возвращают ассоциативный массив, в котором метрики статистики — ключи, которые соответствуют статистическим данным.

## Статистика драйвера MySQL Native Driver

Бо́льшая часть статистических данных связана с подключением, но отдельные данные связаны с процессом, и тогда это упоминается.

Следующая статистика выдается драйвером MySQL Native Driver:

Сетевая статистика
`bytes_sent`
  Количество байтов, которые PHP отправил MySQL-серверу.
`bytes_received`
  Количество байтов, которые PHP получил от MySQL-сервера.
`packets_sent`
  Количество пакетов, которые отправили по протоколу MySQL Client Server.
`packets_received`
  Количество пакетов, которые получили по протоколу MySQL Client Server.
`protocol_overhead_in`
  Накладные расходы протокола MySQL Client Server в байтах для входящего трафика. Пока накладными расходами признаётся только заголовок Packet Header (4 байта). `protocol_overhead_in = packets_received * 4`
`protocol_overhead_out`
  Накладные расходы протокола MySQL Client Server в байтах для исходящего трафика. Пока накладными расходами признаётся только заголовок Packet Header (4 байта). `protocol_overhead_out = packets_received * 4`
`bytes_received_ok_packet`
  Общий размер пакетов OK в байтах, которые драйвер получил по протоколу MySQL Client Server. Пакеты OK иногда содержат сообщение о статусе. Длина сообщения о статусе варьируется, поэтому размер пакета OK не фиксирован.

  > Замечание: Общий размер в байтах включает размер пакета заголовка — 4 байта, см. накладные расходы протокола.

`packets_received_ok`
  Количество полученных пакетов OK протокола MySQL Client Server.
`bytes_received_eof_packet`
  Общий размер пакетов EOF в байтах, которые драйвер получил по протоколу MySQL Client Server. Размер пакетов EOF варьируется и зависит от версии сервера. При ошибке в EOF-пакете также передаётся сообщение об ошибке.

  > Замечание: Общий размер в байтах включает размер пакета заголовка — 4 байта, см. накладные расходы протокола.

`packets_received_eof`
  Количество пакетов EOF протокола MySQL Client Server. Как и в случае с другой статистикой пакетов, количество пакетов будет увеличиваться, даже если PHP получит не ожидаемый пакет, а, например, сообщение об ошибке.
`bytes_received_rset_header_packet`
  Общий размер результирующего набора пакетов заголовков протокола MySQL Client Server в байтах. Размер пакетов варьируется в зависимости от полезной нагрузки (инструкции `LOAD LOCAL INFILE`, `INSERT`, `UPDATE`, `SELECT`, сообщение об ошибке).

  > Замечание: Общий размер в байтах включает размер пакета заголовка — 4 байта, см. накладные расходы протокола.

`packets_received_rset_header`
  Количество пакетов заголовков результирующего набора протокола MySQL Client Server.
`bytes_received_rset_field_meta_packet`
  Общий размер пакетов метаданных (информации о столбце) результирующего набора протокола MySQL Client Server в байтах. Конечно, размер зависит от столбцов в наборе результатов. При выполнении команды COM_LIST_FIELDS вместо пакета с метаданными передаётся пакет с ошибкой или EOF-пакет.

  > Замечание: Общий размер в байтах включает размер пакета заголовка — 4 байта, см. накладные расходы протокола.

`packets_received_rset_field_meta`
  Количество пакетов метаданных (информации о столбце) результирующего набора протокола MySQL Client Server.
`bytes_received_rset_row_packet`
  Общий размер пакетов данных строки результирующего набора протокола MySQL Client Server в байтах. Пакет также может передавать ошибку или пакет EOF. Количество ошибок и пакетов EOF вычисляют путём вычитания метрик `rows_fetched_from_server_normal` и `rows_fetched_from_server_ps` из метрики `bytes_received_rset_row_packet`.

  > Замечание: Общий размер в байтах включает размер пакета заголовка — 4 байта, см. накладные расходы протокола.

`packets_received_rset_row`
  Количество пакетов данных строки результирующего набора протокола MySQL Client Server.
`bytes_received_prepare_response_packet`
  Общий размер пакетов OK протокола MySQL Client Server для инициализации подготовленного запроса (init-пакеты подготовленного запроса) в байтах. Пакет также может передавать сообщение об ошибке. Размер пакета зависит от версии MySQL-сервера.

  > Замечание: Общий размер в байтах включает размер пакета заголовка — 4 байта, см. накладные расходы протокола.

`packets_received_prepare_response`
  Количество пакетов OK протокола MySQL Client Server для инициализации подготовленного запроса (init-пакеты подготовленного запроса).
`bytes_received_change_user_packet`
  Общий размер пакетов COM_CHANGE_USER протокола MySQL Client Server protocol в байтах. Пакет также может передавать ошибку или состояние EOF.

  > Замечание: Общий размер в байтах включает размер пакета заголовка — 4 байта, см. накладные расходы протокола.

`packets_received_change_user`
  Количество пакетов COM_CHANGE_USER протокола MySQL Client Server.
`packets_sent_command`
  Количество команд протокола MySQL Client Server, которые отправил PHP на MySQL-сервер. Нет способа узнать, какие именно команды и сколько из них отправил PHP.
`bytes_received_real_data_normal`
  Количество байтов полезной нагрузки, которые получил PHP-клиент от драйвера `mysqlnd` по текстовому протоколу. Это размер фактических данных, которые содержатся в наборах результатов, которые не исходят из подготовленных запросов и которые получил PHP-клиент. Обратите внимание, даже при извлечении драйвером `mysqlnd` полного набора результатов с MySQL-сервера в статистике учитываются только фактические данные, которые PHP-клиент получил от дайвера `mysqlnd`.

  Пример последовательности кода, которая увеличивает значение, выглядит следующим образом:

      $mysqli = new mysqli();
      $res = $mysqli->query("SELECT 'abc'");
      $res->fetch_assoc();
      $res->close();

  Каждая операция извлечения будет увеличивать значение.

  Однако значение метрики не увеличится, если результирующий набор только буферизуется на клиенте, но не извлекается, как, например, в следующем примере:

      $mysqli = new mysqli();
      $res = $mysqli->query("SELECT 'abc'");
      $res->close();

`bytes_received_real_data_ps`
  Количество байтов полезной нагрузки, которую получил PHP-клиент от драйвера `mysqlnd` по протоколу подготовленного запроса. Это размер фактических данных, которые содержатся в наборах результатов, которые не исходят из подготовленных запросов и которые получил PHP-клиент. Модуль не увеличит значение, если PHP-клиент впоследствии не прочитает набор результатов. Обратите внимание, что, хотя полный результирующий набор мог быть получен от MySQL-сервера через драйвер `mysqlnd`, в этой статистике учитываются только фактические данные, которые PHP-клиент получил от драйвера `mysqlnd`. Смотрите также описание метрики `bytes_received_real_data_normal`.

Статистические данные результирующего набора
`result_set_queries`
  Количество запросов, которые сгенерировали набор результатов. Примеры запросов, которые генерируют результирующий набор: `SELECT`, `SHOW`. Модуль не увеличивает значение метрики, если произойдет ошибка при чтении пакета заголовка результирующего набора из строки.

  > Замечание: Этой статистикой пользуются как косвенным показателем количества запросов, которые PHP отправил на MySQL-сервер. Это помогает определить клиента, который вызывает высокую нагрузку на базу данных.

`non_result_set_queries`
  Количество запросов, которые не создали набор результатов. Примеры запросов, которые не генерируют набор результатов: `INSERT`, `UPDATE`, `LOAD DATA`. Модуль не увеличивает значение метрики, если произойдет ошибка при считывании пакета заголовка результирующего набора из строки.

  > Замечание: Этой статистикой пользуются как косвенным показателем количества запросов, которые PHP отправил на MySQL-сервер. Это помогает определить клиента, который вызывает высокую нагрузку на базу данных.

`no_index_used`
  Количество запросов, которые создали набор результатов, но не использовали индекс. (Смотрите также параметр запуска `--log-queries-not-using-indexes` команды mysqld).

  > Замечание: Об этих запросах сообщают через исключение, для чего вызывают `mysqli_report(MYSQLI_REPORT_INDEX);`. Вместо этого можно сообщить о них через предупреждения путём вызова `mysqli_report(MYSQLI_REPORT_INDEX ^ MYSQLI_REPORT_STRICT);`.

`bad_index_used`
  Количество запросов, которые сгенерировали набор результатов без хорошего индекса. (Смотрите также параметр запуска `--log-slow-queries` команды mysqld).

  > Замечание: Об этих запросах сообщают через исключение, для чего вызывают `mysqli_report(MYSQLI_REPORT_INDEX);`. Вместо этого можно сообщить о них через предупреждения путём вызова `mysqli_report(MYSQLI_REPORT_INDEX ^ MYSQLI_REPORT_STRICT);`.

`slow_queries`
  SQL-запросы, выполнение которых заняло больше секунд, чем значение параметра `long_query_time`, и для проверки которых требовало как минимум такое количество строк, которое задали в параметре `min_examined_row_limit`.
  Предостережение

  Не сообщается через функцию mysqli_report().

`buffered_sets`
  Количество буферизованных результирующих наборов, которые возвращают обычные неподготовленные запросы.

  Примеры вызовов API, которые буферизуют наборы результатов на клиенте: mysqli_query(), mysqli_store_result(), mysqli_stmt_get_result()

`unbuffered_sets`
  Количество небуферизованных результирующих наборов, которые возвращают обычные неподготовленные запросы.

  Примеры вызовов API, которые не буферизуют наборы результатов на клиенте: mysqli_use_result()

`ps_buffered_sets`
  Количество буферизованных наборов результатов, которые возвращают подготовленные запросы.

  Примеры вызовов API, которые буферизуют наборы результатов на клиенте: mysqli_stmt_store_result()

`ps_unbuffered_sets`
  Количество небуферизованных наборов результатов, которые возвращают подготовленные запросы. По умолчанию подготовленные запросы не буферизуются, поэтому эта метрика учтёт большинство подготовленных запросов.
`flushed_normal_sets`
  Количество результирующих наборов, которые возвращают обычные неподготовленные запросы с непрочитанными данными, которые были без предупреждения сброшены.

  > Замечание: Модуль сбрасывает только небуферизованные наборы результатов. Небуферизованные результирующие наборы должны быть полностью получены перед выполнением нового запроса по соединению, иначе MySQL-сервер выдаст ошибку. Если приложение не извлекает все строки из небуферизованного результирующего набора, команда mysqlnd неявно извлекает результирующий набор, чтобы очистить строку. Смотрите также описание метрик `rows_skipped_normal`, `rows_skipped_ps`.

  > Некоторые причины неявного сброса:

  > - Ошибка клиентского приложения
  > - Клиент прекратил чтение данных, когда нашёл то, что искал, но заставил MySQL-сервер вычислять больше записей, чем требуется
  > - Клиентское приложение неожиданно остановилось

`flushed_ps_sets`
  Количество результирующих наборов с непрочитанными данными, которые вернули подготовленные запросы и которые были без предупреждения сброшены.

  > Замечание: Модуль сбрасывает только небуферизованные наборы результатов. Небуферизованные результирующие наборы должны быть полностью получены перед выполнением нового запроса по соединению, иначе MySQL-сервер выдаст ошибку. Если приложение не извлекает все строки из небуферизованного результирующего набора, команда mysqlnd неявно извлекает результирующий набор, чтобы очистить строку. Смотрите также описание метрик `rows_skipped_normal`, `rows_skipped_ps`.

  > Некоторые причины неявного сброса:

  > - Ошибка клиентского приложения
  > - Клиент прекратил чтение данных, когда нашёл то, что искал, но заставил MySQL-сервер вычислять больше записей, чем требуется
  > - Клиентское приложение неожиданно остановилось

`ps_prepared_never_executed`
  Количество запросов, которые подготовили, но не выполнили.
`ps_prepared_once_executed`
  Количество подготовленных запросов, которые выполнили только один раз.
`rows_fetched_from_server_normal`
`rows_fetched_from_server_ps`
  Общее количество строк результирующего набора, которые вернул сервер. Сюда входят строки, которые клиент не прочитал, но неявно получил из-за сброшенных небуферизованных результирующих наборов. Смотрите также описание метрики `packets_received_rset_row`.
`rows_buffered_from_client_normal`
  Общее количество буферизованных строк, которые получили в результате обычного запроса. Это количество строк, которые вернул MySQL-сервер и буферизовал клиент.

  Примеры запросов, которые буферизуют результаты:

  - mysqli_query()
  - mysqli_store_result()
`rows_buffered_from_client_ps`
  То же, что и метрика `rows_buffered_from_client_normal`, но для подготовленных запросов.
`rows_fetched_from_client_normal_buffered`
  Общее количество строк, которые извлёк клиент из буферизованного результирующего набора, который создал обычный запрос.
`rows_fetched_from_client_ps_buffered`
  Общее количество строк, которые извлёк клиент из буферизованного результирующего набора, который создал подготовленный запрос.
`rows_fetched_from_client_normal_unbuffered`
  Общее количество строк, которые извлёк клиент из небуферизованного результирующего набора, который создал обычный запрос.
`rows_fetched_from_client_ps_unbuffered`
  Общее количество строк, которые извлёк клиент из небуферизованного результирующего набора, который создал подготовленный запрос.
`rows_fetched_from_client_ps_cursor`
  Общее количество строк, которые клиент извлёк из курсора, который создал подготовленный запрос.
`rows_skipped_normal`
`rows_skipped_ps`
  Метрику зарезервировали для будущих нужд (пока не поддерживается).
`copy_on_write_saved`
`copy_on_write_performed`
  Это статистика уровня процесса. При запуске команды mysqlnd переменные, которые возвращает модуль, указывают на внутренние сетевые буферы результатов команды mysqlnd. Если данные не изменяются, извлеченные данные сохраняются в памяти только один раз. Однако для внесения изменений в данные потребуется, чтобы команда mysqlnd выполнила операцию копирования при записи.
`explicit_free_result`
`implicit_free_result`
  Это статистика уровня соединения и процесса. Общее количество высвобожденных результирующих наборов.
`proto_text_fetched_null`
  Общее количество столбцов типа `MYSQL_TYPE_NULL`, которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
`proto_binary_fetched_null`
  Общее количество столбцов типа `MYSQL_TYPE_NULL`, которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
`proto_text_fetched_bit`
  Общее количество столбцов типа `MYSQL_TYPE_BIT`, которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
`proto_binary_fetched_bit`
  Общее количество столбцов типа `MYSQL_TYPE_BIT`, которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
`proto_text_fetched_tinyint`
  Общее количество столбцов типа `MYSQL_TYPE_TINY`, которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
`proto_binary_fetched_tinyint`
  Общее количество столбцов типа `MYSQL_TYPE_TINY`, которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
`proto_text_fetched_short`
  Общее количество столбцов типа `MYSQL_TYPE_SHORT`, которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
`proto_binary_fetched_short`
  Общее количество столбцов типа `MYSQL_TYPE_SHORT`, которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
`proto_text_fetched_int24`
  Общее количество столбцов типа `MYSQL_TYPE_INT24`, которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
`proto_binary_fetched_int24`
  Общее количество столбцов типа `MYSQL_TYPE_INT24`, которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
`proto_text_fetched_int`
  Общее количество столбцов типа `MYSQL_TYPE_LONG`, которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
`proto_binary_fetched_int`
  Общее количество столбцов типа `MYSQL_TYPE_LONG`, которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
`proto_text_fetched_bigint`
  Общее количество столбцов типа `MYSQL_TYPE_LONGLONG`, которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
`proto_binary_fetched_bigint`
  Общее количество столбцов типа `MYSQL_TYPE_LONGLONG`, которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
`proto_text_fetched_decimal`
  Общее количество столбцов типа `MYSQL_TYPE_DECIMAL` или `MYSQL_TYPE_NEWDECIMAL`, которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
`proto_binary_fetched_decimal`
  Общее количество столбцов типа `MYSQL_TYPE_DECIMAL` или `MYSQL_TYPE_NEWDECIMAL`, которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
`proto_text_fetched_float`
  Общее количество столбцов типа `MYSQL_TYPE_FLOAT`, которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
`proto_binary_fetched_float`
  Общее количество столбцов типа `MYSQL_TYPE_FLOAT`, которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
`proto_text_fetched_double`
  Общее количество столбцов типа `MYSQL_TYPE_DOUBLE`, которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
`proto_binary_fetched_double`
  Общее количество столбцов типа `MYSQL_TYPE_DOUBLE`, которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
`proto_text_fetched_date`
  Общее количество столбцов типа `MYSQL_TYPE_DATE` или `MYSQL_TYPE_NEWDATE`, которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
`proto_binary_fetched_date`
  Общее количество столбцов типа `MYSQL_TYPE_DATE` или `MYSQL_TYPE_NEWDATE`, которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
`proto_text_fetched_year`
  Общее количество столбцов типа `MYSQL_TYPE_YEAR`, которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
`proto_binary_fetched_year`
  Общее количество столбцов типа `MYSQL_TYPE_YEAR`, которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
`proto_text_fetched_time`
  Общее количество столбцов типа `MYSQL_TYPE_TIME`, которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
`proto_binary_fetched_time`
  Общее количество столбцов типа `MYSQL_TYPE_TIME`, которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
`proto_text_fetched_datetime`
  Общее количество столбцов типа `MYSQL_TYPE_DATETIME`, которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
`proto_binary_fetched_datetime`
  Общее количество столбцов типа `MYSQL_TYPE_DATETIME`, которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
`proto_text_fetched_timestamp`
  Общее количество столбцов типа `MYSQL_TYPE_TIMESTAMP`, которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
`proto_binary_fetched_timestamp`
  Общее количество столбцов типа `MYSQL_TYPE_TIMESTAMP`, которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
`proto_text_fetched_string`
  Общее количество столбцов типа `MYSQL_TYPE_STRING`, `MYSQL_TYPE_VARSTRING` или `MYSQL_TYPE_VARCHAR`, которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
`proto_binary_fetched_string`
  Общее количество столбцов типа `MYSQL_TYPE_STRING`, `MYSQL_TYPE_VARSTRING` или `MYSQL_TYPE_VARCHAR`, которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
`proto_text_fetched_blob`
  Общее количество столбцов типа `MYSQL_TYPE_TINY_BLOB`, `MYSQL_TYPE_MEDIUM_BLOB`, `MYSQL_TYPE_LONG_BLOB` или `MYSQL_TYPE_BLOB`, которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
`proto_binary_fetched_blob`
  Общее количество столбцов типа `MYSQL_TYPE_TINY_BLOB`, `MYSQL_TYPE_MEDIUM_BLOB`, `MYSQL_TYPE_LONG_BLOB` или `MYSQL_TYPE_BLOB`, которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
`proto_text_fetched_enum`
  Общее количество столбцов типа `MYSQL_TYPE_ENUM`, которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
`proto_binary_fetched_enum`
  Общее количество столбцов типа `MYSQL_TYPE_ENUM`, которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
`proto_text_fetched_set`
  Общее количество столбцов типа `MYSQL_TYPE_SET`, которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
`proto_binary_fetched_set`
  Общее количество столбцов типа `MYSQL_TYPE_SET`, которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
`proto_text_fetched_geometry`
  Общее количество столбцов типа `MYSQL_TYPE_GEOMETRY`, которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
`proto_binary_fetched_geometry`
  Общее количество столбцов типа `MYSQL_TYPE_GEOMETRY`, которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
`proto_text_fetched_other`
  Общее количество столбцов типов `MYSQL_TYPE_*`, не перечисленных ранее, которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).

  > Замечание: Теоретически значение всегда должно равняться `0`.

`proto_binary_fetched_other`
  Общее количество столбцов типа `MYSQL_TYPE_*`, не включённых ранее, которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).

  > Замечание: Теоретически, значение всегда должно равняться `0`.

Статистические данные соединения
`connect_success`
  Общее количество успешных попыток подключения.

  > Замечание: `connect_success` содержит сумму успешных постоянных и непостоянных попыток подключения. Следовательно, количество успешных попыток непостоянного подключения равно разности `connect_success - pconnect_success`.

`pconnect_success`
  Общее количество успешных попыток постоянного подключения.
`connect_failure`
  Общее количество неудачных попыток подключения.
`reconnect`
  Это статистика уровня процесса.
`active_connections`
  Это статистика уровня процесса. Общее количество активных постоянных и непостоянных подключений.

  > Замечание: Общее количество активных непостоянных соединений равно разности `active_connections - active_persistent_connections`.

`active_persistent_connections`
  Это статистика уровня процесса. Общее количество активных постоянных соединений.
`explicit_close`
  Общее количество явно закрытых соединений.

  Пример #1 Примеры фрагментов кода, которые вызывают явное закрытие

  -     $link = new mysqli(/* ... */);
        $link->close(/* ... */);

  -     $link = new mysqli(/* ... */);
        $link->connect(/* ... */);

`implicit_close`
  Общее количество неявно закрытых соединений.

  Пример #2 Примеры фрагментов кода, которые вызывают неявное закрытие

  -     $link = new mysqli(/* ... */);
        $link->real_connect(/* ... */);

  - `unset($link)`
  - Постоянное соединение: объединенное соединение создали методом real_connect, и, возможно, установили неизвестный набор опций, — закрывается неявно, чтобы избежать возврата соединения с неизвестными параметрами
  - Persistent connection: ping/change_user завершается неудачно, а ext/mysqli закрывает соединение
  - Окончание работы скрипта: закрываются соединения, которые пользователь не закрыл явно
`disconnect_close`
  Сбои подключения, на которые указывает вызов метода API-интерфейса языка C `mysql_real_connect` при попытке установить соединение.
`in_middle_of_command_close`
  Это статистика уровня процесса. Соединение прервалось в середине выполнения команды (не были получены выдающиеся результирующие наборы после отправки запроса и до получения ответа, во время получения данных, во время передачи данных через LOAD DATA).
  Внимание

  Если не выполняются асинхронные запросы, это должно произойти, только если PHP-приложение неожиданно завершилось, и PHP автоматически закрывает соединение.

`init_command_executed_count`
  Общее количество выполнений команды инициализации. Например: `mysqli_options(MYSQLI_INIT_COMMAND , $value)`. Количество успешных запусков — разность `init_command_executed_count - init_command_failed_count`.
`init_command_failed_count`
  Общее количество неудачных команд инициализации.

`Статистика команд COM_*`
`com_quit`
`com_init_db`
`com_query`
`com_field_list`
`com_create_db`
`com_drop_db`
`com_refresh`
`com_shutdown`
`com_statistics`
`com_process_info`
`com_connect`
`com_process_kill`
`com_debug`
`com_ping`
`com_time`
`com_delayed_insert`
`com_change_user`
`com_binlog_dump`
`com_table_dump`
`com_connect_out`
`com_register_slave`
`com_stmt_prepare`
`com_stmt_execute`
`com_stmt_send_long_data`
`com_stmt_close`
`com_stmt_reset`
`com_stmt_set_option`
`com_stmt_fetch`
`com_daemon`
  Общее количество попыток PHP отправить конкретную команду `COM_*` на MySQL-сервер. Значение метрики увеличивается после проверки строки и сразу перед отправкой соответствующего пакета клиент-серверного протокола MySQL.
  Предостережение

  Если драйвер MySQLnd не сможет отправить пакет по сети, значение метрики не будет уменьшаться. При сбое драйвер MySQLnd выдаёт PHP-предупреждение Error while sending %s packet. PID=%d.

  Пример #3 Примеры использования

  - Проверьте, отправляет ли PHP конкретные команды на MySQL-сервер, например: проверьте, отправляет ли клиент команду `COM_PROCESS_KILL`
  - Вычислите среднее количество выполнений подготовленных операторов путём сравнения команду `COM_EXECUTE` с командой `COM_PREPARE`
  - Выясните, не запускал ли PHP неподготовленные SQL-запросы путём проверки, равно ли значение команды `COM_QUERY` нулю
  - Определите PHP-скрипты, которые запускают чрезмерное количество SQL-запросов путём проверки команд `COM_QUERY` и `COM_EXECUTE`

Прочие статистические данные
`explicit_stmt_close`
`implicit_stmt_close`
  Это статистика уровня процесса. Общее количество закрытых подготовленных заявлений.

  > Замечание: Подготовленный запрос всегда явно закрыт. Единственный раз, когда он закрывается неявно, — когда подготовка не удалась.

`mem_emalloc_count`
`mem_emalloc_ammount`
`mem_ecalloc_count`
`mem_ecalloc_ammount`
`mem_realloc_count`
`mem_realloc_ammount`
`mem_efree_count`
`mem_malloc_count`
`mem_malloc_ammount`
`mem_calloc_count`
`mem_calloc_ammount`
`mem_ealloc_count`
`mem_ealloc_ammount`
`mem_free_count`
  Это статистика уровня процесса. Вызовы управления памятью.
`command_buffer_too_small`
  Количество модулей сетевого буфера команд при отправке команд из PHP на сервер MySQL. Драйвер mysqlnd выделяет для каждого подключения внутренний командный или сетевой буфер, размер которого задали в байтах в опции конфигурации mysqlnd.net_cmd_buffer_size. Драйвер MySQLnd увеличит размер буфера до размера, который требуется для отправки команды, если команда протокола MySQL Client Server наподобие `COM_QUERY` (обычный запрос) не помещается в буфер. Каждый раз при расширении буфера для одного соединения метрика `command_buffer_too_small` увеличивается на единицу. Если драйверу MySQLnd приходится увеличивать размер буфера сверх первоначального размера, который задали в байтах в опции mysqlnd.net_cmd_buffer_size, почти для каждого соединения, размер по умолчанию для буфера увеличивают, чтобы избежать перераспределения памяти.
`connection_reused`
  Общее количество переиспользований постоянного соединения.

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open