Spec-Zone .ru
спецификации, руководства, описания, API

22.9.5.6. Статистика

Copyright 1997-2012 PHP Documentation Group.

Используя Статистические данные

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

Если Вы используете mysqli расширение, эти статистические данные могут быть получены через три вызова API:

Отметить

Статистические данные агрегированы среди всех расширений тот MySQL Native Driver использования. Например, компилируя обоих ext/mysql и ext/mysqli против MySQL Native Driver, обоих вызовов функции ext/mysql и ext/mysqli изменит статистику. Нет никакого способа узнать, насколько определенный вызов API любого расширения, которое было скомпилировано против MySQL Native Driver, воздействовал на определенную статистическую величину. Можно сконфигурировать Драйвер MySQL PDO, ext/mysql и ext/mysqli дополнительно использовать MySQL Native Driver. Делая так, все три расширения изменят статистику.

Доступ к Клиентской Статистике

К клиентской статистике доступа Вы должны вызвать mysqli_get_client_stats. Вызов функции не требует никаких параметров.

Функция возвращает ассоциативный массив, который содержит имя статистической величины как ключ и статистические данные как значение.

К клиентской статистике можно также получить доступ, вызывая phpinfo функция.

Доступ к Статистике Соединения

К вызову статистики соединения доступа mysqli_get_connection_stats. Это берет дескриптор соединения с базой данных в качестве параметра.

Функция возвращает ассоциативный массив, который содержит имя статистической величины как ключ и статистические данные как значение.

Доступ к Статистике Кэша Zval

MySQL Native Driver также собирает статистические данные от своего внутреннего кэша Zval. К этим статистическим данным можно получить доступ, вызывая mysqli_get_cache_stats.

Полученная статистика кэша Zval может привести к тонкой настройке php.ini настройки, связанные с кэшем Zval, приводящим к лучшей производительности.

Буферизованные и Небуферизованные Наборы результатов

Наборы результатов могут быть буферизованы или небуферизованы. Используя настройки по умолчанию, ext/mysql и ext/mysqli работа с буферизованными наборами результатов для нормального (не подготовленный оператор) запросы. Буферизованные наборы результатов кэшируются на клиенте. После выполнения запроса все результаты выбираются от MySQL Server и сохранены в кэше на клиенте. Большое преимущество буферизованных наборов результатов состоит в том, что они позволяют серверу освобождать все ресурсы, выделенные набору результатов, когда-то результаты были выбраны клиентом.

Небуферизованные наборы результатов с другой стороны сохраняются намного более длительными на сервере. Если Вы хотите уменьшить потребление памяти на клиенте, но загрузку увеличения на сервере, используйте небуферизованные результаты. Если Вы испытываете высокую загрузку сервера, и числа для небуферизованных наборов результатов высоки, следует рассмотреть перемещение загрузки в клиенты. Клиенты обычно масштабируются лучше чем серверы. "Загрузка" не только обращается к буферам памяти - сервер также должен сохранить другие ресурсы открытыми, например дескрипторы файлов и потоки, прежде, чем набор результатов сможет быть освобожден.

Готовые Операторы используют небуферизованные наборы результатов по умолчанию. Однако, можно использовать mysqli_stmt_store_result включать буферизованным наборам результатов.

Статистика возвратилась MySQL Native Driver

Следующие таблицы показывают список статистики, возвращенной mysqli_get_client_stats, mysqli_get_connection_stats и mysqli_get_cache_stats функции.

Таблица 22.64. Возвращенная mysqlnd статистика: Сеть

