×
Content Management System и SEO – оптимизация
Opencart превышение нагрузки при подсчете товаров в категориях
26 фев 2017 13:45 - 26 фев 2017 13:46 #7359
от sphere_kev
sphere_kev создал тему: Opencart превышение нагрузки при подсчете товаров в категориях
Столкнулся с таким случаем, когда хостер отключил сайт за превышение нагрузки.
Имеется Opencart 1.5.5.1 и хостер сообщил, что сайт грузит сервер - при простом заходе на сайт сервер mysql грузится до 70% CPU.
Запросы вида:
Query | 0 | Sending data | SELECT COUNT(DISTINCT p.product_id) AS total FROM oc_product_to_category p2c LEFT JOIN oc_product p |
После простого отключения подсчета товаров в админке магазина - проблема вроде как ушла, но через неделю - история повторилась.
Опять запросы вида
Query | 0 | Sending data | SELECT COUNT(DISTINCT p.product_id) AS total FROM oc_category_path cp LEFT JOIN oc_product_to_catego
- начали грузить сервер.
При одиночном заходе - еще ничего, но при индексации сервера поисковыми роботами - нагрузка по словам хостера- выходила за грани допустимой.
Посему - пришлось помимо простого отключения индексации в админке - решать вопрос с правкой скриптов..
Выключил getTotalProducts в:
catalog/controller/common/header.php
catalog/controller/product/category.php
catalog/controller/module/category.php
- заменил строку $product_total = $product->getTotalProducts($data); на $product_total = 1;
Заметно быстрее стали грузиться страницы и со слов хостера - нет превышения нагрузки.
Проблема решена.
Имеется Opencart 1.5.5.1 и хостер сообщил, что сайт грузит сервер - при простом заходе на сайт сервер mysql грузится до 70% CPU.
Запросы вида:
Query | 0 | Sending data | SELECT COUNT(DISTINCT p.product_id) AS total FROM oc_product_to_category p2c LEFT JOIN oc_product p |
После простого отключения подсчета товаров в админке магазина - проблема вроде как ушла, но через неделю - история повторилась.
Опять запросы вида
Query | 0 | Sending data | SELECT COUNT(DISTINCT p.product_id) AS total FROM oc_category_path cp LEFT JOIN oc_product_to_catego
- начали грузить сервер.
При одиночном заходе - еще ничего, но при индексации сервера поисковыми роботами - нагрузка по словам хостера- выходила за грани допустимой.
Посему - пришлось помимо простого отключения индексации в админке - решать вопрос с правкой скриптов..
Выключил getTotalProducts в:
catalog/controller/common/header.php
catalog/controller/product/category.php
catalog/controller/module/category.php
- заменил строку $product_total = $product->getTotalProducts($data); на $product_total = 1;
Заметно быстрее стали грузиться страницы и со слов хостера - нет превышения нагрузки.
Проблема решена.
Последнее редактирование: 26 фев 2017 13:46 пользователем sphere_kev.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- sphere_kev
- Автор темы
- Не в сети
- COM_KUNENA_SAMPLEDATA_RANK_MODERATOR
- Небесный тихоход
Меньше
Больше
27 фев 2017 10:35 #7360
от sphere_kev
sphere_kev ответил в теме Opencart превышение нагрузки при подсчете товаров в категориях
Для того, чтобы было больше одной страницы в выводе категории товара - необходимо второй запрос на подсчет категорий либо оставить, либо задать в явном виде максимально возможное количество товара в файле
catalog/controller/product/category.php
ориентируемся по строчкам после запроса:
//здесь явно указываем количество - $product_total = 750; или оставляем строку ниже
$product_total = $this->model_catalog_product->getTotalProducts($data);
$results = $this->model_catalog_product->getProducts($data);
foreach ($results as $result) {
if ($result) {
$image = $this->model_tool_image->resize($result, $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
} else {
$image = false;
}
catalog/controller/product/category.php
ориентируемся по строчкам после запроса:
//здесь явно указываем количество - $product_total = 750; или оставляем строку ниже
$product_total = $this->model_catalog_product->getTotalProducts($data);
$results = $this->model_catalog_product->getProducts($data);
foreach ($results as $result) {
if ($result) {
$image = $this->model_tool_image->resize($result, $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
} else {
$image = false;
}
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- sphere_kev
- Автор темы
- Не в сети
- COM_KUNENA_SAMPLEDATA_RANK_MODERATOR
- Небесный тихоход
Время создания страницы: 0.335 секунд