max_allowed_packet

mihail_13
Дата: 21.12.2012 22:46:54
Можно ли в сессии устанавливать max_allowed_packet? (сессия от root)
Запрос на установку проходит, но длинный пакет не проходит.
Akina
Дата: 21.12.2012 23:25:40
Нет. Только через строку запуска или конфиг-файл.
javajdbc
Дата: 21.12.2012 23:28:00
mihail_13,

пишут что низя:

http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_max_allowed_packet

The session value of this variable is read only.
mihail_13
Дата: 21.12.2012 23:48:04
А память под него выделяется один раз на все сессии или под каждую сессию отдельно?
netwind
Дата: 22.12.2012 00:32:31
mihail_13, память может выделиться в конкретных редких случаях, но специальный блок размером в эту переменную не выделяется. хостеры часто думают иначе и портят эту настройку. Ну или они делают это как меру стимуляции перехода на более дорогие тарифы.
mihail_13
Дата: 22.12.2012 00:49:35
Сервер свой и кроме меня там портить не кому. Размер передаваемых пакетов (многозаписевые инсерты) соответсвует размеру буфера и наверно память все таки выделяется. Периодически одновременно живут не менее 60 сессий. В результате память заканчивается и все умирает. Поэтому уменьшил некоторые глобальные значения в настройках. Но для отдельных сессий хотелось бы иметь больший max_allowed_packet.
Akina
Дата: 22.12.2012 13:39:16
mihail_13
для отдельных сессий хотелось бы иметь больший max_allowed_packet.

Невозможно, это настройка сервера, а не сессии.
mihail_13
память заканчивается и все умирает
Увеличьте. Хотя мне что-то сильно сомнительно, что дело именно в этом. Пул приёма пакетов - один на всех. А настройка просто не даёт отдельным запросам хамить сверх меры.
mihail_13
Дата: 22.12.2012 14:30:48
Информация по этому вопросу противоречива. По части источников эта переменная настраивается и глобально и для сессии и память выделяется под каждую сессию, по другой части она глобальная но по поводу выделяется память под всех один раз или под каждую сессию опять нет единого мнения.
Сам убедился, что сессия может менять эту переменную для сессии, но похоже все равно использует глобальное значение. По поеданию памяти при большом количестве сессий, похоже что память выделяется каждой сессии. (возможно потому что mysql работает в многопоточном режиме).

Увеличить память проблемно - в эту матплату больше 8-ми сейчас не поставить. Да и на новых обычно не больше 32.
Arhat109
Дата: 22.12.2012 14:50:46
mihail_13,

ограничьте количество сессий.
netwind
Дата: 22.12.2012 14:58:58
mihail_13
Сервер свой и кроме меня там портить не кому. Размер передаваемых пакетов (многозаписевые инсерты) соответсвует размеру буфера и наверно память все таки выделяется. Периодически одновременно живут не менее 60 сессий. В результате память заканчивается и все умирает. Поэтому уменьшил некоторые глобальные значения в настройках. Но для отдельных сессий хотелось бы иметь больший max_allowed_packet.

60 сессий каждая из которых делает инсерт? весьма сомневаюсь.
ваши наблюдения доказывают лишь то, что в каждой сессии существуют отдельные буферы, но это не обязательно те буферы, которые управляются max_allowed_packet.