Перевод таблиц базы данных c MyISAM на InnoDB

При переезде сайта на новый шаблон Аспро: Оптимус - интернет-магазин значительно увеличилась нагрузка на базу данных и сайт стал медленно работать, страницы грузились 3-4 секунды и периодически зависали так, что приходилось завершать процессы.

Начали искать причину.
Поскольку проблема появилась после перехода на новый шаблон, решили, что причина в нем. Проверили отладкой скорость загрузки, обнаружили, что больше всего времени требует список элементов(catalog.section) и "летающая корзина", которая подгружала список добавленных в корзину товаров. Для тестирования, временно отключили корзину, сайт стал немного быстрее, но проблема с зависанием сохранилась.

Следующим шагом, проверили скрипты на кроне и агентах, т.к сайт тормозил не постоянно, а периодами. На кроне скриптов не оказалось, а агенты были стандартные.

Затем проверили модули, установленные с маркетплейса, отключили несколько старых и неиспользуемых. Проблема со скоростью осталась.

Далее на хостинге timeweb, где размещался сайт, отключили все другие проекты на аккаунте. Стало очевидно, что проблема именно на данном сайте.

Отладка битрикса показывала высокое время исполнения запросов при загрузке Рабочей области, но не постоянно, а периодически, во время интеграции с 1С. Поэтому мы подключились по ssh и, для просмотра процессов MySQL, выполнили команду:
mysqladmin -u'название_бд' -p'пароль' pr

В результате, выяснили, что при интеграции 1С с сайтом, появляются записи со статусом waiting for table level lock. Дело в том, что на сайте использовались таблицы MyISAM, в которых при повышенной нагрузки и записи в БД происходила блокировка.

Задача решилась переводом таблиц на InnoDB.
Для этого в админке битрикса мы перешли в Настройки -> Производительность -> Таблицы и для всего списка таблиц выбрали Преобразовать в InnoDB.
Благодаря использованию транзакций, InnoDB более надежные, чем MyISAM и, при высокой посещаемости, статус waiting for table level lock появится намного позже. 

Проверить тип таблиц на своем сайте вы можете на странице https://ВАШ_ДОМЕН/bitrix/admin/perfmon_tables.php?lang=ru


22.01.2019

Семен Голиков.