Статистическая величина Контекст Описание Примечания
bytes_sent Соединение Число байтов, отправленных от PHP до сервера MySQL Может использоваться, чтобы проверить эффективность протокола сжатия
bytes_received Соединение Число байтов получается от сервера MySQL Может использоваться, чтобы проверить эффективность протокола сжатия
packets_sent Соединение Число пакетов протокола MySQL Client Server передалось Используемый для того, чтобы отладить Клиент-серверную реализацию протокола
packets_received Соединение Число пакетов протокола MySQL Client Server получается Используемый для того, чтобы отладить Клиент-серверную реализацию протокола
protocol_overhead_in Соединение Издержки протокола MySQL Client Server в байтах для входящего трафика. В настоящий момент только Пакетный Заголовок (4 байта) рассматривают как издержки. protocol_overhead_in = packets_received * 4 Используемый для того, чтобы отладить Клиент-серверную реализацию протокола
protocol_overhead_out Соединение Издержки протокола MySQL Client Server в байтах для исходящего трафика. В настоящий момент только Пакетный Заголовок (4 байта) рассматривают как издержки. protocol_overhead_out = packets_sent * 4 Используемый для того, чтобы отладить Клиент-серверную реализацию протокола
bytes_received_ok_packet Соединение Полный размер байтов пакетов OK протокола MySQL Client Server получается. Пакеты OK могут содержать сообщение о состоянии. Длина сообщения о состоянии может измениться, и таким образом размер пакета OK не фиксируется. Используемый для того, чтобы отладить реализацию протокола CS. Отметьте, что полный размер в байтах включает размер пакета заголовка (4 байта, см. издержки протокола).
packets_received_ok Соединение Число пакетов OK протокола MySQL Client Server получается. Используемый для того, чтобы отладить реализацию протокола CS. Отметьте, что полный размер в байтах включает размер пакета заголовка (4 байта, см. издержки протокола).
bytes_received_eof_packet Соединение Полный размер в байтах протокола MySQL Client Server пакеты EOF получается. EOF может измениться по размеру в зависимости от версии сервера. Кроме того, EOF может транспортировать сообщение об ошибке. Используемый для того, чтобы отладить реализацию протокола CS. Отметьте, что полный размер в байтах включает размер пакета заголовка (4 байта, см. издержки протокола).
packets_received_eof Соединение Число протокола MySQL Client Server пакеты EOF. Как с другой пакетной статистикой будет увеличено число пакетов, даже если PHP не получит ожидаемый пакет, но, например, сообщение об ошибке. Используемый для того, чтобы отладить реализацию протокола CS. Отметьте, что полный размер в байтах включает размер пакета заголовка (4 байта, см. издержки протокола).
bytes_received_rset_header_packet Соединение Полный размер в байтах пакетов заголовка набора результатов протокола MySQL Client Server. Размер пакетов изменяется в зависимости от полезной нагрузки (LOAD LOCAL INFILE, INSERT, UPDATE, SELECT, сообщение об ошибке). Используемый для того, чтобы отладить реализацию протокола CS. Отметьте, что полный размер в байтах включает размер пакета заголовка (4 байта, см. издержки протокола).
packets_received_rset_header Соединение Число пакетов заголовка набора результатов протокола MySQL Client Server. Используемый для того, чтобы отладить реализацию протокола CS. Отметьте, что полный размер в байтах включает размер пакета заголовка (4 байта, см. издержки протокола).
bytes_received_rset_field_meta_packet Соединение Полный размер в байтах метаданных набора результатов протокола MySQL Client Server (информация о поле) пакеты. Конечно, размер меняется в зависимости от полей в наборе результатов. Пакет может также транспортировать ошибку или пакет EOF в случае COM_LIST_FIELDS. Только полезный для отладки реализации протокола CS. Отметьте, что полный размер в байтах включает размер пакета заголовка (4 байта, см. издержки протокола).
packets_received_rset_field_meta Соединение Число метаданных набора результатов протокола MySQL Client Server (информация о поле) пакеты. Только полезный для отладки реализации протокола CS. Отметьте, что полный размер в байтах включает размер пакета заголовка (4 байта, см. издержки протокола).
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. Только полезный для отладки реализации протокола CS. Отметьте, что полный размер в байтах включает размер пакета заголовка (4 байта, см. издержки протокола).
packets_received_rset_row Соединение Число пакетов данных строки набора результатов протокола MySQL Client Server и их полного размера в байтах. Только полезный для отладки реализации протокола CS. Отметьте, что полный размер в байтах включает размер пакета заголовка (4 байта, см. издержки протокола).
bytes_received_prepare_response_packet Соединение Полный размер в байтах OK протокола MySQL Client Server для Готовых пакетов Инициализации Оператора (подготовленный оператор init пакеты). Пакет может также транспортировать ошибку. Пакетный размер зависит от версии MySQL: 9 байтов с MySQL 4.1 и 12 байтов от MySQL 5.0 на. Нет никакого безопасного способа знать, сколько ошибок произошло. Можно быть в состоянии предположить, что ошибка произошла, если, например, Вы всегда соединяетесь с MySQL 5.0 или более новый и, bytes_received_prepare_response_packet != packets_received_prepare_response * 12. См. также ps_prepared_never_executed, ps_prepared_once_executed. Только полезный для отладки реализации протокола CS. Отметьте, что полный размер в байтах включает размер пакета заголовка (4 байта, см. издержки протокола).
packets_received_prepare_response Соединение Число OK протокола MySQL Client Server для Готовых пакетов Инициализации Оператора (подготовленный оператор init пакеты). Только полезный для отладки реализации протокола CS. Отметьте, что полный размер в байтах включает размер пакета заголовка (4 байта, см. издержки протокола).
bytes_received_change_user_packet Соединение Полный размер в байтах протокола MySQL Client Server пакеты COM_CHANGE_USER. Пакет может также транспортировать ошибку или EOF. Только полезный для отладки реализации протокола CS. Отметьте, что полный размер в байтах включает размер пакета заголовка (4 байта, см. издержки протокола).
packets_received_change_user Соединение Число протокола MySQL Client Server пакеты COM_CHANGE_USER Только полезный для отладки реализации протокола CS. Отметьте, что полный размер в байтах включает размер пакета заголовка (4 байта, см. издержки протокола).
packets_sent_command Соединение Число команд протокола MySQL Client Server, отправленных от PHP до MySQL. Нет никакого способа знать, какие определенные команды и сколько из них было отправлено. В своих лучших проявлениях можно использовать это, чтобы проверить, отправил ли PHP какие-либо команды MySQL, чтобы знать, можно ли рассмотреть, чтобы отключить поддержку MySQL в Вашем двоичном файле PHP. Нет также никакого способа перепроектировать число ошибок, которые, возможно, произошли, отправляя данные MySQL. Единственная ошибка, которая записывается, является command_buffer_too_small (см. ниже). Только полезный для отладки реализации протокола CS.
bytes_received_real_data_normal Соединение Число байтов полезной нагрузки, выбранной клиентом PHP от mysqlnd использование текстового протокола. Это - размер фактических данных, содержавшихся в наборах результатов, которые не происходят из готовых операторов и которые были выбраны клиентом PHP. Отметьте это, хотя полный набор результатов, возможно, вытянули от MySQL mysqlnd, эта статистическая величина только считает фактические данные вытянутыми от mysqlnd клиентом PHP. Пример кодовой последовательности, которая увеличит значение, следующие:
$mysqli = new mysqli();$res = $mysqli->query("SELECT 'abc'");$res->fetch_assoc();$res->close();

