Spec-Zone .ru
спецификации, руководства, описания, API

C.5.2.10. Слишком Большой пакет

Коммуникационный пакет является единственным SQL-оператором, отправленным серверу MySQL, единственная строка, которая отправляется клиенту, или двоичному событию журнала, отправленному от главного сервера репликации до ведомого устройства.

Самый большой пакет, который может быть передан к или от сервера MySQL 5.7 или клиента, составляет 1 Гбайт.

Когда клиент MySQL или mysqld сервер получают пакет, больше чем max_allowed_packet байты, это выходит ER_NET_PACKET_TOO_LARGE ошибка и завершения соединение. С некоторыми клиентами можно также получить a Lost connection to MySQL server during query ошибка, если коммуникационный пакет является слишком большим.

У и клиента и сервера есть их собственное max_allowed_packet переменная, так, если Вы хотите обработать большие пакеты, следует увеличить эту переменную и в клиенте и в сервере.

Если Вы используете mysql клиентскую программу, ее значение по умолчанию max_allowed_packet переменная составляет 16 МБ. Чтобы установить большее значение, запустите mysql как это:

shell> mysql --max_allowed_packet=32M

Это устанавливает пакетный размер в 32 МБ.

Значение по умолчанию сервера max_allowed_packet значение составляет 1 МБ. Можно увеличить это, если сервер должен обработать большие запросы (например, если Вы работаете с большим BLOB столбцы). Например, чтобы установить переменную в 16 МБ, запустите сервер как это:

shell> mysqld
        --max_allowed_packet=16M

Можно также использовать файл опции, чтобы установить max_allowed_packet. Например, чтобы установить размер для сервера к 16 МБ, добавьте следующие строки в файле опции:

[mysqld]max_allowed_packet=16M

Безопасно увеличить значение этой переменной, потому что дополнительная память выделяется только при необходимости. Например, mysqld выделяет больше памяти только, когда Вы выпускаете долгий запрос или когда mysqld должен возвратить большую строку результата. Маленькое значение по умолчанию переменной является предосторожностью, чтобы поймать неправильные пакеты между клиентом и сервером и также гарантировать, что Вы не исчерпываете память при использовании больших пакетов случайно.

Можно также получить странные проблемы с большими пакетами, если Вы используете большой BLOB значения, но не предоставили mysqld доступ к достаточному количеству памяти, чтобы обработать запрос. Если Вы подозреваете дело обстоит так, попытайтесь добавить ulimit-d 256000 к началу mysqld_safe сценария и перезапуска mysqld.