Когда клиент MySQL или сервер
mysqld получают пакет с
размерами, превышающими
max_allowed_packet байтов,
программа выдает ошибку Packet too
large и закрывает соединение.
В MySQL 3.23 размер самого большого возможного пакета составляет 16 Mб (из-за ограничений клиент-серверного протокола). В MySQL 4.0.1 и выше размер пакета ограничивается только количеством имеющейся на сервере памяти (вплоть до теоретического максимума в 2 Гб).
Коммуникационный пакет - это одна команда SQL, посылаемая серверу, или одна строка, посылаемая клиенту.
Когда клиент MySQL или сервер
mysqld получают пакет,
размеры которого превышают
max_allowed_packet байтов,
программа выдает ошибку Packet too
large и закрывает соединение.
Если коммуникационный пакет
слишком велик, то в некоторых
клиентах может быть выдана ошибка
Lost connection to MySQL server during query.
Отметим, что и клиент, и сервер
имеют свои собственные переменные
max_allowed_packet. Если
требуется обрабатывать большие
пакеты, то эту переменную
необходимо увеличить как для
клиента, так и для сервера.
Увеличение переменной не опасно, поскольку память выделяется только при необходимости; эта переменная скорее является мерой предосторожности для "отлавливания" неправильных пакетов между клиентом и сервером, а также для того, чтобы предупредить ситуацию нехватки памяти, вследствие случайного использования больших пакетов.
Если используется клиент
mysql, то можно задать
больший буфер, запустив клиент
посредством mysql
--set-variable=max_allowed_packet=8M. Для
других клиентов существуют
собственные методы установки этой
переменной. Обратите внимание, что
начиная с 4.0 использование
--set-variable не рекомендуется,
используйте просто
--max-allowed-packet=8M.
Для установки max_allowed_packet
большего размера в mysqld
можно также использовать файл
опций. Например, если в таблице
предполагается хранить значение
типа MEDIUMBLOB максимальной
длины, то нужно запускать сервер с
опцией
set-variable=max_allowed_packet=16M.
При использовании больших пакетов
могут также возникать
непредсказуемые проблемы, если вы
работаете с большими значениями
типа BLOB, и mysqld
не был предоставлен доступ к
достаточному объему памяти для
обработки запроса. Если есть
подозрение, что дело в этом,
попробуйте добавить ulimit -d
256000 в начале скрипта
safe_mysqld и перезапустить
mysqld.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
© 1995-2005 MySQL AB. All rights reserved.
