Настройка во время выполнения
Вернуться к: Mysqlnd
Поведение этих функций зависит от установок в 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 | "31536000" | PHP_INI_SYSTEM | Доступен с PHP 5.3.0. |
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.fetch_data_copy | 0 | PHP_INI_ALL | Доступен с PHP 5.6.0. |
Краткое разъяснение конфигурационных директив.
-
mysqlnd.collect_statistics
boolean -
Включает сбор различной статистики клиента, доступ к которой можно получить с помощью mysqli_get_client_stats(), mysqli_get_connection_stats(), mysqli_get_cache_stats() и которая отображается в разделе mysqlnd вывода функции phpinfo().
Этот параметр конфигурации включает всю статистику встроенного драйвера MySQL, кроме относящейся к работе с оперативной памятью.
-
mysqlnd.collect_memory_statistics
boolean -
Включает сбор различной статистики оперативной памяти, доступ к которой можно получить с помощью mysqli_get_client_stats(), mysqli_get_connection_stats(), mysqli_get_cache_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
integer -
Определяет, какие запросы будут журналироваться. Значение по умолчанию - 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
integer -
Default size of the mysqlnd memory pool, which is used by result sets.
-
mysqlnd.net_read_timeout
integer -
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 устанавливает таймаут по умолчанию равным 365 * 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
long -
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 байт. Вручную его можно изменить либо в php.ini, установив параметр mysqlnd.net_cmd_buffer_size, или с помощью функции mysqli_options(MYSQLI_OPT_NET_CMD_BUFFER_SIZE, int size).
Рекомендуется устанавливать размер буфера не менее 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
long -
Максимальный размер части данных при считывании, в байтах, при обработке тела командного пакета 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.fetch_data_copy
long -
Принуждает копировать наборы из внутреннего буфера наборов в PHP переменные вместо использования логики с ссылками и "копированием при записи" по умолчанию. Смотрите реализация управления памятью для получения большей информации.
Копирование результирующих наборов вместо PHP переменных ссылающихся на них позволяют выделять память для PHP переменных заранее. В зависимости от пользовательского кода, реальных запросов к базе данных и размеров их результатов, можно снизить потребление памяти mysqlnd.
Не применяйте, если используется PDO_MySQL. В PDO_MySQL еще не добавлена поддержка этого нового режима.
Вернуться к: Mysqlnd