Перейти к содержимому


Фото
- - - - -

Сортировка по цене вешает базу

сортировка нагрузка цена

  • Чтобы отвечать, сперва войдите на форум
5 ответов в теме

#1 Just074

Just074
  • Пользователь
  • 38 сообщений
  • Программирование, Верстка, Заказчик

Опубликовано 20.06.2017 - 20:31

Продолжаю борьбу за оптимизацию  :D

 

В общем, проблема следующая, в базе около 60,000 товаров (активных около 30,000), сортировка по умолчаинию и позиции работает отлично, без проблем, а вот сортировка по цене вешает базу тут же, если в категории много товаров - в моем случаи около 10,000 шт

 

Сам запрос выглядит следующим образом:

$order = '(SELECT -pv.price FROM __variants pv WHERE (pv.stock IS NULL OR pv.stock>0) AND p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM __variants WHERE (stock>0 OR stock IS NULL) AND product_id=p.id LIMIT 1) LIMIT 1) DESC';

Вопрос к знатокам, как оптимизировать этот запрос? 

Как еще можно решить эту проблему? Увеличение мощности сервера? Что-то еще? 

 

Читал здесь, что симпла успешно работает с большим объемом товаров и т.д., Она из коробки работает или все же требует оптимизацию для больших объемов данных? 

 

Параметры сервера 1 ГБ RAM 30 ГБ SSD 1 CPU


Изменено: Just074, 20.06.2017 - 20:31


#2 Maksclub

Maksclub

    Помогаю с Симплой и c PHP

  • Фрилансер
  • 1 388 сообщений
  • Дизайн, Программирование, Верстка, Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 20.06.2017 - 21:15

1Gb оперативки -- маловато как-то :) у меня 4 стоит для тестовых штук побаловаться :) всего 600-700 в месяц отдаю

 

> Читал здесь, что симпла успешно работает с большим объемом товаров и т.д., Она из коробки работает или все же требует оптимизацию для больших объемов данных? 

 

поверьте -- с Битриксом или другими ЦМС вообще легли бы, Симпла хороша, хотя при больших базах/нагрузках коробочное решение как правило нужно пилить... вообще БД -- первое, что сыпется от нагрузки/количества на всех проектах 

https://ruhighload.c...рузками в MySQL

 

 

я вообще ноль по оптимизации запросов, потому по самому запросу не подскажу,

но нужно кешировать... особенно сортировку  

http://forum.simplac...mysql-запросов/

 

memcahe подключили? он хранит уже результат запросов, то есть мускул не будет напрягаться

https://habrahabr.ru/post/61736/

кстати -- для мемкеша нужна оперативка, он в ней держит кеш, так что по0любому величить нужно

 

кеширвоание на самом Мускуле?

https://habrahabr.ru/post/41166/


Изменено: Maksclub, 21.06.2017 - 06:55


#3 ЯкЦинДрак

ЯкЦинДрак
  • Пользователь
  • 88 сообщений
  • Программирование
  • Откуда:Russia

Опубликовано 21.06.2017 - 09:40

Продолжаю борьбу за оптимизацию  :D

 

В общем, проблема следующая, в базе около 60,000 товаров (активных около 30,000), сортировка по умолчаинию и позиции работает отлично, без проблем, а вот сортировка по цене вешает базу тут же, если в категории много товаров - в моем случаи около 10,000 шт

 

Сам запрос выглядит следующим образом:

$order = '(SELECT -pv.price FROM __variants pv WHERE (pv.stock IS NULL OR pv.stock>0) AND p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM __variants WHERE (stock>0 OR stock IS NULL) AND product_id=p.id LIMIT 1) LIMIT 1) DESC';

Вопрос к знатокам, как оптимизировать этот запрос? 

Как еще можно решить эту проблему? Увеличение мощности сервера? Что-то еще? 

 

Читал здесь, что симпла успешно работает с большим объемом товаров и т.д., Она из коробки работает или все же требует оптимизацию для больших объемов данных? 

 

Параметры сервера 1 ГБ RAM 30 ГБ SSD 1 CPU

 

Во-первых, указанным образом выглядит не запрос, а лишь его фрагмент, связанный с сортировкой.

Во-вторых, желательно показать запрос ПОЛНОСТЬЮ, и знать бы, сколько записей он возвращает. Скорее всего, дело в их количестве.

А оптимизировать - например, изменением структуры базы, чтобы фрагмент сортировки был проще. Сейчас он просто жуткий - с подзапросом второго уровня

 

Пробуйте простой (и не совсем правильный) способ, заменить тот фрагмент на

$order = '(SELECT -pv.price FROM __variants pv WHERE (pv.stock IS NULL OR pv.stock>0) AND p.id = pv.product_id LIMIT 1) DESC';

Должно сократить время работы. Если не даст удовлетворительного результата, то применять более тонкие методы.

 

Предлагавшееся выше кеширование вряд ли поможет. Потому что разных запросов таких - миллиарды, никакой хостинг кеширование таких объемов не выдержит (есть запросы по фильтру, и есть еще поиск). Большинство кеша будет просто занимать место без пользы. А каждый новый запрос (с новой поисковой фразой, например) будет вешать базу...



#4 Just074

Just074
  • Пользователь
  • 38 сообщений
  • Программирование, Верстка, Заказчик

Опубликовано 21.06.2017 - 17:01

Коллеги, доброго дня, спасибо за комментарии, выявил для себя много полезного! Начну сразу с результатов: проблему удалось нейтрализовать! Решение оказалось не таким уж и сложным, чуть чуть настроил MySQL, включил штатное кеширование (query_cache_type=1, query_cache_size=128M), оптимзировал таблицы и все! И сервер тоже апгрейдил, теперь конфигурация 2 ГБ RAM 40 ГБ SSD 2 CPU

 

 

В базе 60,000 товаров, в самой большой категории ~10,000 товаров, сортировка летает, даже намека на лаги нет.


Изменено: Just074, 21.06.2017 - 17:01


#5 Maksclub

Maksclub

    Помогаю с Симплой и c PHP

  • Фрилансер
  • 1 388 сообщений
  • Дизайн, Программирование, Верстка, Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 21.06.2017 - 18:24

В базе 60,000 товаров, в самой большой категории ~10,000 товаров, сортировка летает, даже намека на лаги нет.

 

Ну и отлично :)

 

Но проблема может вылезти, например при росте посещений


Изменено: Maksclub, 21.06.2017 - 18:27


#6 Just074

Just074
  • Пользователь
  • 38 сообщений
  • Программирование, Верстка, Заказчик

Опубликовано 21.06.2017 - 18:29

Ну и отлично :) Еще пересесть на nginx и php7 и вообще круть... хотя не факт, но скорее всего еще и бекенд быстрее будет работать

 

Nginx стоит, отдает статику, php7 не хочу ставить пока, хотя и заметно шустрее чем нынешний 5.4, но мне кажется многое придется переписывать, поэтому не готов пока))







Также с меткой «сортировка, нагрузка, цена»

0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых