На одном из проектов при переходе на инфоблоки+ (MySQL 5.0.x, InnoDB) столкнулись с ошибкой MySQL "Got error 139 from storage engine".
Данная ошибка проявлялась при вставке, или изменении данных, но не всех элементах. На ее появление влияло заполненность информации в элементе.
Ошибка возникала из за того, что в инфоблоке+ было много свойств (больше 150). В результате суммарная длина полей типа TEXT и VARCHAR в строке таблицы `b_iblock_element_prop_sXX` превышала ограничение MySQL на длину строки таблицы (примерно половина от размера страницы памяти 16 кБ).
Уменьшить количество свойств в инфоблоке в виду сложности проекта и нехватки времени не представлялось возможным, поэтому было принято решение собрать MySQL с увеличенным размером страници памяти до 64 кБ.
и так по порядку:
1. делаем резервную копию всех баз данных, так как после изменения размера страницы памяти их прийдеться создать заново
2. в исходниках MySQL находим файл innobase/include/univ.i
и устанавливаем следующие значения
#define UNIV_PAGE_SIZE (8 * 8192)
#define UNIV_PAGE_SIZE_SHIFT 16
3. собираем, устанавливаем и восстанавливаем базы данных
После данной модификации проблема была закрыта. На стабильности работы не отразилось.
Если превышение лимита небольшое можно для начала попробовать изменить длину полей DESCRIPTION_X с 255 на 1.
Данная ошибка проявлялась при вставке, или изменении данных, но не всех элементах. На ее появление влияло заполненность информации в элементе.
Ошибка возникала из за того, что в инфоблоке+ было много свойств (больше 150). В результате суммарная длина полей типа TEXT и VARCHAR в строке таблицы `b_iblock_element_prop_sXX` превышала ограничение MySQL на длину строки таблицы (примерно половина от размера страницы памяти 16 кБ).
Уменьшить количество свойств в инфоблоке в виду сложности проекта и нехватки времени не представлялось возможным, поэтому было принято решение собрать MySQL с увеличенным размером страници памяти до 64 кБ.
и так по порядку:
1. делаем резервную копию всех баз данных, так как после изменения размера страницы памяти их прийдеться создать заново
2. в исходниках MySQL находим файл innobase/include/univ.i
и устанавливаем следующие значения
#define UNIV_PAGE_SIZE (8 * 8192)
#define UNIV_PAGE_SIZE_SHIFT 16
3. собираем, устанавливаем и восстанавливаем базы данных
После данной модификации проблема была закрыта. На стабильности работы не отразилось.
Если превышение лимита небольшое можно для начала попробовать изменить длину полей DESCRIPTION_X с 255 на 1.