Каждая работа выборки увеличит значение.

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

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

Эта статистическая величина доступна с версии 5.3.4 PHP.

bytes_received_real_data_ps Соединение Число байтов полезной нагрузки, выбранной клиентом PHP от mysqlnd использование готового протокола оператора. Это - размер фактических данных, содержавшихся в наборах результатов, которые происходят из готовых операторов и которые были выбраны клиентом PHP. Значение не будет увеличено, если набор результатов не будет впоследствии считан клиентом PHP. Отметьте это, хотя полный набор результатов, возможно, вытянули от MySQL mysqlnd, эта статистическая величина только считает фактические данные вытянутыми от mysqlnd клиентом PHP. См. также bytes_received_real_data_normal. Thisstatistic доступен с версии 5.3.4 PHP.

Набор результатов

Таблица 22.65. Возвращенная mysqlnd статистика: Набор результатов

Статистическая величина Контекст Описание Примечания
result_set_queries Соединение Число запросов, которые генерировали набор результатов. Примеры запросов, которые генерируют набор результатов: SELECT, SHOW. Статистическая величина не будет постепенно увеличена, если будет ошибка, читая пакет заголовка набора результатов из строки. Можно использовать это в качестве косвенной меры для числа запросов, которые PHP отправил MySQL, например, чтобы идентифицировать клиент, который вызывает высокую загрузку базы данных.
non_result_set_queries Соединение Число запросов, которые не генерировали набор результатов. Примеры запросов, которые не генерируют набор результатов: INSERT, UPDATE, LOAD DATA, SHOW. Статистическая величина не будет постепенно увеличена, если будет ошибка, читая пакет заголовка набора результатов из строки. Можно использовать это в качестве косвенной меры для числа запросов, которые PHP отправил MySQL, например, чтобы идентифицировать клиент, который вызывает высокую загрузку базы данных.
no_index_used Соединение Число запросов, которые генерировали набор результатов, но не использовали индексирование (видит также mysqld, запускаются, опция "запросы журнала, не используя индексирует"). Если Вы хотите, чтобы эти запросы были сообщены, можно использовать mysqli_report (MYSQLI_REPORT_INDEX), чтобы заставить ext/mysqli выдать исключение. Если Вы предпочитаете, чтобы предупреждение вместо исключения использовало mysqli_report (MYSQLI_REPORT_INDEX ^ MYSQLI_REPORT_STRICT).
bad_index_used Соединение Число запросов, которые генерировали набор результатов и не использовали пользу, индексирует (см. также mysqld, запускают опцию - медленные запросы журнала). Если Вы хотите, чтобы эти запросы были сообщены, можно использовать mysqli_report (MYSQLI_REPORT_INDEX), чтобы заставить ext/mysqli выдать исключение. Если Вы предпочитаете, чтобы предупреждение вместо исключения использовало mysqli_report (MYSQLI_REPORT_INDEX ^ MYSQLI_REPORT_STRICT)
slow_queries Соединение SQL-операторы, которые взяли больше чем long_query_time секунды, чтобы выполниться и требуемый, по крайней мере, min_examined_row_limit строки, которые будут исследованы. Не сообщил через mysqli_report
buffered_sets Соединение Число буферизованных наборов результатов возвратилось "нормальными" запросами. "Нормальный" означает "не подготовленный оператор" в следующих примечаниях. Примеры вызовов API, которые буферизуют наборы результатов на клиенте: mysql_query, mysqli_query, mysqli_store_result, mysqli_stmt_get_result. Буферизация наборов результатов на клиенте гарантирует, что ресурсы сервера освобождаются как можно скорее, и она делает набор результатов, прокручивающий легче. Нижняя сторона является дополнительным потреблением памяти на клиенте для того, чтобы буферизовать данные. Отметьте, что mysqlnd (в отличие от MySQL Client Library) уважает предел памяти PHP, потому что это использует функции управления внутренней памятью PHP, чтобы выделить память. Это - также причина почему memory_get_usage сообщает более высокое потребление памяти при использовании mysqlnd вместо MySQL Client Library. memory_get_usage не измеряет потребление памяти MySQL Client Library вообще, потому что MySQL Client Library не использует функции управления внутренней памятью PHP, контролируемые функцией!
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 Соединение Общее количество строк набора результатов, успешно выбранных от MySQL независимо, если клиентское приложение использовало их или нет. Некоторые из строк не могли быть выбраны клиентским приложением, но были сброшены неявно. См. также packets_received_rset_row
rows_buffered_from_client_normal, rows_buffered_from_client_ps Соединение Общее количество успешно буферизованных строк, происходящих из "нормального" запроса или готового оператора. Это - число строк, которые были выбраны от MySQL и буферизованы на клиенте. Отметьте, что есть два отличных статистических данных по строкам, которые были буферизованы (MySQL к mysqlnd внутреннему буферу) и буферизованные строки, которые были выбраны клиентским приложением (mysqlnd внутренний буфер к клиентскому приложению). Если число буферизованных строк выше чем число выбранных буферизованных строк, это может означать, что клиентское приложение выполняет запросы, которые вызывают большие наборы результатов чем необходимый получающийся в строках, не считанных клиентом. Примеры запросов, которые буферизуют результаты: mysqli_query, mysqli_store_result
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 должен выполнить копию на записи, чтобы защитить буферы результата внутренней сети от того, чтобы быть измененным. С MySQL Client Library Вы всегда содержите выбранные данные дважды в памяти. Однажды во внутренних буферах MySQL Client Library и однажды в переменных возвратился расширениями. В теории mysqlnd может сэкономить до 40%-ой памяти. Однако, отметьте, что сохранение памяти не может быть измерено, используя memory_get_usage.
explicit_free_result, implicit_free_result Соединение, Процесс (только во время готовой уборки оператора) Общее количество освобожденных наборов результатов. Свободное всегда считают явным, но для наборов результатов, создаваемых init командой, например, mysqli_options(MYSQLI_INIT_COMMAND , ...)
proto_text_fetched_null, proto_text_fetched_bit, proto_text_fetched_tinyint proto_text_fetched_short, proto_text_fetched_int24, proto_text_fetched_int proto_text_fetched_bigint, proto_text_fetched_decimal, proto_text_fetched_float proto_text_fetched_double, proto_text_fetched_date, proto_text_fetched_year proto_text_fetched_time, proto_text_fetched_datetime, proto_text_fetched_timestamp proto_text_fetched_string, proto_text_fetched_blob, proto_text_fetched_enum proto_text_fetched_set, proto_text_fetched_geometry, proto_text_fetched_other Соединение Общее количество столбцов определенного типа, выбранного от нормального запроса (текстовый протокол MySQL). Отображение от API C / тип метаданных MySQL к имени статистики:
  • MYSQL_TYPE_NULL - proto_text_fetched_null

  • MYSQL_TYPE_BIT - proto_text_fetched_bit

  • MYSQL_TYPE_TINY - proto_text_fetched_tinyint

  • MYSQL_TYPE_SHORT - proto_text_fetched_short

  • MYSQL_TYPE_INT24 - proto_text_fetched_int24

  • MYSQL_TYPE_LONG - proto_text_fetched_int

  • MYSQL_TYPE_LONGLONG - proto_text_fetched_bigint

  • MYSQL_TYPE_DECIMAL, MYSQL_TYPE_NEWDECIMAL - proto_text_fetched_decimal

  • MYSQL_TYPE_FLOAT - proto_text_fetched_float

  • MYSQL_TYPE_DOUBLE - proto_text_fetched_double

  • MYSQL_TYPE_DATE, MYSQL_TYPE_NEWDATE - proto_text_fetched_date

  • MYSQL_TYPE_YEAR - proto_text_fetched_year

  • MYSQL_TYPE_TIME - proto_text_fetched_time

  • MYSQL_TYPE_DATETIME - proto_text_fetched_datetime

  • MYSQL_TYPE_TIMESTAMP - proto_text_fetched_timestamp

  • MYSQL_TYPE_STRING, MYSQL_TYPE_VARSTRING, MYSQL_TYPE_VARCHAR - proto_text_fetched_string

  • MYSQL_TYPE_TINY_BLOB, MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_LONG_BLOB, MYSQL_TYPE_BLOB - proto_text_fetched_blob

  • MYSQL_TYPE_ENUM - proto_text_fetched_enum

  • MYSQL_TYPE_SET - proto_text_fetched_set

  • MYSQL_TYPE_GEOMETRY - proto_text_fetched_geometry

  • Любой MYSQL_TYPE_* не перечисленный прежде (не должно быть ни одного) - proto_text_fetched_other

