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