a-lex
14.05.2019 12:41
0
Столкнулся с тем что поставил на пакет "Лучший SSD" opencart c кастомной темой. Испытывал большие проблемы с перегрузом -> нашел косяки в теме -> оптимизировал тему.. но ошибки превышения запросов(процессорного времени остались). Переключился на стандартную тему opencart 3x и то же сайт падает и потребляет достаточно ресурсов.

Кто-то сталкивался с таким?

Ошибка:

Warning: mysqli::__construct(): (HY000/1226): User DB_name'' has exceeded the 'max_user_connections' resource (current value: 45) in
../system/library/db/mysqli.php on line 7Warning: DB\MySQLi::__construct(): Couldn't fetch mysqli in
../system/library/db/mysqli.php on line 10Warning: DB\MySQLi::__construct(): Couldn't fetch mysqli in
../system/library/db/mysqli.php on line 10

Смотрел по форума на всякий случай сменил SQL движок MyISAM (Default) на InnoDB но по дефолту на этом пакете MyISAM.

Просто первый раз сталкиваюсь с такой проблемой....
Roman P.
14.05.2019 15:57
0
Судя по ошибке, Сайт устанавливает слишком много подключений к БД и тем самым упирается в лимит. Возможно в магазине слишком много позиций либо используются тяжелые плагины
a-lex
14.05.2019 16:37
0
Из плагинов экспорт/импорт и доп. описание категорий) Товаров 2300 шт. Я вот почитал что там сам опенкарт 3й требователен к бд. По коду смотрю там запросы в цикле выводит.
rudenko
14.05.2019 16:42
0
Из плагинов экспорт/импорт и доп. описание категорий) Товаров 2300 шт. Я вот почитал что там сам опенкарт 3й требователен к бд. По коду смотрю там запросы в цикле выводит.© a-lex

Судя по ошибке - у вас 45 одновременных соединений с БД, это количество соответсвует огромному проекту, с десятками тысяч посетителей. Или же лажа с каким-то запросом, который слишком долго выполняется. Выполняйте команду
SHOWFULL processlist
и смотрите какие запросы висят.
a-lex
15.05.2019 17:24
0
Посмотрел:

Вот такие вот запросы умирают


SELECT
p.product_id,
(SELECT AVG(rating)AS total FROM oc_review r1 WHERE r1.product_id = p.product_id AND r1.status ='1'GROUPBY r1.product_id)AS rating,
(SELECT price FROM oc_product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id ='1'AND pd2.quantity ='1'AND((pd2.date_start ='0000-00-00'OR pd2.date_start < NOW())AND(pd2.date_end ='0000-00-00'OR pd2.date_end > NOW()))ORDERBY pd2.priority ASC, pd2.price ASCLIMIT1)AS discount,
(SELECT price FROM oc_product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id ='1'AND((ps.date_start ='0000-00-00'OR ps.date_start < NOW())AND(ps.date_end ='0000-00-00'OR ps.date_end > NOW()))ORDERBY ps.priority ASC, ps.price ASCLIMIT1)AS special
FROM oc_category_path cp
LEFTJOIN oc_product_to_category p2c ON(cp.category_id = p2c.category_id)
LEFTJOIN oc_product p ON(p2c.product_id = p.product_id)
LEFTJOIN oc_product_description pd ON(p.product_id = pd.product_id)
LEFTJOIN oc_product_to_store p2s ON(p.product_id = p2s.product_id)
WHERE
pd.language_id ='2'AND
p.status ='1'AND
p.date_available <= NOW()AND
p2s.store_id ='0'AND
cp.path_id ='129'
GROUPBY p.product_id
ORDERBY p.date_added DESC, LCASE(pd.name)DESC
LIMIT0,20
SELECTCOUNT(DISTINCT p.product_id)AS total
FROM oc_category_path cp
LEFTJOIN oc_product_to_category p2c ON(cp.category_id = p2c.category_id)
LEFTJOIN oc_product p ON(p2c.product_id = p.product_id)
LEFTJOIN oc_product_description pd ON(p.product_id = pd.product_id)
LEFTJOIN oc_product_to_store p2s ON(p.product_id = p2s.product_id)
WHERE pd.language_id ='2'AND p.status ='1'AND p.date_available <= NOW()AND p2s.store_id ='0'AND cp.path_id ='157
rudenko
17.05.2019 17:15
0
Вот такие вот запросы умирают© a-lex


