Россия

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

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

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

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

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

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

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

waiting for table level lock

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

Задача с подвисанием сайта решилась переводом таблиц на InnoDB.
Для этого в админке битрикса мы перешли в Настройки -> Производительность -> Таблицы и для всего списка таблиц выбрали Преобразовать в InnoDB.

битрикс преобразуем таблицы в InnoDB

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

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


21.01.2019

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