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

Как ускорить загрузку заказа с большим количеством товаров


Recommended Posts

Добрый день. Если в заказе больше количество товаров, то скорость загрузки страницы с заказом занимает до 15 секунд. 
Товары группируются по категориям для удобства менеджеров. 

Используется VPS.
Диск 120 ГБ SSD
Объем RAM 8 ГБ
Ядра процессора 8 x 2 ГГц
Может у кого есть идеи, как ускорить его работу?
Скриншот с затертыми данными, чтобы не посчитали рекламой и файл с медленными запросами по одному заказу прикрепил.

Настройка my.cnf
 

[mysqld]
slow_query_log = 1
long_query_time = 5
slow_query_log_file = /var/log/mysql/mysql-slow.log
log-warnings=2
log-queries-not-using-indexes = 1
thread_cache_size=4                                                                                                 
query_cache_size=0
query_cache_type=0
query_cache_limit=1M
tmp_table_size=256M
max_heap_table_size=256M
character_set_server=utf8
collation-server=utf8_bin
init_connect="SET NAMES utf8 collate utf8_bin"
key_buffer=500M
join_buffer_size=256k

638fedefe0.png

mysql-slow (4).log

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


А индексы используете на FK поля?
Например:

  • в таблице "oc_order_product" на поле "order_id"
  • или в таблице "oc_order_option" на поля "order_id" и "order_product_id"

Потому что лог показывает что слишком много было строк обработано что показывает что скорее всего индексы либо отсутвуют либо не не используется базой данных:

Rows_sent: 123  Rows_examined: 479479

 

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

34 минуты назад, kagan сказал:

А индексы используете на FK поля?
Например:

  • в таблице "oc_order_product" на поле "order_id"
  • или в таблице "oc_order_option" на поля "order_id" и "order_product_id"

Потому что лог показывает что слишком много было строк обработано что показывает что скорее всего индексы либо отсутвуют либо не не используется базой данных:


Rows_sent: 123  Rows_examined: 479479

 

 

Использовал компанду

SHOW INDEX FROM oc_order_product

Выдало:
c438ea5a25.thumb.png.3609c11ecaf6dd6f04dfbc9eeb17a3af.png

 

SHOW INDEX FROM oc_order_option

32ce629cbb.thumb.png.08e1e0e98bfaa6279d6ea6fb468e8708.png

И результат собственно

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


On 7/22/2020 at 3:10 PM, serg91100 said:

Вопрос решен. Благодарю.

Я думаю что тип индекса должен быть не BTREE, а HASHMAP т.к. скорость поиска данных будет происходить гораздо быстрее (если быть точнее, в константное время O(1) вместо O(logN)).

Если не сложно, опишите пожалуйста как решили т.к. возможно другим людям будет полезно

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

Этого всего мало - потому как если посмотреть в лог запросов на странице, то можно удивиться и увидеть, что cart->getProducts инцииализируется не один раз, а на странице оформления бывает и по 4!


Индексы помогают до определенного количества, а после 100-150 позиций без оптимизации самого класса cart не обойтись!

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


15 часов назад, kagan сказал:

Я думаю что тип индекса должен быть не BTREE, а HASHMAP т.к. скорость поиска данных будет происходить гораздо быстрее (если быть точнее, в константное время O(1) вместо O(logN)).

Если не сложно, опишите пожалуйста как решили т.к. возможно другим людям будет полезно

Дамп был с ошибками. Восстановил старую базу. Все летает. 

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


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

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

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

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

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

Вхід

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

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

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

Important Information

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