Отметьте, что MYSQL_*-type константы не могут быть связаны с тем же самым столбцом SQL, вводит каждую версию MySQL.

proto_binary_fetched_null, proto_binary_fetched_bit, proto_binary_fetched_tinyint proto_binary_fetched_short, proto_binary_fetched_int24, proto_binary_fetched_int, proto_binary_fetched_bigint, proto_binary_fetched_decimal, proto_binary_fetched_float, proto_binary_fetched_double, proto_binary_fetched_date, proto_binary_fetched_year, proto_binary_fetched_time, proto_binary_fetched_datetime, proto_binary_fetched_timestamp, proto_binary_fetched_string, proto_binary_fetched_blob, proto_binary_fetched_enum, proto_binary_fetched_set, proto_binary_fetched_geometry, proto_binary_fetched_other Соединение Общее количество столбцов определенного типа, выбранного от готового оператора (протокол двоичной синхронной передачи данных MySQL). Для типа отображение см. proto_text_* описанный в thepreceding тексте.

Таблица 22.66. Возвращенная mysqlnd статистика: Соединение

Статистическая величина Контекст Описание Примечания
connect_success, connect_failure Соединение Общее количество успешных / отказавшая попытка подключения. Включаются снова использованные соединения и все другие виды соединений.
reconnect Процесс Общее количество (вещественное число _) соединяет попытки, предпринятые на уже открытом дескрипторе соединения. Кодовая последовательность $link = new mysqli(...); $link->real_connect(...) вызовет повторно соединение. Но $link = new mysqli(...); $link->connect(...) будет не потому что $link->connect(...) явно закроет существующее соединение прежде, чем новое соединение будет установлено.
pconnect_success Соединение Общее количество успешных персистентных попыток подключения. Отметьте это connect_success содержит сумму успешных персистентных и нестойких попыток подключения. Число успешных нестойких попыток подключения connect_success - pconnect_success.
active_connections Соединение Общее количество активных персистентных и нестойких соединений.
active_persistent_connections Соединение Общее количество активных персистентных соединений. Общее количество активных нестойких соединений active_connections - active_persistent_connections.
explicit_close Соединение Общее количество явно закрытых соединений (ext/mysqli только). Примеры фрагментов кода, которые вызывают явное завершение:
$link = new mysqli(...); $link->close(...)$link = new mysqli(...); $link->connect(...)
implicit_close Соединение Общее количество неявно закрытых соединений (ext/mysqli только). Примеры фрагментов кода, которые вызывают неявное завершение:
  • $link = new mysqli(...); $link->real_connect(...)

  • unset($link)

  • Персистентное соединение: объединенное в пул соединение было создано с real_connect и может быть неизвестный набор опций - близко неявно, чтобы избежать возвращать соединение с неизвестными опциями

  • Персистентное соединение: сбои ping/change_user и ext/mysqli закрывают соединение

  • конец выполнения сценария: близкие соединения, которые не были закрыты пользователем

