Statistics
Using Statistical Data
MySQL Native Driver поддерживает сбор статистики по взаимодействию клиента с сервером. Статистика собирается с двух основных точек:
-
Клиентская статистика
-
Статистика соединения
Если вы используете расширение mysqli
, эта статистика
доступна с помощью двух функций, обращающихся к API:
Замечание:
Статистика аггрегируется со всех расширений использующих MySQL Native Driver. К примеру, если подключить и
ext/mysql
иext/mysqli
через MySQL Native Driver, как вызовы функцийext/mysql
так иext/mysqli
будут внесены в общую статистику. Возможность разделить статистику в зависимости от использованного расширения отсутствует. Вы можете сконфигурировать драйвера PDO MySQL,ext/mysql
иext/mysqli
для опционального использования MySQL Native Driver. При этом, все три расширения будут изменять статистику.
Доступ к клиентской статистике
Для получения клиентской статистике необходимо выполнить функцию mysqli_get_client_stats(). Функция вызывается без параметров.
Функция возвращает ассоциативный массив, использующий в качестве ключей названия метрик статистики и в качестве значения этих метрик, собственно, значения.
Также клиентская статистика доступна с помощью функции phpinfo().
Доступ к статистике соединения
Для получения статистики соединения, выполните функцию mysqli_get_connection_stats(), передав в качестве параметра ресурс соединения.
Функция возвращает ассоциативный массив, использующий в качестве ключей названия метрик статистики и в качестве значения этих метрик, собственно, значения.
Буферизованные и небуферизованные результирующие наборы
Результирующие наборы могут быть буферизованными и небуферизованными.
При использовании настроек по умолчанию, ext/mysql
и
ext/mysqli
работают с буферизованными результирующими
наборами при использовании нормальных (не подготовленных) запросов.
Буферизованные результирующие наборы кешируются на стороне клиента.
После выполнения запроса, все результаты передаются на клиента, где
сохраняются в кеше. Преимущество буферизованных запросов в том, что
сразу высвобождаются серверные ресурсы, связанные с хранением результирующего
набора.
Небуферизованные результирующие наборы, с другой стороны,
сохраняются на сервере гораздо дольше. Если вы хотите сократить потребление
памяти на клиенте, но при этом нагрузить сервер, используйте небуферизованные
результирующие наборы. Если узким местом в вашей системе является сервер
баз данных, то вам стоит задуматься о скорейшем перемещении орезультатов
на клиента. Обычно клиенты масштабируются гораздо легче, чем сервера БД.
Нагрузка
ложится не только на память, но и
на прочие ресурсы, которые должна поддерживать база данных для обслуживания
соединения, такие как открытые файловые дескрипторы и нити исполнения.
Подготовленные запросы по умолчанию используют небуферизованные результирующие наборы. В любом случае, вы можете использовать функцию mysqli_stmt_store_result() для буферизации результатов.
Статистика возвращаемая MySQL Native Driver
Следующая таблица демонстрирует список возвращаемой функциями mysqli_get_client_stats() и mysqli_get_connection_stats() статистики.
Метрика | Область применения | Описание | Замечания |
---|---|---|---|
bytes_sent |
Соединение | Количество байт переданных от PHP на сервер MySQL | Может использоваться для проверки эффективности протокола сжатия |
bytes_received |
Соединение | Количество байт полученных от сервера MySQL | Может использоваться для проверки эффективности протокола сжатия |
packets_sent |
Соединение | Количество пакетов посланых от клиента серверу MySQL | Используется для отладки реализации клиент-серверного протокола |
packets_received |
Соединение | Количество пакетов принятых клиентом от сервера MySQL | Используется для отладки реализации клиент-серверного протокола |
protocol_overhead_in |
Соединение | накладные расходы клиент-серверного протокола MySQLв байтах для входящего траффика. на данный момент только заголовок пакета (4 байта) считается за накладные расходы. protocol_overhead_in = packets_received * 4 | Используется для отладки реализации клиент-серверного протокола |
protocol_overhead_out |
Соединение | MySQL Client Server protocol overhead in bytes for outgoing traffic. Currently only the Packet Header (4 bytes) is considered as overhead. protocol_overhead_out = packets_sent * 4 | Используется для отладки реализации клиент-серверного протокола |
bytes_received_ok_packet |
Соединение | Общее количество байт принятых ОК-пакетов клиент-серверного протокола MySQL. OK-пакеты могут содержать статусные сообщения. Длина статусных сообщений может меняться, следовательно размер ОК-пакетов не фиксирована. | Используется для отладки реализации клиент-серверного протокола. Обратите внимание, что общий размер включает в себя заголовочный пакет, размером 4 байта. |
packets_received_ok |
Соединение | Количество принятых OK-пакетов | Используется для отладки реализации клиент-серверного протокола. Обратите внимание, что общий размер включает в себя заголовочный пакет, размером 4 байта. |
bytes_received_eof_packet |
Соединение | Общее количество байт принятых EOF-пакетов. Размер EOF-пакета может изменяться в зависимости от версии сервера. Также, EOF-пакеты могут использоваться как транспорт для сообщений об ошибках. | Используется для отладки реализации клиент-серверного протокола. Обратите внимание, что общий размер включает в себя заголовочный пакет, размером 4 байта. |
packets_received_eof |
Соединение | Количество принятых EOF-пакетов. Как и для прочей статистики по пакетам, это число может увеличиваться каждый раз, когда PHP не получает ожидаемый пакет, а, к примеру, получае сообщение об ошибке. | Используется для отладки реализации клиент-серверного протокола. Обратите внимание, что общий размер включает в себя заголовочный пакет, размером 4 байта. |
bytes_received_rset_header_packet |
Соединение | Общее количество байт принятых заголовочных пакетов результирующих наборов.
Размер пакетов зависит от полезной нагрузки (LOAD LOCAL INFILE ,
INSERT , UPDATE , SELECT , сообщение об ошибке).
|
Используется для отладки реализации клиент-серверного протокола. Обратите внимание, что общий размер включает в себя заголовочный пакет, размером 4 байта. |
packets_received_rset_header |
Соединение | Количество пакетов заголовков результирующих наборов. | Используется для отладки реализации клиент-серверного протокола. Обратите внимание, что общий размер включает в себя заголовочный пакет, размером 4 байта. |
bytes_received_rset_field_meta_packet |
Соединение | Общий размер в байтах полученных пакетов с метаданными результирующих наборов (информации о столбцах). Естественно размер каждого пакета индивидуален. Эти пакеты могут выступать транспортом для ошибок и EOF-пакетов в случае COM_LIST_FIELDS. | Используется для отладки реализации клиент-серверного протокола. Обратите внимание, что общий размер включает в себя заголовочный пакет, размером 4 байта. |
packets_received_rset_field_meta |
Соединение | Общее количество полученных пакетов с метаданными результирующих наборов (информации о столбцах). | Используется для отладки реализации клиент-серверного протокола. Обратите внимание, что общий размер включает в себя заголовочный пакет, размером 4 байта. |
bytes_received_rset_row_packet |
Соединение | Общий размер в байтах полученных пакетов с данными результирующего набора.
Эти пакеты могут служить транспортом для ошибок и в качестве EOF-пакетов.
Вы можете вычислить количество ошибок и EOF-пакетов отняв
rows_fetched_from_server_normal и
rows_fetched_from_server_ps от
bytes_received_rset_row_packet . |
Используется для отладки реализации клиент-серверного протокола. Обратите внимание, что общий размер включает в себя заголовочный пакет, размером 4 байта. |
packets_received_rset_row |
Соединение | Кодичество пакетов с данными результирующих наборов и их суммарный объем в байтах. | Используется для отладки реализации клиент-серверного протокола. Обратите внимание, что общий размер включает в себя заголовочный пакет, размером 4 байта. |
bytes_received_prepare_response_packet |
Соединение | Общий размер в байтах ОК-пакетов инициализации подготовленных запросов.
(инициализирующие пакеты подготовленных запросов). Эти пакеты могут выступать транспортом
для ошибок. Рзмер пакета зависит от версии Mysql: 9 байт для MySQL4.1 и 12 байт начиная с 5.0.
Нет надежного способа узнать количество ошибок. Вы можете определить, что случилась
ошибка, если, наример, вы работаете с MySQL 5.0 или новее, а
bytes_received_prepare_response_packet !=
packets_received_prepare_response * 12. Также смотрите
ps_prepared_never_executed , ps_prepared_once_executed .
|
Используется для отладки реализации клиент-серверного протокола. Обратите внимание, что общий размер включает в себя заголовочный пакет, размером 4 байта. |
packets_received_prepare_response |
Соединение | Количество полученных ОК-пакетов для инициализации подготовленных запросов. | Используется для отладки реализации клиент-серверного протокола. Обратите внимание, что общий размер включает в себя заголовочный пакет, размером 4 байта. |
bytes_received_change_user_packet |
Соединение | Общий размер в байтах полученных пакетов COM_CHANGE_USER. Пакеты могут служить транспортом для ошибок и EOF-пакетов. | Используется для отладки реализации клиент-серверного протокола. Обратите внимание, что общий размер включает в себя заголовочный пакет, размером 4 байта. |
packets_received_change_user |
Соединение | Количество принятых пакетов COM_CHANGE_USER | Используется для отладки реализации клиент-серверного протокола. Обратите внимание, что общий размер включает в себя заголовочный пакет, размером 4 байта. |
packets_sent_command |
Соединение | Количество команд посланных от PHP серверу MySQL. Возможность узнать, какие конкретно и в каких количествах посылались команды отсутствует. Лучшее, для чего вы можете использовать эту метрику, это проверять, что посылает команды серверу MySQL и поддержка MySQL в PHP не запрещена. Также отсутствует возможность определить количество ошибок, возникших при отправке этих команд. Единственная опозноваемая ошибка - это command_buffer_too_small (смотрите ниже). | Используется для отладки реализации клиент-серверного протокола |
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(); Эта статистика доступна с PHP версии 5.3.4. |
bytes_received_real_data_ps |
Соединение | Количество байт полезной нагрузки, извлеченной клиентом PHP из
mysqlnd используя подготовленные запросы. |
Это размер только тех данных, которые были извлечены клиентом PHP.
Значение метрики не будет увеличиваться если клиент PHP не будет запрвшивать эти данные.
Обратите внимание, что хоть возможно mysqlnd забрал и полный
результирующий набор с сервера MySQL, но в этой метрике учитываются только данные
уже полученные клиентом PHP от mysqlnd .
Также смотрите bytes_received_real_data_normal .
Эта метрика доступна с PHP версии 5.3.4. |
Результирующий набор
Метрика | Область применения | Описание | Замечания |
---|---|---|---|
result_set_queries |
Соединение | Количество запросов, по которым был создан результирующий набор.
Пример запросов, создающих результирующий набор: SELECT , SHOW .
Статистика не будет увеличиваться в случае ошибки чтения заголовочного
пакета результирующего набора. |
Вы можете использовать эту метрику, как опосредованный счетчик выполненых запросов, например для обнаружения клиента, создающего большую нагрузку на БД. |
non_result_set_queries |
Соединение | Количество запросов, по которым не был создан результирующий набор.
Пример запросов, не создающих результирующий набор:
INSERT , UPDATE ,
LOAD DATA .
Статистика не будет увеличиваться в случае ошибки чтения заголовочного
пакета результирующего набора. |
Вы можете использовать эту метрику, как опосредованный счетчик выполненых запросов, например для обнаружения клиента, создающего большую нагрузку на БД. |
no_index_used |
Соединение | Количество запросов, создающих результирующий набор, но не использовавших индексы (также смотрите опцию запуска mysqld –log-queries-not-using-indexes). Если вы хотите получать отчеты о подобных запросах, вы можете использовать mysqli_report(MYSQLI_REPORT_INDEX) для того, чтобы ext/mysqli выбрасывал исключение. Если вы предпочитаете просто предупреждение, используйте mysqli_report(MYSQLI_REPORT_INDEX ^ MYSQLI_REPORT_STRICT). | |
bad_index_used |
Соединение | Количество запросов, создающих результирующий набор, но не использовавших хорошие индексы (также смотрите опцию запуска mysqld –log-slow-queries). | Если вы хотите получать отчеты о подобных запросах, вы можете использовать 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) зависит от ограничений PHP на память, поскольку использует внутренний менеджер памяти PHP. Это является одной из причин, почему memory_get_usage() при использовании mysqlnd показывает большие значение, чем при использовании клиенктской библиотеки MySQL. memory_get_usage() не замеряет потребление памяти клиентской библиотекой MySQL, поскольку он не использует внутренний менеджер памяти 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 . Возможные причины, ведущие к принудительному обнулению:
|
flushed_ps_sets |
Соединение | Количество результирующих наборов возвращенных подготовленными запросами с непрочтенными данными, которые были обнулены прозрачно для вас. Подобное происходит только с небуферизированными результирующими наборами. | Небуферизированные результирующие наборы должны быть полностью извлечены,
прежде чем будет возможно запустить новый запрос в том же соединении с MySQL, в противном
случае произойдет ошибка. Если приложение не извлекло все строки небуферизированного
результирующего набора, mysqlnd принудительно извлечет его, чтобы освободить ресурсы
сервера. Также смотрите rows_skipped_normal и
rows_skipped_ps . Возможные причины, ведущие к принудительному обнулению:
|
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 |
Соединение | Total number of rows fetched by the client from a unbuffered result set created by a "normal" query or a prepared statement. | |
rows_fetched_from_client_ps_cursor |
Соединение | Общее количество извлеченных клиентов строк из небуферизованных результирующих наборов для любого типа запросов. | |
rows_skipped_normal ,
rows_skipped_ps |
Соединение | Зарезервированно для использования в будущем и в данный момент не поддерживается | |
copy_on_write_saved ,
copy_on_write_performed |
Процесс | Если используется mysqlnd: переменные, возвращенные расширением, указывающие на внутренний сетевой буфер результатов mysqlnd. если вы не меняли переменные, извлеченные данные будут сохранены в памяти один раз. если вы меняли переменные, mysqlnd выполнит копирование при записи для защиты внутренних сетевых буферов результата от изменения. Если используется клиентская библиотека MySQL: вы всегда держите извлеченные данные в памяти в двух экземплярах. Один раз во внутренних буферах клиентской библиотеки MySQL, и еще один раз в переменных, возвращенных расширением. В теории, mysqlnd может до 40% сократить потребление памяти. В любом случае помните, что эту экономию не удастся замерить с помощью memory_get_usage(). | |
explicit_free_result ,
implicit_free_result |
Соединение, процесс (только на стадии очистки подготовленных запросов) | Общее количество высвобожденных результирующих наборов. | Очистка всегда производится явно, но для результирующих наборов, созданных
инициализирующими командами, например
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). | Связка метаданных C API / MySQL с именами метрик статистики:
Обратите внимение, что константы типов MYSQL_* могут не ассоциироваться с одинаковыми столбцами 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_* смотри в предыдущем пункте. |
Метрика | Область применения | Описание | Замечания |
---|---|---|---|
connect_success , connect_failure |
Соединение | Общее количество удачных/неудачных попыток соединения. | Переиспользованные и прочие типы соединений включаются. |
reconnect |
Процесс | Общее количество попыток выполнить real_connect на уже открытом соединении. | Следующий код $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). | Пример кода, в котором соединение закрывается не явно:
|
disconnect_close |
Соединение | Ошибки соединения возвращаемые при вызове C API mysql_real_connect() во время установления соединения. | Вызывается disconnect_close , потому, что идентификатор
соединения, переданный в вызов C API, должен быть закрыт. |
in_middle_of_command_close |
Процесс | Соединение закрыто во время исполнения команды (результирующий набор не извлечен, после запуска запроса и до получения ответа, во время извлечения данных, во время загрузки данных с помощью LOAD DATA). | если вы не используете асинхронные запросы, подобное может случиться только если работа скрипта неожиданно прервалась и PHP автоматически закрыл соединение. |
init_command_executed_count |
Соединение | Общее количество запусков инициализирующих команд, к примеру
mysqli_options(MYSQLI_INIT_COMMAND , ...) . |
Количество успешно запущенных команд равно
init_command_executed_count -
init_command_failed_count . |
init_command_failed_count |
Соединение | Общее количество неудачных инициализирующих команд. |
Метрика | Область применения | Описание | Замечания |
---|---|---|---|
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 вернет предупреждение Примеры использования:
|
Прочее
Метрика | Область применения | Описание | Замечания |
---|---|---|---|
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 увеличивает размер буфера более его начального размера
Размер буфера по умолчанию равен 2048 байт в PHP 5.3.0. В будущих
версиях по умолчанию будет 4kB или больше. Это значение можно поменять
в php.ini изменив значение ключа
рекомендуется устанавливать размер буфера не менее 4096 байт,
потому как mysqlnd также использует его при чтении определенных
комуникационных пакетов от сервера MySQL. В PHP 5.3.0, mysqlnd не
увеличивает буфер, если MySQL шлет пакет больший текущего размера буфера.
Из-за этого mysqlnd не может принять такой пакет и возвращает
ошибку пользовательскому приложению. Есть только два варианта,
когда размер пакета может быть более 2048 байт
(значение Начиная с PHP 5.3.2, mysqlnd не позволяет задавать размер буфера меньше 4096 байт. |
connection_reused |