Поведение этих функций зависит от установок в php.ini.
Имя | По умолчанию | Место изменения | Список изменений |
---|---|---|---|
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 |
Краткое разъяснение конфигурационных директив.
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_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