Я побачив цікаву відповідь на питання про найбільший BLOB, який у вас може виникнути. Ось твердження, яке я бачив у ServerFault: innodb_log_file_size та innodb_log_buffer_size разом повинні бути більше, ніж удесятеро, ніж ваш найбільший об'єкт, коли у вас багато великих .
Виходячи з цього повідомлення ServerFault від Nils-Anders Nøttseter , слід запитати таблицю і з’ясувати, який BLOB є найбільшим, помножити це число на 11 і більше, і використовувати цю відповідь як max_allowed_packet, який рухається вперед.
Смішно, що я вирішив ще одне питання, де я запропонував розмістити пакет max_allowed, щоб сподіватися вирішити проблему .
КАВАТИ
Згідно з Книгою
Ось що йдеться про параграфах 1-3 про пакети MySQL:
Код зв'язку в мережі MySQL був написаний з припущенням, що запити завжди досить короткі, а тому можуть бути відправлені та оброблені сервером за один фрагмент, який в термінології MySQL називається пакетом . Сервер виділяє пам'ять на тимчасовий буфер для зберігання пакету, і він вимагає достатньо, щоб повністю його вмістити. Ця архітектура вимагає запобіжних заходів, щоб уникнути втрати пам’яті сервера --- обмеження розміру пакету, яке виконується цим параметром.
Код, що цікавить цей параметр, можна знайти в
sql / net_serv.cc . Погляньте на my_net_read () , потім слідкуйте за викликом до my_real_read () і зверніть особливу увагу на
net_realloc () .
Ця змінна також обмежує довжину результату багатьох функцій струн. Докладніше див. Sql / field.cc та
sql / intem_strfunc.cc .
Знаючи це про пакети MySQL, дозволяє DBA розміру їх розміру для розміщення декількох BLOB в одному пакеті MySQL, навіть якщо вони необов'язково великі.
Що стосується вашої ситуації, ви повинні дізнатися, який найбільший BLOB у вашій базі даних, помножте це число на 11 і встановіть ваш max_allowed_packet на це число. Ви повинні мати можливість встановити його на сервер без перезавантаження mysql (особисто я встановив би його 256M, оскільки він вирішив би інші проблеми щодо міграції та реплікації, що виходить за межі цього форуму). Щоб встановити його на 256 М для вашої бази даних для всіх вхідних з'єднань, запустіть це:
SET GLOBAL max_allowed_packet = 1024 * 1024 * 256;
Після цього додайте цей параметр до my.cnf у [mysqld]
розділі:
[mysqld]
max_allowed_packet = 256M