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

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

Параметры конфигурации встроенного драйвера MySQL
Имя | По умолчанию | Место изменения | Список изменений
--- | --- | --- | ---
mysqlnd.collect_statistics | "1" | `INI_SYSTEM` |
mysqlnd.collect_memory_statistics | "0" | `INI_SYSTEM` |
mysqlnd.debug | "" | `INI_SYSTEM` |
mysqlnd.log_mask | 0 | `INI_ALL` |
mysqlnd.mempool_default_size | 16000 | `INI_ALL` |
mysqlnd.net_read_timeout | "86400" | `INI_ALL` | До PHP 7.2.0 значением по умолчанию "31536000", а местом изменения было `INI_SYSTEM`
mysqlnd.net_cmd_buffer_size | 5.3.0 — "2048", 5.3.1 — "4096" | `INI_SYSTEM` |
mysqlnd.net_read_buffer_size | "32768" | `INI_SYSTEM` |
mysqlnd.sha256_server_public_key | "" | `INI_PERDIR` |
mysqlnd.trace_alloc | "" | `INI_SYSTEM` |
mysqlnd.fetch_data_copy | 0 | `INI_ALL` | Удалено с PHP 8.1.0

Дополнительную информацию и определения режимов 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.

`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_size` (в php.ini) байт для каждого соединения. Если команда клиент-серверного протокола MySQL, например, `COM_QUERY` (обычный запрос), не умещается в буфер, `mysqlnd` увеличит буфер до размера, необходимого для отправки команды. Каждый раз, когда буфер был увеличен, переменная статистики `command_buffer_too_small` будет увеличена на один. Если `mysqlnd` приходится увеличивать буфер сверх его заданного размера в `mysqlnd.net_cmd_buffer_size` байт для большинства соединений, вам следует обдумать необходимость увеличения размера по умолчанию, чтобы избежать повторных резерваций буфера. Размер буфера по умолчанию составляет 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 ещё не добавлена поддержка этого нового режима.

  > Замечание: Удалено с PHP 8.1.0

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