disconnect_close Соединение Отказы соединения обозначаются вызовом API C mysql_real_connect во время попытки установить соединение. Это вызывают disconnect_close потому что дескриптор соединения, который передают к вызову API C, будет закрыт.
in_middle_of_command_close Процесс Соединение было закрыто в середине выполнения команды (выдающиеся наборы результатов, не выбранные, после отправки запроса и прежде, чем получить ответ, выбирая данные, передавая данные с ДАННЫМИ ЗАГРУЗКИ). Если Вы не используете асинхронные запросы, это должно только произойти, если Ваш сценарий неожиданно останавливается, и PHP завершает работу соединений для Вас.
init_command_executed_count Соединение Общее количество init выполнения команды, например, mysqli_options(MYSQLI_INIT_COMMAND , ...). Число успешного выполнения init_command_executed_count -init_command_failed_count.
init_command_failed_count Соединение Общее количество отказавших init команд.

Таблица 22.67. Возвращенная mysqlnd статистика: Команда 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 Соединение Общее количество попыток отправить определенную команду COM_* от PHP до MySQL.

Статистические данные постепенно увеличиваются после проверки строки и сразу прежде, чем отправить соответствующему MySQL клиент-серверный пакет протокола. Если mysqlnd будет не в состоянии отправить пакет по проводу, то статистика не будет постепенно уменьшена. В случае отказа mysqlnd испускает PHP предупреждение "Ошибки, передаваясь %s пакет. PID = % d."

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

  • Проверьте, отправляет ли PHP определенные команды MySQL, например, проверку, если клиент передается COM_PROCESS_KILL

  • Вычислите среднее число готового выполнения оператора, сравниваясь COM_EXECUTE с COM_PREPARE

  • Проверьте, выполнил ли PHP любые неготовые SQL-операторы, проверяя если COM_QUERY нуль

  • Идентифицируйте Сценарии PHP, которые выполняют чрезмерное число SQL-операторов, проверяя COM_QUERY и COM_EXECUTE


