В соответствии со страницей 99 "Понимание внутренних компонентов MySQL" (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 абзаца прямо из книги.