Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

ocStore тормозит при выключенном подсчете товаров


markimax

Recommended Posts

Тормоза пропали, дофига категорий ~ 5000 товаров. Генерация главной (с включенной стенкой категорий)

Total time 0.8332 seconds

Это время - не показатель. Где время выполнения запросов?
Надіслати
Поділитися на інших сайтах

В показанном запросе, я не увидел явной оптимизации

 

Ну да

p.date_available <= '" . $this->NOW

операция не быстрая -  так как происходит сравнение строк

 

Затем...

$this->NOW = date('Y-m-d H:i') . ':00';

date_available  имеет тип DATE , а это - YYYY-MM-DD - зачем еще 00?

 

Разговор шел об одноязычногм, одномагазине

Тогда почему оставлена конструкция с

LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id)

 

 

 

 

(int)$this->config->get('config_language_id')
p2s.store_id = '" . (int)$this->config->get('config_store_id')
 

 

 

Это нужно делать вне запроса, если речь идет о getProduct в цикле

Надіслати
Поділитися на інших сайтах

  • 2 weeks later...

На малом количестве посетителей это не существенно

Кстати, везде, где используется таблица DB_PREFIX . "product_to_store " нужно использовать INNER JOIN

а чем INNER лучше-то?

В показанном запросе, я не увидел явной оптимизации

 

Ну да

p.date_available <= '" . $this->NOW

операция не быстрая -  так как происходит сравнение строк

сравнение дат, не строк

Надіслати
Поділитися на інших сайтах

  • 2 weeks later...

тогда можно выбирать товары (page-1)*limit, limit+1,

- если кол-во больше limit, показывать ссылку на следующую

- если page>1 ссылку на предыдущую

- если кол-во товаров=0 и page>0, вероятно пользователь самостоятельно указал страницу, редиректить на первую

+ совместить с ajax прокруткой, может очень даже не плохо получиться в итоге
Надіслати
Поділитися на інших сайтах

+ совместить с ajax прокруткой, может очень даже не плохо получиться в итоге

Надо модуль сделать ;)

А еще лучше в ocStore

Надіслати
Поділитися на інших сайтах

  • 8 months later...

... ocStore тормозит при выключенном подсчете товаров, ...

Подниму тему снова.

Я вижу, уважаемые разработчики так и не приняли конкретного решения. Хорошо, оставим в покое запрос количества товаров при открытии страницы категории: пагинация, все дела...

Но почему у меня происходит вызов getTotalProducts при открытии каждой карточки товара?

150 категорий, 18 тысяч товаров, наблюдаю множество (порядка 60) запросов вида

SELECT COUNT(DISTINCT p.product_id) AS total FROM category_path cp LEFT JOIN product_to_category p2c ON (cp.category_id = p2c.category_id) LEFT JOIN product p ON (p2c.product_id = p.product_id) LEFT JOIN product_description pd ON (p.product_id = pd.product_id) INNER JOIN product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= '2014-11-25 21:50:00' AND p2s.store_id = '0' AND cp.path_id = '202';

каждый раз при загрузке каждой карточки товара, совершенно никакого кэширования. На тестовом сервере загрузка занимает аж целых секунд пять. И да, именно при выключенном подсчёте товаров.

 

ocStore 1.5.5.1.2, чистая установка, внимательно собранная под системой контроля версий, с излюбленными модулями (Симпла, ФильтрПро и ещё пара), от шаблона не зависит, такое поведение и с шаблоном по умолчанию. Один магазин, один язык, одна валюта.

Магазин посмотреть пока нельзя, он на локальном тестовом сервере.

Nginx + php-fpm (PHP5.5).

 

И заодно, не подскажете ли инструмент для отладки PHP кода? Пока копаю в сторону xhprof.

Надіслати
Поділитися на інших сайтах


Прошу прощения, недоглядел.

Один из VQMod'ов изменял у меня catalog/controller/common/header.php и добавлял туда вызов model_catalog_product->getTotalProducts().

 

Тем не менее, вопрос по поводу инструмента для отладки PHP кода всё ещё актуален.

Надіслати
Поділитися на інших сайтах


  • 2 years later...

Прошло 3 года)) 

залил на сайт 8000 товаров в 1 категорию) видно на примере что умирает все)) 

