Настройка во время выполнения

Поведение этих функций зависит от установок в php.ini.

Параметры конфигурации встроенного драйвера MySQL
Имя По умолчанию Место изменения Список изменений
mysqlnd.collect_statistics "1" PHP_INI_SYSTEM Доступен с PHP 5.3.0.
mysqlnd.collect_memory_statistics "0" PHP_INI_SYSTEM Доступен с PHP 5.3.0.
mysqlnd.debug "" PHP_INI_SYSTEM Доступен с PHP 5.3.0.
mysqlnd.log_mask 0 PHP_INI_ALL Доступен с PHP 5.3.0
mysqlnd.mempool_default_size 16000 PHP_INI_ALL Доступен с PHP 5.3.3
mysqlnd.net_read_timeout ""86400"" PHP_INI_ALL Доступен с PHP 5.3.0. До PHP 7.2.0 значением по умолчанию "31536000", а местом изменения было PHP_INI_SYSTEM
mysqlnd.net_cmd_buffer_size 5.3.0 - "2048", 5.3.1 - "4096" PHP_INI_SYSTEM Доступен с PHP 5.3.0.
mysqlnd.net_read_buffer_size "32768" PHP_INI_SYSTEM Доступен с PHP 5.3.0.
mysqlnd.sha256_server_public_key "" PHP_INI_PERDIR Доступен с PHP 5.5.0.
mysqlnd.trace_alloc "" PHP_INI_SYSTEM Доступен с PHP 5.5.0.
mysqlnd.fetch_data_copy 0 PHP_INI_ALL Доступен с PHP 5.6.0.
Для подробного описания констант PHP_INI_*, обратитесь к разделу Где могут быть установлены параметры конфигурации.

Краткое разъяснение конфигурационных директив.

mysqlnd.collect_statistics bool

Включает сбор различной статистики клиента, доступ к которой можно получить с помощью mysqli_get_client_stats(), mysqli_get_connection_stats(), и которая отображается в разделе mysqlnd вывода функции phpinfo().

Этот параметр конфигурации включает всю статистику встроенного драйвера MySQL, кроме относящейся к работе с оперативной памятью.

mysqlnd.collect_memory_statistics bool

Включает сбор различной статистики оперативной памяти, доступ к которой можно получить с помощью mysqli_get_client_stats(), mysqli_get_connection_stats(), и которая отображается в разделе mysqlnd вывода функции phpinfo().

Этот параметр конфигурации включает всю статистику, относящуюся к работе с оперативной памятью, в общий набор данных статистики встроенного драйвера MySQL.

mysqlnd.debug string

Записывает команды из всех расширений, использующих mysqlnd, в указанный файл с логами.

Формат параметра следующий: mysqlnd.debug = "option1[,parameter_option1][:option2[,parameter_option2]]".

Возможны нижеуказанные значения для строки форматирования:

  • A[,file] - добавляет вывод трассировки в указанный файл. Также каждый раз проверяет успешность записи данных. Это реализовано путем закрытия и повторного открытия файла (что достаточно медленно). Дает гарантию целостности файла с логами в случае ошибки приложения.

  • a[,file] - добавляет вывод трассировки в указанный файл.

  • d - Включает вывод из макроса DBUG_<N> для текущего состояния. Может быть дополнено списком ключевых слов, чтобы выбрать вывод только содержащего эти ключевые слова макросов DBUG. Пустой список ключевых слов подразумевает вывод всех для макросов.

  • f[,functions] - ограничивает действия отладчика указанным списком функций. Пустой список функций подразумевает выбор всех функций.

  • F - помечает вывод каждой строчки отладчика названием исходного файла, содержащего код, вызвавший вывод.

  • i - помечает вывод каждой строчки отладчика PID текущего процесса.

  • L - помечает вывод каждой строчки отладчика названием исходного файла, вызвавшего вывод, и номером строки в ней.

  • n - помечает вывод каждой строчки отладчика уровнем вложенности текущей функции.

  • o[,file] - сходно с a[,file], но перезаписывает старый файл, а не дописывает его.

  • O[,file] - сходно с A[,file] но перезаписывает старый файл, а не дописывает его.

  • t[,N] - включает контроль функций во время трассировки. Максимальный уровень вложенности определен N и по умолчанию равен 200.

  • x - этот параметр активирует профилирование.

  • m - отслеживать вызовы, связанные с выделениями и высвобождением памяти.

Пример:

d:t:x:O,/tmp/mysqlnd.trace

Замечание:

Эта возможность доступна только для отладочной сборки PHP. Работает на Microsoft Windows при использовании отладочной сборки PHP, если PHP был собран с помощью Microsoft Visual C версии 9 и выше.

mysqlnd.log_mask int

Определяет, какие запросы будут журналироваться. Значение по умолчанию - 0, что отключает журналирование. Значение параметра - только целое число, константы PHP использовать нельзя. Например, при значении 48 (16 + 32) в журнал будут записываться медленные запросы, которые либо используют неподходящие индексы (SERVER_QUERY_NO_GOOD_INDEX_USED = 16), либо не используют их вообще SERVER_QUERY_NO_INDEX_USED = 32). При значении 2043 (1 + 2 + 8 + ... + 1024) в журнал будут записываться все типы медленных запросов.

