яке розумне значення для max_allowed_packet для Drupal 7 з помірним трафіком?


12

Мені потрібно знати номер парку парку для цієї змінної для мого сайту drupal 7. Нещодавно я отримав PDPException "drupal": SQLSTATE [08S01]: Помилка зв'язку зв'язку: 1153 "Помилка. Я новачок у mysql і використовую спільний хостинг. Напевно, мені потрібно попросити адміністратора зробити це для мене.

Заздалегідь спасибі.


1
Моя відповідь показує мій досвід цього, але ви можете отримати кращі відповіді на dba.stackexchange.com від тих, хто підтримує MySQL на життя.
mpdonadio

Відповіді:


12

Я побачив цікаву відповідь на питання про найбільший BLOB, який у вас може виникнути. Ось твердження, яке я бачив у ServerFault: innodb_log_file_size та innodb_log_buffer_size разом повинні бути більше, ніж удесятеро, ніж ваш найбільший об'єкт, коли у вас багато великих .

Виходячи з цього повідомлення ServerFault від Nils-Anders Nøttseter , слід запитати таблицю і з’ясувати, який BLOB є найбільшим, помножити це число на 11 і більше, і використовувати цю відповідь як max_allowed_packet, який рухається вперед.

Смішно, що я вирішив ще одне питання, де я запропонував розмістити пакет max_allowed, щоб сподіватися вирішити проблему .

КАВАТИ

Згідно з Книгою

TheBookImage

Ось що йдеться про параграфах 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

Чи не максимум дозволений пакет також не впливає на розмір операторів вставки?
Buttle Butkus

@ButtleButkus Звичайно. Ось чому більші пакети MySQL добре справляються з INSERT. Зверніть увагу, що 1G - це максимальний розмір для max_allowed_packet. Також зауважте, що встановлення max_allowed_packet на 256M не виділяє 256M наперед. Відповідно до dev.mysql.com/doc/refman/5.6/en/… , mysqld виділяє будь-яку довжину net_buffer_le як початковий розмір пакета MySQL. Пакет поступово зростає до розміру, встановленого max_allowed_packet. Тому добре встановити великий max_allowed_packet. ВСТАВКИ полюблять вас за це.
RolandoMySQLDBA

Я ніколи не встановлював це щось наближене до такого розміру, хоча у нас є пара машин з 32G оперативної пам’яті. Додаток хоч і захлинувся, і я збільшив його до 32М зі стандартної (1М?), І це спрацювало. Можливо, я його ще більше збільшу, якщо це не зашкодить. Але, чи повинні програми перевіряти max_allowed_packet і розбивати вставки на шматки, щоб уникнути межі? Який мінус у такому підході? Можливо, я повинен розмістити це питання на сайті стека dba.
Buttle Butkus

Не могли б ви детальніше розібратися, чому нам слід помножити на 11? Пов'язаний пост про буфери innodb - як це пов'язано з розміром пакету?
SystemParadox

4

Взяте на сторінці вимог сервера баз даних Drupal :

Може знадобитися встановити системну змінну max_allowed_packet принаймні 16М. Деякі недорогі хостингові плани задають це значення занадто низьким (за замовчуванням MySQL - лише 1М). У такому випадку вам може знадобитися вибрати кращий план хостингу. Значення 1М може бути достатнім для Drupal 5.

Має бути добре для сайту на спільному хостингу.


1
Ого!! Вимоги сервера Drupal офіційно кажуть, що це 16М !! Я ніколи про це не знав. Зауважте це наступного разу. Дякую велике за те, що поділилися цією інформацією. Я б хотів, щоб я міг відзначити це найкращою відповіддю !!
шивам

2

Це може бути трохи складно встановити max_allowed_packet. Я ще не натрапив на метод обчислення цього значення. Як правило, я натрапляю на нього при спробі відновити знімок бази даних, що включає рядки з {cache}таблиць.

Коли у мене виникне ця проблема, я підберу значення між 4М та 8М. Я продовжую набивати значення, поки воно не зупиниться. Однак я не знаю, чи спільний хост змінить це значення для вас.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.