Настройка во время выполнения
Поведение этих функций зависит от установок в php.ini.
Имя | По умолчанию | Место изменения | Список изменений |
---|---|---|---|
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. |
Краткое разъяснение конфигурационных директив.
-
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
байт для большинства соединений, вам следует обдумать необходимость увеличения размера по умолчанию, чтобы избежать повторных резерваций буфера.Размер буфера по умолчанию равен 2048 байт в PHP 5.3.0. В дальнейших версиях значение по умолчанию составляет 4096 байт.
Рекомендуется устанавливать размер буфера не менее 4096 байт, поскольку
mysqlnd
также использует его при считывании определенных пакетов данных из MySQL. В PHP 5.3.0mysqlnd
не станет увеличивать размер буфера, если 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 еще не добавлена поддержка этого нового режима.