https://greenagri.ru/tovary-dlya-sada-i-ogoroda/paketirovannye-semena/semena-v-paketikah-optom-min-10-sht/

понятно что, не кто не будет кликать, но все же. 

Стоит кешер, но он кеширует только одну страницу, если кликнуть предположим на страницу другую где нет кеширования, все умирает.

Как я понял выход только делать категории, чтобы не было так много товаров. 

 

Снимок.JPG

Змінено користувачем rassigor
Надіслати
Поділитися на інших сайтах


Только что, rassigor сказал:

Прошло 3 года)) 

залил на сайт 8000 товаров в 1 категорию) видно на примере что умирает все)) 

для начала отключите кеширование, отключите фильтр и проверьте

далее уже можно лог медленных запросов глянуть

Надіслати
Поділитися на інших сайтах

6 минут назад, Otvet сказал:

для начала отключите кеширование, отключите фильтр и проверьте

далее уже можно лог медленных запросов глянуть

https://greenagri.ru/tovary-dlya-sada-i-ogoroda/paketirovannye-semena/semena-v-paketikah-optom-min-10-sht/

отключил и фильтр и кешер, скорость такая же

Надіслати
Поділитися на інших сайтах


Лог запросов заработал, автору спасибо)) вот примеры 

 

Время выполнения: 1091.66мс 

SELECT COUNT(DISTINCT p.product_id) AS total FROM oc_product_to_category p2c LEFT JOIN oc_product p ON (p2c.product_id = p.product_id) LEFT JOIN oc_product_description pd ON (p.product_id = pd.product_id) LEFT JOIN oc_product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' AND p2c.category_id = '556'
 

 

Время выполнения: 1000.69мс 

SELECT a.attribute_id, ad.name, ad.tooltip,
             pa.text FROM oc_product_attribute pa LEFT JOIN oc_attribute a ON (pa.attribute_id = a.attribute_id) LEFT JOIN oc_attribute_description ad ON (a.attribute_id = ad.attribute_id) WHERE pa.product_id = '7576' AND a.attribute_group_id = '9' AND ad.language_id = '1' AND pa.language_id = '1' AND a.sort_order != '666' ORDER BY a.sort_order, ad.name LIMIT 1000

----------------------

Надіслати
Поділитися на інших сайтах


30 минут назад, Otvet сказал:

первое да подсчет

 

второе на странице каталога?

 

 

такс, подозреваю что хостинг бегет

Хостинг вот такой.

 

Да, это каталог, в котором 8000 элементов)

  • Тарифный план : VDS-KVM-SSD-Отрыв
  • Параметры : 3 ядра процессора, 3 Гб оперативной памяти, 60 Гб диска, 1 IP-адрес
Надіслати
Поділитися на інших сайтах


1 час назад, rassigor сказал:

Хостинг вот такой.

 

Да, это каталог, в котором 8000 элементов)

  • Тарифный план : VDS-KVM-SSD-Отрыв
  • Параметры : 3 ядра процессора, 3 Гб оперативной памяти, 60 Гб диска, 1 IP-адрес


У вас большая проблема с индексами в базе и проблема с настройками mysql на сервере!

Надіслати
Поділитися на інших сайтах

7 часов назад, snastik сказал:


У вас большая проблема с индексами в базе и проблема с настройками mysql на сервере!

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

Надіслати
Поділитися на інших сайтах


35 минут назад, Otvet сказал:

где рекомендуют и кому?

 

вот конфиг Mysql , он стоит в режиме myISAM 

 

[mysqld]
collation-server = utf8_general_ci
character-set-server = utf8
local-infile=0
innodb_file_per_table = 1
pid-file = /var/run/mysqld/mysqld.pid
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
bind-address = 127.0.0.1
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

tmp_table_size = 128M
max_heap_table_size = 128M
innodb_buffer_pool_size = 512M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
query_cache_type = 1
query_cache_size=128M
query_cache_limit=128M
key_buffer_size=256M
sort_buffer_size=2M
join_buffer_size=2M
thread_cache_size = 4
table_open_cache = 2048
max_allowed_packet = 128M
transaction-isolation = READ-COMMITTED
sql_mode = ""
tmp_table_size = 256M
max_heap_table_size = 256M
#sql_big_selects = 1 

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
 

Змінено користувачем rassigor
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.