Разное

Таблица 22.68. Возвращенная mysqlnd статистика: Разное

Статистическая величина Контекст Описание Примечания
explicit_stmt_close, implicit_stmt_close Процесс Общее количество близких готовых операторов. Завершение всегда считают явным, но для отказавшего готовятся.
mem_emalloc_count, mem_emalloc_ammount, mem_ecalloc_count, mem_ecalloc_ammount, mem_erealloc_count, mem_erealloc_ammount, mem_efree_count, mem_malloc_count, mem_malloc_ammount, mem_calloc_count, mem_calloc_ammount, mem_realloc_count, mem_realloc_ammount, mem_free_count Процесс Вызовы управления памятью. Разработка только.
command_buffer_too_small Соединение Число сетевых расширений буфера команд, отправляя команды от PHP до MySQL.

mysqlnd выделяет внутренний буфер команды/сети mysqlnd.net_cmd_buffer_size (php.ini) байты для каждого соединения. Если команда протокола MySQL Client Server, например, COM_QUERY (нормальный запрос), не вписывается в буфер, mysqlnd вырастит буфер к тому, что необходимо для того, чтобы отправить команду. Всякий раз, когда буфер расширяется для одного соединения command_buffer_too_small будет постепенно увеличен одним.

Если mysqlnd должен вырастить буфер вне своего начального размера mysqlnd.net_cmd_buffer_size (php.ini) байты для почти каждого соединения, следует рассмотреть, чтобы увеличить размер значения по умолчанию, чтобы избежать перераспределений.