Запросы кривые. Выполните эти два запроса с приставкой EXPLAIN и бросьте скриншоты, может где индекса нехватает.
a-lex
20.05.2019 14:16
0
SELECT COUNT(DISTINCT p.product_id) AS total
FROM oc_category_path cp
LEFT JOIN oc_product_to_category p2c ON (cp.category_id = p2c.category_id)
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 = '2' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' AND cp.path_id = '157

этот запрос победил
a-lex
20.05.2019 14:23
0
cdn.adm.tools/forum_message/0497/07/l2ZKa1pize6eDA.jpg - а вот что по второму
a-lex
20.05.2019 15:20
0
SELECTDISTINCT*, pd.name AS name, p.image, m.name AS manufacturer,(SELECT price FROM" . DB_PREFIX . "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id ='" . (int)$this->config->get('config_customer_group_id') . "'AND pd2.quantity ='1'AND((pd2.date_start ='0000-00-00'OR pd2.date_start < NOW())AND(pd2.date_end ='0000-00-00'OR pd2.date_end > NOW()))ORDERBY pd2.priority ASC, pd2.price ASCLIMIT1)AS discount,(SELECT price FROM" . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id ='" . (int)$this->config->get('config_customer_group_id') . "'AND((ps.date_start ='0000-00-00'OR ps.date_start < NOW())AND(ps.date_end ='0000-00-00'OR ps.date_end > NOW()))ORDERBY ps.priority ASC, ps.price ASCLIMIT1)AS special,(SELECT points FROM" . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND pr.customer_group_id ='" . (int)$this->config->get('config_customer_group_id') . "')AS reward,(SELECT ss.name FROM" . DB_PREFIX . "stock_status ss WHERE ss.stock_status_id = p.stock_status_id AND ss.language_id ='" . (int)$this->config->get('config_language_id') . "')AS stock_status,(SELECT wcd.unit FROM" . DB_PREFIX . "weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id ='" . (int)$this->config->get('config_language_id') . "')AS weight_class,(SELECT lcd.unit FROM" . DB_PREFIX . "length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id ='" . (int)$this->config->get('config_language_id') . "')AS length_class,(SELECT AVG(rating)AS total FROM" . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status ='1'GROUPBY r1.product_id)AS rating,(SELECTCOUNT(*)AS total FROM" . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status ='1'GROUPBY r2.product_id)AS reviews, p.sort_order FROM" . DB_PREFIX . "product p LEFTJOIN" . DB_PREFIX . "product_description pd ON(p.product_id = pd.product_id)LEFTJOIN" . DB_PREFIX . "product_to_store p2s ON(p.product_id = p2s.product_id)LEFTJOIN" . DB_PREFIX . "manufacturer m ON(p.manufacturer_id = m.manufacturer_id)WHERE p.product_id ='" . (int)$product_id . "'AND pd.language_id ='" . (int)$this->config->get('config_language_id') . "'AND p.status ='1'AND p.date_available <= NOW()AND p2s.store_id ='" . (int)$this->config->get('config_store_id')

Есть вот ещё такой монструозный запрос получения продукта....
milanov.store
22.06.2021 01:38
0
"SELECT COUNT(DISTINCT p.product_id) AS total
FROM oc_category_path cp
LEFT JOIN oc_product_to_category p2c ON (cp.category_id = p2c.category_id)
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 = '2' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' AND cp.path_id = '157

этот запрос победил"

Как победили?
Тема закрита.