Производство фотообоев в Новосибирске. Интернет магазин фотообоев. Изготовление - один день! Каталог 10 000 изображений!
28 Январь 2016

Битрикс оптимизация — большой размер b_sale_fuser

posted in Bitrix |

Новое ТЗ — предоставлен сайт с временем открытия «морды» 10 секунд (в не авторизованном режиме).
В рамках этого ТЗ подразумеваю будет не один пост 🙂
Что понравилось — лицензия активна и актуальна, а движек не обновлялся с 2012года 🙂
Конечно же, первое — решил обновиться до актуальной версии и создавая бэкап обратил внимание на очень большой размер БД.
Посмотрел phpmyadmin-ом и обратил внимание на 3 таблички с размерами более 200мб — в одной из них более 5.3 миллионов записей!
таблицы корзины
Поиск по запросу b_sale_fuser дал релевантные результаты
http://dev.1c-bitrix.ru/community/webdev/user/10337/blog/2323/
http://dev.1c-bitrix.ru/community/webdev/user/10337/blog/11317/
http://dev.1c-bitrix.ru/community/webdev/user/10337/blog/11202/
http://dev.1c-bitrix.ru/support/forum/forum6/topic50942/
http://marketplace.1c-bitrix.ru/solutions/alexkova.fileinspector/
В итоге пришел к выводу, что как раз из-за косяка в старом движке (господа — не экономьте на обновлениях!) эта проблема и всплыла.
Поставил инпектора — запустил очистку, процесс ОЧЕНЬ долгий — похоже на весь день 🙁
По хорошему кильнуть бы это всё не API Битрикса, а напрямую MySQL запросом — было бы быстрее в несколько порядков, но тут конечно риск накосопорить с базой …

P.S. ТАК НЕ ДЕЛАТЬ !!!! (инфа добавлена после этих удаление и восстановления БД — вся информация детальная о заказах тоже грохнулась, хотя странно)
В общем ждал я ждал, ждал, ждал, ждал и очень мне это всё надоело — в час по чайной ложке 🙁
Проанализировал структуру таблиц и вот решение по чистке корзин на утро сегодняшнего дня (всё что ДО — долой)

-- чистим b_sale_fuser по дате
DELETE b_sale_fuser WHERE DATE_INSERT < '2016-01-28 00:00:00' -- Запоминаем максимальный ID (пригодится ниже для удаления b_sale_basket_props ) в моём случае результат 720251 все айдишники ниже были созданы раньше - убить их SELECT max(ID) FROM b_sale_basket WHERE DATE_INSERT < '2016-01-28 00:00:00' -- Чистим саму b_sale_basket DELETE b_sale_basket WHERE DATE_INSERT < '2016-01-28 00:00:00' -- Чистим b_sale_basket_props с помощью найденного выше ID DELETE b_sale_basket_props WHERE BASKET_ID` <= 720251

P.S.S.
В итоге поставил удаление Инспектором, торопиться не будем 🙂
И настроил запуск агента CSaleUser::DeleteOldAgent(30, 0); 10800 сек (раз в 3 часа)
Ещё контролируем Сохранять корзину (дней) - она тут Настройки > Настройки продукта > Настройки модулей > Интернет-магазин

Оставить комментарий