Используются следующие типы запросов: SERVER_STATUS_IN_TRANS=1, SERVER_STATUS_AUTOCOMMIT=2, SERVER_MORE_RESULTS_EXISTS=8, SERVER_QUERY_NO_GOOD_INDEX_USED=16, SERVER_QUERY_NO_INDEX_USED=32, SERVER_STATUS_CURSOR_EXISTS=64, SERVER_STATUS_LAST_ROW_SENT=128, SERVER_STATUS_DB_DROPPED=256, SERVER_STATUS_NO_BACKSLASH_ESCAPES=512, and SERVER_QUERY_WAS_SLOW=1024.

mysqlnd.mempool_default_size int

Default size of the mysqlnd memory pool, which is used by result sets.

mysqlnd.net_read_timeout int

mysqlnd и клиентская библиотека MySQL, libmysqlclient, используют разные сетевые API. mysqlnd использует потоки PHP, тогда как libmysqlclient - собственную обертку над сетевыми вызовами операционной системы. В PHP по умолчанию выставлен 60-секундный таймаут для потоков. Этот параметр выставляется в php.ini директивой default_socket_timeout. По умолчанию это относится ко всем потокам, которым не установлено другое значение таймаута. mysqlnd не устанавливал других значений, поэтому подключения долго выполняющихся запросов могут быть отключены после default_socket_timeout секунд с ошибкой 2006 - MySQL Server has gone away. Клиентская библиотека MySQL устанавливает таймаут по умолчанию равным 24 * 3600 секунд (1 день) и ждет возникновения других таймаутов, таких как таймаут TCP/IP. Теперь mysqlnd использует такой же очень долгий таймаут. Это значение можно изменить через новую директиву php.ini - mysqlnd.net_read_timeout. mysqlnd.net_read_timeout будет использоваться любым расширением (ext/mysql, ext/mysqli, PDO_MySQL), использующим mysqlnd. mysqlnd указывает потокам PHP использовать mysqlnd.net_read_timeout. Пожалуйста, обратите внимание, что могут быть небольшие различия между MYSQL_OPT_READ_TIMEOUT в клиентской библиотеке MySQL и потоках PHP, например, судя по документации, MYSQL_OPT_READ_TIMEOUT работает только для TCP/IP-подключений и, вплоть до MySQL 5.1.2, только под Windows. Потоки PHP могут не иметь подобных ограничений. В случае сомнений просьба сверяться с документацией потоков.

mysqlnd.net_cmd_buffer_size int

mysqlnd резервирует внутренний командно-сетевой буфер размером mysqlnd.net_cmd_buffer_sizephp.ini) байт для каждого соединения. Если команда клиент-серверного протокола MySQL, например, COM_QUERY (обычный запрос), не умещается в буфер, mysqlnd увеличит буфер до размера, необходимого для отправки команды. Каждый раз, когда буфер был увеличен, переменная статистики command_buffer_too_small будет увеличена на один.

Если mysqlnd приходится увеличивать буфер сверх его заданного размера в mysqlnd.net_cmd_buffer_size байт для большинства соединений, вам следует обдумать необходимость увеличения размера по умолчанию, чтобы избежать повторных резерваций буфера.

Размер буфера по умолчанию равен 2048 байт в PHP 5.3.0. В дальнейших версиях значение по умолчанию составляет 4096 байт.

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

Начиная с PHP 5.3.2 mysqlnd не дает установить значение буфера менее 4096 байт.

Это значение также может быть установлено функцией mysqli_options(link, MYSQLI_OPT_NET_CMD_BUFFER_SIZE, size).

mysqlnd.net_read_buffer_size int

Максимальный размер части данных при считывании, в байтах, при обработке тела командного пакета MySQL. Клиент-серверный протокол MySQL оборачивает все свои команды в пакеты. Пакет состоит из небольшого заголовка и тела, содержащего непосредственно данные команды. Размер тела закодирован в заголовке. mysqlnd считывает тело частями по MIN(header.size, mysqlnd.net_read_buffer_size) байт. Если размер тела пакета больше, чем mysqlnd.net_read_buffer_size байт, mysqlnd будет вызывать read() несколько раз.

Это значение также может быть установлено функцией mysqli_options(link, MYSQLI_OPT_NET_READ_BUFFER_SIZE, size).

mysqlnd.sha256_server_public_key string

Данная опция относится к плагину аутентификации SHA-256 и содержит путь к файлу с публичным ключом RSA MySQL-сервера..

Клиент может как не указывать публичный ключ RSA, указать его с помощью данной опции, либо установить ключ во время выполнения с помощью функции mysqli_options(). Если публичный ключ RSA не был передан клиентом, то ключ будет получен в результате стандартной процедуры аутентификации плагина аутентификации SHA-256.

mysqlnd.trace_alloc string

mysqlnd.fetch_data_copy int

Принуждает копировать наборы из внутреннего буфера наборов в PHP переменные вместо использования логики с ссылками и "копированием при записи" по умолчанию. Смотрите реализация управления памятью для получения большей информации.

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

Не применяйте, если используется PDO_MySQL. В PDO_MySQL еще не добавлена поддержка этого нового режима.