Проблема у довгому реагуванні сайту на відклик.
Наше попереднє рішення — підключити кешування Redis для нашого сайту tehnoexpert.com.ua, та подивитись, чи це допоможе для швидкого відкривання сторінок, категорій та підкатегорій. Якщо ця дія не допоможе, то потрібно буде встановити на сайт потрібний модуль по кешуванню, налаштувати його та перевірити, чи ця дія допоможе. Або третій варіант — адаптувати ядро сайту або теми сайту під швидке реагування сайту на відклик по посиланнях, товарах.
Приклад модулів для кешування, https://opencartadmin.com/jet-cache
https://www.opencart.com/index.php?route=marketplace/extension/info&extension_id=37650&filter_search=cache
Або аналоги
Опис проблеми від підтримки хостингу:
Відразу бачимо, що при перегляді товарів на сайті відбувається не оптимізовані запити в базу даних, пошук результатів яких займає довгий час, через що сторінка довго завантажується. Приклад таких запитів:
use tehnoexpert_main;
SET timestamp=1752305970;
SELECT m.manufacturer_id AS value_id, m.image, m.name AS name FROM oc_manufacturer m LEFT JOIN oc_manufacturer_to_store m2s ON (m.manufacturer_id = m2s.manufacturer_id) LEFT JOIN oc_product p ON (m.manufacturer_id = p.manufacturer_id) WHERE m2s.store_id = '0' GROUP BY m.manufacturer_id ORDER BY m.sort_order ASC, name ASC;
# Time: 250712 10:40:37
# User@Host: tehnoexpert_main[tehnoexpert_main] @ localhost []
# Thread_id: 67 Schema: tehnoexpert_main QC_hit: No
# Query_time: 16.217911 Lock_time: 0.000049 Rows_sent: 2203 Rows_examined: 8812
# Rows_affected: 0 Bytes_sent: 40604
SET timestamp=1752306037;
SELECT m.manufacturer_id AS value_id, m.image, m.name AS name FROM oc_manufacturer m LEFT JOIN oc_manufacturer_to_store m2s ON (m.manufacturer_id = m2s.manufacturer_id) LEFT JOIN oc_product p ON (m.manufacturer_id = p.manufacturer_id) WHERE m2s.store_id = '0' GROUP BY m.manufacturer_id ORDER BY m.sort_order ASC, name ASC;
# Time: 250712 10:41:08
# User@Host: tehnoexpert_main[tehnoexpert_main] @ localhost []
# Thread_id: 77 Schema: tehnoexpert_main QC_hit: No
# Query_time: 15.807077 Lock_time: 0.000070 Rows_sent: 2203 Rows_examined: 8812
# Rows_affected: 0 Bytes_sent: 40604
SET timestamp=1752306068;
SELECT m.manufacturer_id AS value_id, m.image, m.name AS name FROM oc_manufacturer m LEFT JOIN oc_manufacturer_to_store m2s ON (m.manufacturer_id = m2s.manufacturer_id) LEFT JOIN oc_product p ON (m.manufacturer_id = p.manufacturer_id) WHERE m2s.store_id = '0' GROUP BY m.manufacturer_id ORDER BY m.sort_order ASC, name ASC;
# Time: 250712 10:42:30
# User@Host: tehnoexpert_main[tehnoexpert_main] @ localhost []
# Thread_id: 109 Schema: tehnoexpert_main QC_hit: No
# Query_time: 14.659375 Lock_time: 0.000044 Rows_sent: 2203 Rows_examined: 8812
# Rows_affected: 0 Bytes_sent: 40604
SET timestamp=1752306150;
SELECT m.manufacturer_id AS value_id, m.image, m.name AS name FROM oc_manufacturer m LEFT JOIN oc_manufacturer_to_store m2s ON (m.manufacturer_id = m2s.manufacturer_id) LEFT JOIN oc_product p ON (m.manufacturer_id = p.manufacturer_id) WHERE m2s.store_id = '0' GROUP BY m.manufacturer_id ORDER BY m.sort_order ASC, name ASC;
# Time: 250712 10:43:12
# User@Host: tehnoexpert_main[tehnoexpert_main] @ localhost []
# Thread_id: 120 Schema: tehnoexpert_main QC_hit: No
# Query_time: 14.884237 Lock_time: 0.000151 Rows_sent: 2203 Rows_examined: 8812
# Rows_affected: 0 Bytes_sent: 40604
Видно, що один і той самий повільний SQL-запит виконується кожні кілька секунд, що створює навантаження на mariadb. Проблема однотипних запитів до бази даних — це комбінація поганого кешування + повторного завантаження одних і тих самих даних на кожному запиті.
Тобто однотипний SQL-запит до таблиць oc_manufacturer, oc_manufacturer_to_store, oc_product виконується при кожному завантаженні сторінки і витягує всі виробники, які прив’язані до магазину, разом із їх назвою та зображенням, і сортує їх по порядку/алфавіту.
Рішення вашої проблеми може бути у оптимізації таких запитів до бази даних, шляхом зміни структури SQL-запиту, що потребує більш детального ознайомлення з таблицями бази даних.
Або ж можна підключити кешування Redis для вашого сайту на Opencart, щоб однотипні дані кешувались в оперативну пам’ять і не надсилались кожного разу до mariadb.