Продолжаю, как и обещал, выкладывать примеры, которые являются прямой причиной лишней нагрузки на таблицу b_sale_fuser
Фишка №3 в моем списке последняя, так как используется далеко не на всех проектах, но неправильно выполненная становится таким же хороим источником нагрузки на b_sale_fuser на активных проектах, как и малая корзина.
Итак, речь пойдет о...
[spoiler]
таком механизме, как показ информации о наличии того или иного товара в корзине пользователя.
Примеры (реальные):
Надпись в карточке - этот товар уже в корзине или показ, что этого товара в корзине столько-то
Списки товаров в виде прайсов с отобрадением в строках, сколько тех или иных товаров находится в корзине
Скажем так. Правильно выполненный функционал предполагает получение информации об этом еще в момент вызова малой корзины, т.е. лишь однократно на сайте.
Далее ничто не мешает передать глобальный массив информации о товарах, которые хранятся в корзине далее по сайту.
Но...
Почему то встречается, что разработчики получают данную информацию непосредственно в компонентах списков или детальных карточек товаров. Коллеги, если у вас так, поправьте.
Ну а само переполнение как раз возникает из-за того, что лишний раз мы дергаем метод без спецпараметра, запрещающего создание корзины, если она не существует
Будьте внимательны!
Итак:
Подведем итоги всем постам, которые описываю три реальных боевых причины переполнения таблицы b_sale_fuser
Вкратце: Это происходит на проектах, где чистка корзин не успевает за их созданием (как правило, такое возможно на проектах, активно посещаемых пользователями или ботами).
Что надо сделать в качестве профилактики для исключения переполнения или появления на проектах хлама и мусора в корзинах.
1. Постараться исключить вызов получения ID пользователя корзины, если наличие корзины не требуется
2. Провести ревизию ссылок и форм, результат воздействия ботов на которые может приводить к автоматическим покупкам или формированию корзин.
3. Периодически проверять составы корзин, например таким запросом
Что он дает:
1. нули в колонке CNT означают, что у вас присутствуют корзины, в которых ничего нет, но они закреплены за пользователем.
В идеале: корзина нужна тогда, когда туда надо что то положить, какой смысл ее создавать заранее?
2. Слишком большие количества товаров в корзинах - и наличие большого количества таких корзин требуют дополнительной проверки.
По опыту встречал, что есть как магазины в которых редко остаются брошенные корзины, либо корзины с горками наполненные ботами, так встречаются и магазины, в которых постоянные пользователи хранят товары на протяжении длительных периодов. Например: отложенные товары.
P.S. Конечно, все что я писал в постах (скоро постараюсь свести все в кучку и классифицировать ссылками) потребуется, если ваш проект достаточно активен, чтобы "уборщик" Битрикс не справлялся.
Но, борясь за чистоту мы должны понимать, что победа - это не армия уборщиков, а прежде всего стремление не гадить.
И решения в виде усиления эффективности и частоты использования уборщика это борьба с последствиями, а не устранение причин.
Фишка №3 в моем списке последняя, так как используется далеко не на всех проектах, но неправильно выполненная становится таким же хороим источником нагрузки на b_sale_fuser на активных проектах, как и малая корзина.
Итак, речь пойдет о...
[spoiler]
таком механизме, как показ информации о наличии того или иного товара в корзине пользователя.
Примеры (реальные):
Надпись в карточке - этот товар уже в корзине или показ, что этого товара в корзине столько-то
Списки товаров в виде прайсов с отобрадением в строках, сколько тех или иных товаров находится в корзине
Скажем так. Правильно выполненный функционал предполагает получение информации об этом еще в момент вызова малой корзины, т.е. лишь однократно на сайте.
Далее ничто не мешает передать глобальный массив информации о товарах, которые хранятся в корзине далее по сайту.
Но...
Почему то встречается, что разработчики получают данную информацию непосредственно в компонентах списков или детальных карточек товаров. Коллеги, если у вас так, поправьте.
Ну а само переполнение как раз возникает из-за того, что лишний раз мы дергаем метод без спецпараметра, запрещающего создание корзины, если она не существует
Будьте внимательны!
Итак:
Подведем итоги всем постам, которые описываю три реальных боевых причины переполнения таблицы b_sale_fuser
Вкратце: Это происходит на проектах, где чистка корзин не успевает за их созданием (как правило, такое возможно на проектах, активно посещаемых пользователями или ботами).
Что надо сделать в качестве профилактики для исключения переполнения или появления на проектах хлама и мусора в корзинах.
1. Постараться исключить вызов получения ID пользователя корзины, если наличие корзины не требуется
2. Провести ревизию ссылок и форм, результат воздействия ботов на которые может приводить к автоматическим покупкам или формированию корзин.
3. Периодически проверять составы корзин, например таким запросом
sel ect A.ID, COUNT(C.ID) as CNT fr om b_sale_fuser A left join b_sale_basket C ON (C.FUSER_ID = A.ID) GROUP BY A.ID ORDER BY CNT DESC |
1. нули в колонке CNT означают, что у вас присутствуют корзины, в которых ничего нет, но они закреплены за пользователем.
В идеале: корзина нужна тогда, когда туда надо что то положить, какой смысл ее создавать заранее?
2. Слишком большие количества товаров в корзинах - и наличие большого количества таких корзин требуют дополнительной проверки.
По опыту встречал, что есть как магазины в которых редко остаются брошенные корзины, либо корзины с горками наполненные ботами, так встречаются и магазины, в которых постоянные пользователи хранят товары на протяжении длительных периодов. Например: отложенные товары.
P.S. Конечно, все что я писал в постах (скоро постараюсь свести все в кучку и классифицировать ссылками) потребуется, если ваш проект достаточно активен, чтобы "уборщик" Битрикс не справлялся.
Но, борясь за чистоту мы должны понимать, что победа - это не армия уборщиков, а прежде всего стремление не гадить.
И решения в виде усиления эффективности и частоты использования уборщика это борьба с последствиями, а не устранение причин.