A.2.8 Ошибка Packet too large
A.2.8 Ошибка Packet too large
Когда клиент 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. Для других
клиентов существуют собственные методы установки этой переменной.
Для установки max_allowed_packet большего размера в mysqld можно также
использовать файл опций. Например, если в таблице предполагается хранить
значение типа MEDIUMBLOB максимальной длины, то нужно запускать сервер с
опцией set-variable=max_allowed_packet=16M.
При использовании больших пакетов могут также возникать непредсказуемые
проблемы, если вы работаете с большими значениями типа BLOB, и mysqld не
был предоставлен доступ к достаточному объему памяти для обработки
запроса. Если есть подозрение, что дело в этом, попробуйте добавить ulimit
-d 256000 в начале скрипта safe_mysqld и перезапустить mysqld.
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий
|