Что делает MySQL “max_allowed_packet” устанавливающий, на самом деле управляют?

Мы очищали проблемы базы данных в течение прошлых четырех часов благодаря поврежденному mysqldump это не было достаточно erroring. Мы получали эти ошибки:

mysqldump: Error 2020: Got packet bigger than "max_allowed_packet" bytes when dumping table "search_dataset" at row: 68014

Какого черта та установка делает? Это - очевидно, не размер пакета IP, так как у меня есть он набор к 32M теперь. Почему это существует?

8
задан 03.10.2013, 18:13

2 ответа

Согласно странице 99 "Понимания MySQL Internals" (ISBN 0-596-00957-7), вот абзацы 1-3, объясняющие это:

Код сетевой связи MySQL был написан под предположением, что запросы всегда довольно коротки, и поэтому могут быть отправлены в и обработаны сервером в одном блоке, который называют пакетом в терминологии MySQL. Сервер выделяет память для временного буфера для хранения пакета, и это запрашивает достаточно для установки ему полностью. Эта архитектура требует, чтобы предосторожность постаралась не разряжать сервер память---ограничение на размере пакета, который выполняет эта опция.

Код интереса относительно этой опции найден в sql/net_serv.cc. Смотрите на my_net_read (), затем следуйте за вызовом к my_real_read () и обратите особое внимание на net_realloc ().

Эта переменная также ограничивает длину результата многих строковых функций. См. sql/field.cc и sql/intem_strfunc.cc для деталей.

Это - вероятно, самое полное объяснение max_allowed_packet, который я когда-либо видел. Я ввел те 3 абзаца прямо из книги.

7
ответ дан 07.12.2019, 14:10

Документация объясняет это в полных деталях здесь:

"Максимальный размер одного пакета или любой генерировал/посредничал строку...."

Документация также продолжает обращаться к БЛОБАМ и как эта установка набрасывается на них.

1
ответ дан 07.12.2019, 14:10

Теги

Похожие вопросы