Обходим проблему "Слишком много свойств (больше 50). Преобразование невозможно."

Битрикс позволяет хранить свойства инфоблока в двух режимах: в общей таблице (режим по умолчанию) и в отдельной таблице.

Режим хранения свойств инфоблока.

В случае общей таблицы (*_iblock_element_property), свойства хранятся "вертикально" и при вызовах GetList() собираются SQL-запросами с кучей JOIN'ов, что тормозит выборку.

В случае хранения свойств инфоблока в отдельной таблице, свойства хранятся "горизонтально", в одном SQL-ряду (строке) для одиночных свойств (*_iblock_element_prop_s*), а для множественных всё также "вертикально", но в индивидуальной таблице (*_iblock_element_prop_m*).

Битрикс, официально рекомендует выбирать режим хранения в отдельной таблице. (смотрите по ссылке)

При создании информационных блоков рекомендуется хранить свойства инфоблока в отдельной таблице, причем все значения свойств одного элемента хранятся в одной строке.

Из личного опыта. Хранение свойств в отдельной таблице ускоряет работу Битрикс в некэшированном состоянии, то есть на стадии разогрева кэша (при первом запросе). При этом количество SQL-запросов увеличивается, но обрабатываются они MySQL/MariaDB быстрее, так как являются достаточно простыми, по сравнению с запросами из режима по умолчанию (в общей таблице).

Если вам необходимо произвести конвертацию и вы столкнулись с проблемой "Слишком много свойств (больше 50). Преобразование невозможно.", тогда последуйте моему совету.

Слишком много свойств (больше 50). Преобразование невозможно.

На время конвертации, необходимо внести парочку изменений в конвертор Битрикса и настройки PHP.

1. В файле /bitrix/modules/iblock/admin/iblock_convert.php:197

На строке 197, число 50 заменяем на 1000 или на количество свойств, которое существует в конвертируемом инфоблоке. Я рекомендую ставить цифру, чтобы она превышала количество свойств, например в 2 раза.

iblock_convert.php

2. В настройках PHP (php.ini) изменить установки на вот эти:

max_execution_time = 1800

max_input_time = 1800

memory_limit = 512M.

И ещё пара советов:


1. Не забудьте сделать резервную копию рабочей базы данных.

2. Сперва протестируйте конвертацию на своём сервере разработки.

Успешной конвертации, коллеги!