Размер буфера значения по умолчанию составляет 2048 байтов в PHP 5.3.0. В будущих версиях значение по умолчанию составит 4 Кбита или больше. Значение по умолчанию может измененный любой через php.ini установка mysqlnd.net_cmd_buffer_size или использование mysqli_options(MYSQLI_OPT_NET_CMD_BUFFER_SIZE, int size).

Рекомендуется установить размер буфера в не менее чем 4096 байтов, потому что mysqlnd также использует это, читая определенный коммуникационный пакет из MySQL. В PHP 5.3.0, mysqlnd не будет выращивать буфер, если MySQL отправит пакет, который больше чем текущий размер буфера. Как следствие mysqlnd неспособен декодировать пакет, и клиентское приложение получит ошибку. Есть только две ситуации, когда пакет может быть больше чем 2048-байтовое значение по умолчанию mysqlnd.net_cmd_buffer_size в PHP 5.3.0: пакет транспортирует очень длинное сообщение об ошибке, или пакет содержит метаданные столбца от COM_LIST_FIELD (mysql_list_fields) и метаданные прибывают из строкового столбца с очень длинным значением по умолчанию (> 1900 байтов). Никакой отчет об ошибках на этом не существует - это должно редко происходить.

С PHP 5.3.2 mysqlnd не позволяет устанавливать буферы, меньшего размера чем 4096 байтов.

connection_reused