costas Опубліковано: 9 березня 2013 Share Опубліковано: 9 березня 2013 Уважаемые, кто-нибудь делал выборку категорий одним запросом с сортировкой соответственно для потомков? Интересует три и более уровней вложенности, два уровня я реализовал, но что то дальше затык SELECT c1.category_id, CASE WHEN c0.c0_category_id = c1.category_id THEN 0 ELSE c0.c0_category_id END AS parent_id, c0.c0_sort_order, CASE WHEN c1.parent_id = 0 THEN 0 ELSE c1.sort_order END AS sort_order, cd.name FROM " . DB_PREFIX . "category AS c1 JOIN (SELECT category_id AS c0_category_id, sort_order AS c0_sort_order FROM " . DB_PREFIX . "category WHERE parent_id = 0) AS c0 ON c0.c0_category_id = c1.parent_id OR (c1.parent_id = 0 AND c0.c0_category_id = c1.category_id) LEFT JOIN " . DB_PREFIX . "category_description AS cd ON (c1.category_id = cd.category_id) LEFT JOIN " . DB_PREFIX . "category_to_store AS c2s ON (c1.category_id = c2s.category_id) WHERE cd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND c1.status = '1' ORDER BY c0_sort_order, sort_order; Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 9 березня 2013 Share Опубліковано: 9 березня 2013 А вы уреренны, что 3 вложенных запроса будут быстрее, чем запросы в цикле? Может быть лучше загрузить все категории, а потом средствами PHP построить дерево? Такой вариант рассматривается, там рекурсия, и не факт что эта рекурсия средствами php будет лучше чем запросами SQL. Надіслати Поділитися на інших сайтах More sharing options... rb2 Опубліковано: 9 березня 2013 Share Опубліковано: 9 березня 2013 Уважаемые, кто-нибудь делал выборку категорий одним запросом с сортировкой соответственно для потомков? Интересует три и более уровней вложенности, два уровня я реализовал, но что то дальше затык https://opencartforum.com/topic/3355-есть-ли-модуль-анализа-лог-файлов/page__p__22909#entry22909 Надіслати Поділитися на інших сайтах More sharing options... vitalis Опубліковано: 9 березня 2013 Share Опубліковано: 9 березня 2013 да вы картинки залейте и тестируйте что вы буковки тестите,тестируйте артилерию тогда увидите реальный загруз Надіслати Поділитися на інших сайтах More sharing options... Yoda Опубліковано: 9 березня 2013 Share Опубліковано: 9 березня 2013 да вы картинки залейте и тестируйте что вы буковки тестите,тестируйте артилерию тогда увидите реальный загруз Ламерское замечание... Так как картинки во первых все закешированы это раз, два, даже отдача сотни картинок по 10 кб на страницу, не так затратна как процесс формирования дерева категорий и подсчет количества товаров на каждую категорию 2 Надіслати Поділитися на інших сайтах More sharing options... vikingshop Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Надо убрать now() во всех запросах, тогда mysql закеширует... вот мой кусок в vqmod <modification> <id>My Patches 2</id> <version>0.0.2</version> <vqmver>1.0.8</vqmver> <author>Vlad</author> <file name="/catalog/model/catalog/product.php"> <operation> <search position="replace"><![CDATA[ $query = $this->db->query("SELECT DISTINCT *, 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)$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())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$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())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '" . (int)$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' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . 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') . "'"); ]]></search> <add><![CDATA[ $now1 = date("Y-m-d")." 23:59:59"; $now2 = date("Y-m-d")." 00:00:00"; $query = $this->db->query("SELECT DISTINCT *, 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)$customer_group_id . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < '$now1') AND (pd2.date_end = '0000-00-00' OR pd2.date_end > '$now2')) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$customer_group_id . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < '$now1') AND (ps.date_end = '0000-00-00' OR ps.date_end > '$now2')) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '" . (int)$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' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . 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 <= '$now1' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'"); ]]></add> </operation> </file> </modification> Ну и диски надо перемонтировать в noatime... - тоже уберет лишнию запись, после этого серваки очень часто оживают :) 1 Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Опять у меня никаких изменений :-) До, без кеша Memory Usage: 8.050377 MB Execution Time: 0.249878 seconds 109 sql queries executed: До, с кешем Memory Usage: 8.006096 MB Execution Time: 0.3022 seconds 68 sql queries executed: После, без кеша Memory Usage: 8.054298 MB Execution Time: 0.292623 seconds 109 sql queries executed: После, с кешем Memory Usage: 8.008942 MB Execution Time: 0.314817 seconds 68 sql queries executed: Надіслати Поділитися на інших сайтах More sharing options... Yoda Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 вот это кто то юзал ? To RGB (стандартные модули кешированные пробовали использовать ?) Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Надо убрать now() во всех запросах, тогда mysql закеширует... вот мой кусок в vqmod <modification> <id>My Patches 2</id> <version>0.0.2</version> <vqmver>1.0.8</vqmver> <author>Vlad</author> <file name="/catalog/model/catalog/product.php"> <operation> <search position="replace"><![CDATA[ $query = $this->db->query("SELECT DISTINCT *, 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)$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())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$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())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '" . (int)$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' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . 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') . "'"); ]]></search> <add><![CDATA[ $now1 = date("Y-m-d")." 23:59:59"; $now2 = date("Y-m-d")." 00:00:00"; $query = $this->db->query("SELECT DISTINCT *, 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)$customer_group_id . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < '$now1') AND (pd2.date_end = '0000-00-00' OR pd2.date_end > '$now2')) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$customer_group_id . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < '$now1') AND (ps.date_end = '0000-00-00' OR ps.date_end > '$now2')) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '" . (int)$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' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . 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 <= '$now1' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'"); ]]></add> </operation> </file> </modification> Ну и диски надо перемонтировать в noatime... - тоже уберет лишнию запись, после этого серваки очень часто оживают :) обновление товаров раз в сутки ?! а оно надо если склад ведётся по магазину? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 вот это кто то юзал ? поиск? не, не слышал: https://opencartforum.com/index.php?app=core&module=search&do=user_activity&search_app=downloads&mid=6073&userMode=all&sid=bad63a9ff80a0fde58c912c84c371af1 Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 To RGB (стандартные модули кешированные пробовали использовать ?) У меня из стандартных только блок категорий, но учитывая малое их количество, там даже отключение подсчета кол-ва не сильно сыграло роль Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 И если он поиск? не, не слышал: http://opencartforum...8c912c84c371af1 как написано в теме Начиная с версии ocStore 0.1.9 данный драйвер включен в состав основного кода то обсуждать нечего? :-) Надіслати Поділитися на інших сайтах More sharing options... Yoda Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Ля. напали... Лучше подробнее расскажите как в маженте генерация временных таблиц организована. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 извиняйте, если слишком грубо выглядит сообщение :-( очень смутило, что ссылка на opencart.com, а не наша внутренняя. обсуждать есть чего :-) Надіслати Поділитися на інших сайтах More sharing options... Yoda Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Да я тут полночи себе репу чешу, где б костылей еще навставлять... наткнулся, глянул мельком. а тут как раз тему развили... А по делу. Пока что по моим всем наблюдениям.. Попытки по мелочи где то ускорится за счет классических советом по оптимизации запросов.. до одного места. Кешер на респонсе спасает но отчасти. Во первых прегенерация все равно иногда должна происходить. Во вторых если без него страница генерится секунд 10 и начинается регистрация или корзины, покупатели могут сбежать. Глобальные затыки кроются в алгоритмах построения дерева категорий, подсчете кол-ва товаров и выборке самих товаров. И думается мне что надо попробовать сделать временные таблицы и переопределить методы. Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 http://opencartforum...2909#entry22909 Переделал под свои нужды + seo_pro кэшируемый - всё летает. Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Переделал под свои нужды + seo_pro кэшируемый - всё летает. А какая у вас версия ОС? Там в теме ниже freelancer писал про то, что этот алгоритм есть в 1.5.1.3, но я у себя в 1.5.2.1 как-то его не нашел, хотя вроде если он так хорош, почему его не внедрили в последующие версии? Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 А какая у вас версия ОС? Там в теме ниже freelancer писал про то, что этот алгоритм есть в 1.5.1.3, но я у себя в 1.5.2.1 как-то его не нашел, хотя вроде если он так хорош, почему его не внедрили в последующие версии? 1.5.4.1 естественно ocStore Выборка одним запросом дампа категорий и перестройка дерева рекурсией - не самое лучшее решение если дерево категорий сильно увесистое, у меня категорий около сотни так, что терпимо, + кэширование готового результата сильно выручает. Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 (змінено) да чего уж там. может сразу амазон, кластеры и пр. ? я к тому, что у рядового пользователя обычный lamp хостинг(и на котором впрочем есть куда оптимизировать) Змінено 12 березня 2013 користувачем freelancer Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Опять у меня никаких изменений :-) До, без кеша Memory Usage: 8.050377 MB Execution Time: 0.249878 seconds 109 sql queries executed: До, с кешем Memory Usage: 8.006096 MB Execution Time: 0.3022 seconds 68 sql queries executed: После, без кеша Memory Usage: 8.054298 MB Execution Time: 0.292623 seconds 109 sql queries executed: После, с кешем Memory Usage: 8.008942 MB Execution Time: 0.314817 seconds 68 sql queries executed: Измерял новым дебаггером, и о чудо! никаких пятен Разброс в результатах исчез, и цифры стали реальнее. До замены NOW() Cache off: 7.22501 s 7.95 mb logs (2) sql (114) files (95) request (95) Cache on: 3.48739 s 7.95 mb logs (2) sql (73) files (95) request (95) После замены NOW() Cache off: 6.98414 s 7.95 mb logs (2) sql (114) files (95) request (95) Cache on: 3.44409 s 7.95 mb logs (2) sql (73) files (95) request (95) С выключенным кешем выигрыш 0.3 сек очень даже неплохо, как мне кажется Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 К сожалению, дебаггер обрезает запросы, и я еще не понял как их полностью вывести, но если устроят начальные куски их (по идее из них видно, что это за запрос), то вот такая картина (холодный старт): SELECT p.product_id, (SELECT AVG(rating) AS total FROM review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id 0.19743750 s SELECT DISTINCT m.`manufacturer_id`, m.`name` FROM `manufacturer` m LEFT JOIN product p ON(p.manufacturer_id=m.`manufacturer_id`) LEFT JOIN product_to_category p2c ON(p.product_id=p2c.product_id) LEFT JOIN product_to_store p2s ON(p.product_id=p2s.product_id) WHERE p.status = '1' AND p.date_availa 0.10013175 s SELECT DISTINCT pa.text, a.`attribute_id`, ad.`name`, ag.attribute_group_id, agd.name as attribute_group_name FROM `product_attribute` pa LEFT JOIN attribute a ON(pa.attribute_id=a.`attribute_id`) LEFT JOIN attribute_description ad ON(a.attribute_id=ad.`attribute_id`) LEFT JOIN attribute_group ag 0.56159700 s SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT price FROM product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '8' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < '2013-03-12 23:59:59') AND (pd2.date_end = ' 0.01184400 s Последний запрос повторяется столько раз, сколько товаров выводится (у меня 12), и каждый раз так же медленно выполняется. Страница категории, 12 товаров на страницу, из модулей только список категорий в шапке и сбоку (всего пара десятков, без подсчета), ну и фильтрпро с фильтрацией по цене, производителю и одной единственной группе атрибутов (тип товара). Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 (змінено) 1. Последний запрос можно выполнить 1 раз. Если сначала собрать массив product_id, а потом сделать WHERE product_id IN (...) 2. По атрибутам тяжеленький запрос получился. А где он вызывается? В модуле фильтра? 1. Наверное да, но тогда ведь теряется совместимость с версиями (хотя мне уже не страшно :-)) 2. Да, это функция getAttributesByCategoryId так резвится Скорее всего из-за кол-ва товаров в категории (4К), потому что самих уникальных атрибутов там 10 шт во всего 1-й группе. P.S. Скоро попробую изменения с вашей статьи снова прикрутить к движку, и перемерять результаты, а то старый дебаггер оказывается врал, а вот новый вроде ничего P.P.S. Подумал, что о совместимости в теме про оптимизацию вообще нет смысла говорить - либо оптимизируем, либо радуемся новым обновлениям НЕоптимизированного медленного движка :-) Змінено 12 березня 2013 користувачем RGB Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 RGB, запустите db_log на холодную, походите по тормозным местам и скиньте мне дам если будет время. либо саму базу(без заказов, пользователей и прочих секретных данных) я сейчас как раз занят такими проблемами Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 Для ускорения производительности прибегают в основном к кэшированию. Действенный способ, спору нет. Но давайте обсудим те моменты, которые НЕ стоит кэшировать: 1. Не стоит кэшировать весь контент страницы, так как nginx уже кэширует; 2. Не стоит кэшировать SQL-запросы, так как MySQL уже кэширует; 3. Разумно используйте файловый кэш OpenCart, так как при очень большом кол-ве файлов в папке system/cache/ будет тормозить из-за особенностей файловой системы; 1. nginx не везде, более того он вообще встречается в малых количествах на шаред хостингах, если не шаред хостинг и есть возможность рулить ПО на нём, то вообще к чему вопрос про кэшировние если всё лечится путём вливания денег в железо, смены СУБД/ПО, кластеризации и тд. 2. Если у Вас нет возможности рулить настройками MySQL (query_cache_size, query_cache_limit и тд) вкупе с достаточно имеющимся кол-вом физ. RAM, то толку от кэширования MySQL будет не много. 3. Здесь важно знать этот самый размер, "при очень большом кол-ве файлов" - сколько именно, какая ФС, какое железо, какой RAID? Надіслати Поділитися на інших сайтах More sharing options... vikingshop Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 обновление товаров раз в сутки ?! а оно надо если склад ведётся по магазину? Если будет обновление кол-ва товара - то запрос выпадет из кеша как бэ :) Просто так mysql вообще этот кусок у вас не будет кешировать... Кто на VDSах/виртуалах отпишите в ТП пусть на серваках в noatime перемаунтят диски где mysql (на время хотябы) и посмотрите на время исполнения :) Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 Вперед Сторінка 3 з 6 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Схожі публікації Дублируються запросы в базу данных. Автор: mario512, 6 вересня 2022 mysql opencart (і ще %d) Теги: mysql opencart птн пнх 4 відповіді 753 перегляди mario512 6 вересня 2022 работа с базой данных Автор: AlexMax13, 1 серпня 2022 база данных mysql 8 відповідей 1 218 переглядів diterknobloch 27 лютого 2023 Модуль SQL менеджер SQL Buddy [Поддержка] 1 2 Автор: sv2109, 26 липня 2013 mysql 32 відповіді 7 030 переглядів PetrSemenov 29 жовтня 2017 Кто какой программой пользуется для SQL Автор: multitask85, 10 лютого 2022 mysql 20 відповідей 1 538 переглядів clarionio 22 березня 2022 кириллица в б/д Автор: satt, 8 лютого 2022 mysql utf-8 0 відповідей 479 переглядів satt 8 лютого 2022 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Оптимизация движка под 120 000 товаров Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
costas Опубліковано: 9 березня 2013 Share Опубліковано: 9 березня 2013 А вы уреренны, что 3 вложенных запроса будут быстрее, чем запросы в цикле? Может быть лучше загрузить все категории, а потом средствами PHP построить дерево? Такой вариант рассматривается, там рекурсия, и не факт что эта рекурсия средствами php будет лучше чем запросами SQL. Надіслати Поділитися на інших сайтах More sharing options... rb2 Опубліковано: 9 березня 2013 Share Опубліковано: 9 березня 2013 Уважаемые, кто-нибудь делал выборку категорий одним запросом с сортировкой соответственно для потомков? Интересует три и более уровней вложенности, два уровня я реализовал, но что то дальше затык https://opencartforum.com/topic/3355-есть-ли-модуль-анализа-лог-файлов/page__p__22909#entry22909 Надіслати Поділитися на інших сайтах More sharing options... vitalis Опубліковано: 9 березня 2013 Share Опубліковано: 9 березня 2013 да вы картинки залейте и тестируйте что вы буковки тестите,тестируйте артилерию тогда увидите реальный загруз Надіслати Поділитися на інших сайтах More sharing options... Yoda Опубліковано: 9 березня 2013 Share Опубліковано: 9 березня 2013 да вы картинки залейте и тестируйте что вы буковки тестите,тестируйте артилерию тогда увидите реальный загруз Ламерское замечание... Так как картинки во первых все закешированы это раз, два, даже отдача сотни картинок по 10 кб на страницу, не так затратна как процесс формирования дерева категорий и подсчет количества товаров на каждую категорию 2 Надіслати Поділитися на інших сайтах More sharing options... vikingshop Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Надо убрать now() во всех запросах, тогда mysql закеширует... вот мой кусок в vqmod <modification> <id>My Patches 2</id> <version>0.0.2</version> <vqmver>1.0.8</vqmver> <author>Vlad</author> <file name="/catalog/model/catalog/product.php"> <operation> <search position="replace"><![CDATA[ $query = $this->db->query("SELECT DISTINCT *, 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)$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())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$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())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '" . (int)$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' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . 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') . "'"); ]]></search> <add><![CDATA[ $now1 = date("Y-m-d")." 23:59:59"; $now2 = date("Y-m-d")." 00:00:00"; $query = $this->db->query("SELECT DISTINCT *, 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)$customer_group_id . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < '$now1') AND (pd2.date_end = '0000-00-00' OR pd2.date_end > '$now2')) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$customer_group_id . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < '$now1') AND (ps.date_end = '0000-00-00' OR ps.date_end > '$now2')) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '" . (int)$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' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . 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 <= '$now1' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'"); ]]></add> </operation> </file> </modification> Ну и диски надо перемонтировать в noatime... - тоже уберет лишнию запись, после этого серваки очень часто оживают :) 1 Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Опять у меня никаких изменений :-) До, без кеша Memory Usage: 8.050377 MB Execution Time: 0.249878 seconds 109 sql queries executed: До, с кешем Memory Usage: 8.006096 MB Execution Time: 0.3022 seconds 68 sql queries executed: После, без кеша Memory Usage: 8.054298 MB Execution Time: 0.292623 seconds 109 sql queries executed: После, с кешем Memory Usage: 8.008942 MB Execution Time: 0.314817 seconds 68 sql queries executed: Надіслати Поділитися на інших сайтах More sharing options... Yoda Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 вот это кто то юзал ? To RGB (стандартные модули кешированные пробовали использовать ?) Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Надо убрать now() во всех запросах, тогда mysql закеширует... вот мой кусок в vqmod <modification> <id>My Patches 2</id> <version>0.0.2</version> <vqmver>1.0.8</vqmver> <author>Vlad</author> <file name="/catalog/model/catalog/product.php"> <operation> <search position="replace"><![CDATA[ $query = $this->db->query("SELECT DISTINCT *, 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)$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())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$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())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '" . (int)$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' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . 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') . "'"); ]]></search> <add><![CDATA[ $now1 = date("Y-m-d")." 23:59:59"; $now2 = date("Y-m-d")." 00:00:00"; $query = $this->db->query("SELECT DISTINCT *, 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)$customer_group_id . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < '$now1') AND (pd2.date_end = '0000-00-00' OR pd2.date_end > '$now2')) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$customer_group_id . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < '$now1') AND (ps.date_end = '0000-00-00' OR ps.date_end > '$now2')) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '" . (int)$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' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . 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 <= '$now1' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'"); ]]></add> </operation> </file> </modification> Ну и диски надо перемонтировать в noatime... - тоже уберет лишнию запись, после этого серваки очень часто оживают :) обновление товаров раз в сутки ?! а оно надо если склад ведётся по магазину? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 вот это кто то юзал ? поиск? не, не слышал: https://opencartforum.com/index.php?app=core&module=search&do=user_activity&search_app=downloads&mid=6073&userMode=all&sid=bad63a9ff80a0fde58c912c84c371af1 Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 To RGB (стандартные модули кешированные пробовали использовать ?) У меня из стандартных только блок категорий, но учитывая малое их количество, там даже отключение подсчета кол-ва не сильно сыграло роль Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 И если он поиск? не, не слышал: http://opencartforum...8c912c84c371af1 как написано в теме Начиная с версии ocStore 0.1.9 данный драйвер включен в состав основного кода то обсуждать нечего? :-) Надіслати Поділитися на інших сайтах More sharing options... Yoda Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Ля. напали... Лучше подробнее расскажите как в маженте генерация временных таблиц организована. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 извиняйте, если слишком грубо выглядит сообщение :-( очень смутило, что ссылка на opencart.com, а не наша внутренняя. обсуждать есть чего :-) Надіслати Поділитися на інших сайтах More sharing options... Yoda Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Да я тут полночи себе репу чешу, где б костылей еще навставлять... наткнулся, глянул мельком. а тут как раз тему развили... А по делу. Пока что по моим всем наблюдениям.. Попытки по мелочи где то ускорится за счет классических советом по оптимизации запросов.. до одного места. Кешер на респонсе спасает но отчасти. Во первых прегенерация все равно иногда должна происходить. Во вторых если без него страница генерится секунд 10 и начинается регистрация или корзины, покупатели могут сбежать. Глобальные затыки кроются в алгоритмах построения дерева категорий, подсчете кол-ва товаров и выборке самих товаров. И думается мне что надо попробовать сделать временные таблицы и переопределить методы. Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 http://opencartforum...2909#entry22909 Переделал под свои нужды + seo_pro кэшируемый - всё летает. Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Переделал под свои нужды + seo_pro кэшируемый - всё летает. А какая у вас версия ОС? Там в теме ниже freelancer писал про то, что этот алгоритм есть в 1.5.1.3, но я у себя в 1.5.2.1 как-то его не нашел, хотя вроде если он так хорош, почему его не внедрили в последующие версии? Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 А какая у вас версия ОС? Там в теме ниже freelancer писал про то, что этот алгоритм есть в 1.5.1.3, но я у себя в 1.5.2.1 как-то его не нашел, хотя вроде если он так хорош, почему его не внедрили в последующие версии? 1.5.4.1 естественно ocStore Выборка одним запросом дампа категорий и перестройка дерева рекурсией - не самое лучшее решение если дерево категорий сильно увесистое, у меня категорий около сотни так, что терпимо, + кэширование готового результата сильно выручает. Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 (змінено) да чего уж там. может сразу амазон, кластеры и пр. ? я к тому, что у рядового пользователя обычный lamp хостинг(и на котором впрочем есть куда оптимизировать) Змінено 12 березня 2013 користувачем freelancer Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Опять у меня никаких изменений :-) До, без кеша Memory Usage: 8.050377 MB Execution Time: 0.249878 seconds 109 sql queries executed: До, с кешем Memory Usage: 8.006096 MB Execution Time: 0.3022 seconds 68 sql queries executed: После, без кеша Memory Usage: 8.054298 MB Execution Time: 0.292623 seconds 109 sql queries executed: После, с кешем Memory Usage: 8.008942 MB Execution Time: 0.314817 seconds 68 sql queries executed: Измерял новым дебаггером, и о чудо! никаких пятен Разброс в результатах исчез, и цифры стали реальнее. До замены NOW() Cache off: 7.22501 s 7.95 mb logs (2) sql (114) files (95) request (95) Cache on: 3.48739 s 7.95 mb logs (2) sql (73) files (95) request (95) После замены NOW() Cache off: 6.98414 s 7.95 mb logs (2) sql (114) files (95) request (95) Cache on: 3.44409 s 7.95 mb logs (2) sql (73) files (95) request (95) С выключенным кешем выигрыш 0.3 сек очень даже неплохо, как мне кажется Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 К сожалению, дебаггер обрезает запросы, и я еще не понял как их полностью вывести, но если устроят начальные куски их (по идее из них видно, что это за запрос), то вот такая картина (холодный старт): SELECT p.product_id, (SELECT AVG(rating) AS total FROM review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id 0.19743750 s SELECT DISTINCT m.`manufacturer_id`, m.`name` FROM `manufacturer` m LEFT JOIN product p ON(p.manufacturer_id=m.`manufacturer_id`) LEFT JOIN product_to_category p2c ON(p.product_id=p2c.product_id) LEFT JOIN product_to_store p2s ON(p.product_id=p2s.product_id) WHERE p.status = '1' AND p.date_availa 0.10013175 s SELECT DISTINCT pa.text, a.`attribute_id`, ad.`name`, ag.attribute_group_id, agd.name as attribute_group_name FROM `product_attribute` pa LEFT JOIN attribute a ON(pa.attribute_id=a.`attribute_id`) LEFT JOIN attribute_description ad ON(a.attribute_id=ad.`attribute_id`) LEFT JOIN attribute_group ag 0.56159700 s SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT price FROM product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '8' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < '2013-03-12 23:59:59') AND (pd2.date_end = ' 0.01184400 s Последний запрос повторяется столько раз, сколько товаров выводится (у меня 12), и каждый раз так же медленно выполняется. Страница категории, 12 товаров на страницу, из модулей только список категорий в шапке и сбоку (всего пара десятков, без подсчета), ну и фильтрпро с фильтрацией по цене, производителю и одной единственной группе атрибутов (тип товара). Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 (змінено) 1. Последний запрос можно выполнить 1 раз. Если сначала собрать массив product_id, а потом сделать WHERE product_id IN (...) 2. По атрибутам тяжеленький запрос получился. А где он вызывается? В модуле фильтра? 1. Наверное да, но тогда ведь теряется совместимость с версиями (хотя мне уже не страшно :-)) 2. Да, это функция getAttributesByCategoryId так резвится Скорее всего из-за кол-ва товаров в категории (4К), потому что самих уникальных атрибутов там 10 шт во всего 1-й группе. P.S. Скоро попробую изменения с вашей статьи снова прикрутить к движку, и перемерять результаты, а то старый дебаггер оказывается врал, а вот новый вроде ничего P.P.S. Подумал, что о совместимости в теме про оптимизацию вообще нет смысла говорить - либо оптимизируем, либо радуемся новым обновлениям НЕоптимизированного медленного движка :-) Змінено 12 березня 2013 користувачем RGB Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 RGB, запустите db_log на холодную, походите по тормозным местам и скиньте мне дам если будет время. либо саму базу(без заказов, пользователей и прочих секретных данных) я сейчас как раз занят такими проблемами Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 Для ускорения производительности прибегают в основном к кэшированию. Действенный способ, спору нет. Но давайте обсудим те моменты, которые НЕ стоит кэшировать: 1. Не стоит кэшировать весь контент страницы, так как nginx уже кэширует; 2. Не стоит кэшировать SQL-запросы, так как MySQL уже кэширует; 3. Разумно используйте файловый кэш OpenCart, так как при очень большом кол-ве файлов в папке system/cache/ будет тормозить из-за особенностей файловой системы; 1. nginx не везде, более того он вообще встречается в малых количествах на шаред хостингах, если не шаред хостинг и есть возможность рулить ПО на нём, то вообще к чему вопрос про кэшировние если всё лечится путём вливания денег в железо, смены СУБД/ПО, кластеризации и тд. 2. Если у Вас нет возможности рулить настройками MySQL (query_cache_size, query_cache_limit и тд) вкупе с достаточно имеющимся кол-вом физ. RAM, то толку от кэширования MySQL будет не много. 3. Здесь важно знать этот самый размер, "при очень большом кол-ве файлов" - сколько именно, какая ФС, какое железо, какой RAID? Надіслати Поділитися на інших сайтах More sharing options... vikingshop Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 обновление товаров раз в сутки ?! а оно надо если склад ведётся по магазину? Если будет обновление кол-ва товара - то запрос выпадет из кеша как бэ :) Просто так mysql вообще этот кусок у вас не будет кешировать... Кто на VDSах/виртуалах отпишите в ТП пусть на серваках в noatime перемаунтят диски где mysql (на время хотябы) и посмотрите на время исполнения :) Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 Вперед Сторінка 3 з 6 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Схожі публікації Дублируються запросы в базу данных. Автор: mario512, 6 вересня 2022 mysql opencart (і ще %d) Теги: mysql opencart птн пнх 4 відповіді 753 перегляди mario512 6 вересня 2022 работа с базой данных Автор: AlexMax13, 1 серпня 2022 база данных mysql 8 відповідей 1 218 переглядів diterknobloch 27 лютого 2023 Модуль SQL менеджер SQL Buddy [Поддержка] 1 2 Автор: sv2109, 26 липня 2013 mysql 32 відповіді 7 030 переглядів PetrSemenov 29 жовтня 2017 Кто какой программой пользуется для SQL Автор: multitask85, 10 лютого 2022 mysql 20 відповідей 1 538 переглядів clarionio 22 березня 2022 кириллица в б/д Автор: satt, 8 лютого 2022 mysql utf-8 0 відповідей 479 переглядів satt 8 лютого 2022 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Оптимизация движка под 120 000 товаров Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
rb2 Опубліковано: 9 березня 2013 Share Опубліковано: 9 березня 2013 Уважаемые, кто-нибудь делал выборку категорий одним запросом с сортировкой соответственно для потомков? Интересует три и более уровней вложенности, два уровня я реализовал, но что то дальше затык https://opencartforum.com/topic/3355-есть-ли-модуль-анализа-лог-файлов/page__p__22909#entry22909 Надіслати Поділитися на інших сайтах More sharing options...
vitalis Опубліковано: 9 березня 2013 Share Опубліковано: 9 березня 2013 да вы картинки залейте и тестируйте что вы буковки тестите,тестируйте артилерию тогда увидите реальный загруз Надіслати Поділитися на інших сайтах More sharing options...
Yoda Опубліковано: 9 березня 2013 Share Опубліковано: 9 березня 2013 да вы картинки залейте и тестируйте что вы буковки тестите,тестируйте артилерию тогда увидите реальный загруз Ламерское замечание... Так как картинки во первых все закешированы это раз, два, даже отдача сотни картинок по 10 кб на страницу, не так затратна как процесс формирования дерева категорий и подсчет количества товаров на каждую категорию 2 Надіслати Поділитися на інших сайтах More sharing options...
vikingshop Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Надо убрать now() во всех запросах, тогда mysql закеширует... вот мой кусок в vqmod <modification> <id>My Patches 2</id> <version>0.0.2</version> <vqmver>1.0.8</vqmver> <author>Vlad</author> <file name="/catalog/model/catalog/product.php"> <operation> <search position="replace"><![CDATA[ $query = $this->db->query("SELECT DISTINCT *, 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)$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())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$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())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '" . (int)$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' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . 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') . "'"); ]]></search> <add><![CDATA[ $now1 = date("Y-m-d")." 23:59:59"; $now2 = date("Y-m-d")." 00:00:00"; $query = $this->db->query("SELECT DISTINCT *, 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)$customer_group_id . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < '$now1') AND (pd2.date_end = '0000-00-00' OR pd2.date_end > '$now2')) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$customer_group_id . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < '$now1') AND (ps.date_end = '0000-00-00' OR ps.date_end > '$now2')) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '" . (int)$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' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . 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 <= '$now1' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'"); ]]></add> </operation> </file> </modification> Ну и диски надо перемонтировать в noatime... - тоже уберет лишнию запись, после этого серваки очень часто оживают :) 1 Надіслати Поділитися на інших сайтах More sharing options...
RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Опять у меня никаких изменений :-) До, без кеша Memory Usage: 8.050377 MB Execution Time: 0.249878 seconds 109 sql queries executed: До, с кешем Memory Usage: 8.006096 MB Execution Time: 0.3022 seconds 68 sql queries executed: После, без кеша Memory Usage: 8.054298 MB Execution Time: 0.292623 seconds 109 sql queries executed: После, с кешем Memory Usage: 8.008942 MB Execution Time: 0.314817 seconds 68 sql queries executed: Надіслати Поділитися на інших сайтах More sharing options... Yoda Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 вот это кто то юзал ? To RGB (стандартные модули кешированные пробовали использовать ?) Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Надо убрать now() во всех запросах, тогда mysql закеширует... вот мой кусок в vqmod <modification> <id>My Patches 2</id> <version>0.0.2</version> <vqmver>1.0.8</vqmver> <author>Vlad</author> <file name="/catalog/model/catalog/product.php"> <operation> <search position="replace"><![CDATA[ $query = $this->db->query("SELECT DISTINCT *, 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)$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())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$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())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '" . (int)$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' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . 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') . "'"); ]]></search> <add><![CDATA[ $now1 = date("Y-m-d")." 23:59:59"; $now2 = date("Y-m-d")." 00:00:00"; $query = $this->db->query("SELECT DISTINCT *, 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)$customer_group_id . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < '$now1') AND (pd2.date_end = '0000-00-00' OR pd2.date_end > '$now2')) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$customer_group_id . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < '$now1') AND (ps.date_end = '0000-00-00' OR ps.date_end > '$now2')) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '" . (int)$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' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . 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 <= '$now1' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'"); ]]></add> </operation> </file> </modification> Ну и диски надо перемонтировать в noatime... - тоже уберет лишнию запись, после этого серваки очень часто оживают :) обновление товаров раз в сутки ?! а оно надо если склад ведётся по магазину? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 вот это кто то юзал ? поиск? не, не слышал: https://opencartforum.com/index.php?app=core&module=search&do=user_activity&search_app=downloads&mid=6073&userMode=all&sid=bad63a9ff80a0fde58c912c84c371af1 Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 To RGB (стандартные модули кешированные пробовали использовать ?) У меня из стандартных только блок категорий, но учитывая малое их количество, там даже отключение подсчета кол-ва не сильно сыграло роль Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 И если он поиск? не, не слышал: http://opencartforum...8c912c84c371af1 как написано в теме Начиная с версии ocStore 0.1.9 данный драйвер включен в состав основного кода то обсуждать нечего? :-) Надіслати Поділитися на інших сайтах More sharing options... Yoda Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Ля. напали... Лучше подробнее расскажите как в маженте генерация временных таблиц организована. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 извиняйте, если слишком грубо выглядит сообщение :-( очень смутило, что ссылка на opencart.com, а не наша внутренняя. обсуждать есть чего :-) Надіслати Поділитися на інших сайтах More sharing options... Yoda Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Да я тут полночи себе репу чешу, где б костылей еще навставлять... наткнулся, глянул мельком. а тут как раз тему развили... А по делу. Пока что по моим всем наблюдениям.. Попытки по мелочи где то ускорится за счет классических советом по оптимизации запросов.. до одного места. Кешер на респонсе спасает но отчасти. Во первых прегенерация все равно иногда должна происходить. Во вторых если без него страница генерится секунд 10 и начинается регистрация или корзины, покупатели могут сбежать. Глобальные затыки кроются в алгоритмах построения дерева категорий, подсчете кол-ва товаров и выборке самих товаров. И думается мне что надо попробовать сделать временные таблицы и переопределить методы. Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 http://opencartforum...2909#entry22909 Переделал под свои нужды + seo_pro кэшируемый - всё летает. Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Переделал под свои нужды + seo_pro кэшируемый - всё летает. А какая у вас версия ОС? Там в теме ниже freelancer писал про то, что этот алгоритм есть в 1.5.1.3, но я у себя в 1.5.2.1 как-то его не нашел, хотя вроде если он так хорош, почему его не внедрили в последующие версии? Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 А какая у вас версия ОС? Там в теме ниже freelancer писал про то, что этот алгоритм есть в 1.5.1.3, но я у себя в 1.5.2.1 как-то его не нашел, хотя вроде если он так хорош, почему его не внедрили в последующие версии? 1.5.4.1 естественно ocStore Выборка одним запросом дампа категорий и перестройка дерева рекурсией - не самое лучшее решение если дерево категорий сильно увесистое, у меня категорий около сотни так, что терпимо, + кэширование готового результата сильно выручает. Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 (змінено) да чего уж там. может сразу амазон, кластеры и пр. ? я к тому, что у рядового пользователя обычный lamp хостинг(и на котором впрочем есть куда оптимизировать) Змінено 12 березня 2013 користувачем freelancer Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Опять у меня никаких изменений :-) До, без кеша Memory Usage: 8.050377 MB Execution Time: 0.249878 seconds 109 sql queries executed: До, с кешем Memory Usage: 8.006096 MB Execution Time: 0.3022 seconds 68 sql queries executed: После, без кеша Memory Usage: 8.054298 MB Execution Time: 0.292623 seconds 109 sql queries executed: После, с кешем Memory Usage: 8.008942 MB Execution Time: 0.314817 seconds 68 sql queries executed: Измерял новым дебаггером, и о чудо! никаких пятен Разброс в результатах исчез, и цифры стали реальнее. До замены NOW() Cache off: 7.22501 s 7.95 mb logs (2) sql (114) files (95) request (95) Cache on: 3.48739 s 7.95 mb logs (2) sql (73) files (95) request (95) После замены NOW() Cache off: 6.98414 s 7.95 mb logs (2) sql (114) files (95) request (95) Cache on: 3.44409 s 7.95 mb logs (2) sql (73) files (95) request (95) С выключенным кешем выигрыш 0.3 сек очень даже неплохо, как мне кажется Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 К сожалению, дебаггер обрезает запросы, и я еще не понял как их полностью вывести, но если устроят начальные куски их (по идее из них видно, что это за запрос), то вот такая картина (холодный старт): SELECT p.product_id, (SELECT AVG(rating) AS total FROM review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id 0.19743750 s SELECT DISTINCT m.`manufacturer_id`, m.`name` FROM `manufacturer` m LEFT JOIN product p ON(p.manufacturer_id=m.`manufacturer_id`) LEFT JOIN product_to_category p2c ON(p.product_id=p2c.product_id) LEFT JOIN product_to_store p2s ON(p.product_id=p2s.product_id) WHERE p.status = '1' AND p.date_availa 0.10013175 s SELECT DISTINCT pa.text, a.`attribute_id`, ad.`name`, ag.attribute_group_id, agd.name as attribute_group_name FROM `product_attribute` pa LEFT JOIN attribute a ON(pa.attribute_id=a.`attribute_id`) LEFT JOIN attribute_description ad ON(a.attribute_id=ad.`attribute_id`) LEFT JOIN attribute_group ag 0.56159700 s SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT price FROM product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '8' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < '2013-03-12 23:59:59') AND (pd2.date_end = ' 0.01184400 s Последний запрос повторяется столько раз, сколько товаров выводится (у меня 12), и каждый раз так же медленно выполняется. Страница категории, 12 товаров на страницу, из модулей только список категорий в шапке и сбоку (всего пара десятков, без подсчета), ну и фильтрпро с фильтрацией по цене, производителю и одной единственной группе атрибутов (тип товара). Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 (змінено) 1. Последний запрос можно выполнить 1 раз. Если сначала собрать массив product_id, а потом сделать WHERE product_id IN (...) 2. По атрибутам тяжеленький запрос получился. А где он вызывается? В модуле фильтра? 1. Наверное да, но тогда ведь теряется совместимость с версиями (хотя мне уже не страшно :-)) 2. Да, это функция getAttributesByCategoryId так резвится Скорее всего из-за кол-ва товаров в категории (4К), потому что самих уникальных атрибутов там 10 шт во всего 1-й группе. P.S. Скоро попробую изменения с вашей статьи снова прикрутить к движку, и перемерять результаты, а то старый дебаггер оказывается врал, а вот новый вроде ничего P.P.S. Подумал, что о совместимости в теме про оптимизацию вообще нет смысла говорить - либо оптимизируем, либо радуемся новым обновлениям НЕоптимизированного медленного движка :-) Змінено 12 березня 2013 користувачем RGB Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 RGB, запустите db_log на холодную, походите по тормозным местам и скиньте мне дам если будет время. либо саму базу(без заказов, пользователей и прочих секретных данных) я сейчас как раз занят такими проблемами Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 Для ускорения производительности прибегают в основном к кэшированию. Действенный способ, спору нет. Но давайте обсудим те моменты, которые НЕ стоит кэшировать: 1. Не стоит кэшировать весь контент страницы, так как nginx уже кэширует; 2. Не стоит кэшировать SQL-запросы, так как MySQL уже кэширует; 3. Разумно используйте файловый кэш OpenCart, так как при очень большом кол-ве файлов в папке system/cache/ будет тормозить из-за особенностей файловой системы; 1. nginx не везде, более того он вообще встречается в малых количествах на шаред хостингах, если не шаред хостинг и есть возможность рулить ПО на нём, то вообще к чему вопрос про кэшировние если всё лечится путём вливания денег в железо, смены СУБД/ПО, кластеризации и тд. 2. Если у Вас нет возможности рулить настройками MySQL (query_cache_size, query_cache_limit и тд) вкупе с достаточно имеющимся кол-вом физ. RAM, то толку от кэширования MySQL будет не много. 3. Здесь важно знать этот самый размер, "при очень большом кол-ве файлов" - сколько именно, какая ФС, какое железо, какой RAID? Надіслати Поділитися на інших сайтах More sharing options... vikingshop Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 обновление товаров раз в сутки ?! а оно надо если склад ведётся по магазину? Если будет обновление кол-ва товара - то запрос выпадет из кеша как бэ :) Просто так mysql вообще этот кусок у вас не будет кешировать... Кто на VDSах/виртуалах отпишите в ТП пусть на серваках в noatime перемаунтят диски где mysql (на время хотябы) и посмотрите на время исполнения :) Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 Вперед Сторінка 3 з 6 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Схожі публікації Дублируються запросы в базу данных. Автор: mario512, 6 вересня 2022 mysql opencart (і ще %d) Теги: mysql opencart птн пнх 4 відповіді 753 перегляди mario512 6 вересня 2022 работа с базой данных Автор: AlexMax13, 1 серпня 2022 база данных mysql 8 відповідей 1 218 переглядів diterknobloch 27 лютого 2023 Модуль SQL менеджер SQL Buddy [Поддержка] 1 2 Автор: sv2109, 26 липня 2013 mysql 32 відповіді 7 030 переглядів PetrSemenov 29 жовтня 2017 Кто какой программой пользуется для SQL Автор: multitask85, 10 лютого 2022 mysql 20 відповідей 1 538 переглядів clarionio 22 березня 2022 кириллица в б/д Автор: satt, 8 лютого 2022 mysql utf-8 0 відповідей 479 переглядів satt 8 лютого 2022 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Оптимизация движка под 120 000 товаров Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Yoda Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 вот это кто то юзал ? To RGB (стандартные модули кешированные пробовали использовать ?) Надіслати Поділитися на інших сайтах More sharing options...
costas Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Надо убрать now() во всех запросах, тогда mysql закеширует... вот мой кусок в vqmod <modification> <id>My Patches 2</id> <version>0.0.2</version> <vqmver>1.0.8</vqmver> <author>Vlad</author> <file name="/catalog/model/catalog/product.php"> <operation> <search position="replace"><![CDATA[ $query = $this->db->query("SELECT DISTINCT *, 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)$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())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$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())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '" . (int)$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' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . 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') . "'"); ]]></search> <add><![CDATA[ $now1 = date("Y-m-d")." 23:59:59"; $now2 = date("Y-m-d")." 00:00:00"; $query = $this->db->query("SELECT DISTINCT *, 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)$customer_group_id . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < '$now1') AND (pd2.date_end = '0000-00-00' OR pd2.date_end > '$now2')) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$customer_group_id . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < '$now1') AND (ps.date_end = '0000-00-00' OR ps.date_end > '$now2')) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '" . (int)$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' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . 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 <= '$now1' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'"); ]]></add> </operation> </file> </modification> Ну и диски надо перемонтировать в noatime... - тоже уберет лишнию запись, после этого серваки очень часто оживают :) обновление товаров раз в сутки ?! а оно надо если склад ведётся по магазину? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 вот это кто то юзал ? поиск? не, не слышал: https://opencartforum.com/index.php?app=core&module=search&do=user_activity&search_app=downloads&mid=6073&userMode=all&sid=bad63a9ff80a0fde58c912c84c371af1 Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 To RGB (стандартные модули кешированные пробовали использовать ?) У меня из стандартных только блок категорий, но учитывая малое их количество, там даже отключение подсчета кол-ва не сильно сыграло роль Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 И если он поиск? не, не слышал: http://opencartforum...8c912c84c371af1 как написано в теме Начиная с версии ocStore 0.1.9 данный драйвер включен в состав основного кода то обсуждать нечего? :-) Надіслати Поділитися на інших сайтах More sharing options... Yoda Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Ля. напали... Лучше подробнее расскажите как в маженте генерация временных таблиц организована. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 извиняйте, если слишком грубо выглядит сообщение :-( очень смутило, что ссылка на opencart.com, а не наша внутренняя. обсуждать есть чего :-) Надіслати Поділитися на інших сайтах More sharing options... Yoda Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Да я тут полночи себе репу чешу, где б костылей еще навставлять... наткнулся, глянул мельком. а тут как раз тему развили... А по делу. Пока что по моим всем наблюдениям.. Попытки по мелочи где то ускорится за счет классических советом по оптимизации запросов.. до одного места. Кешер на респонсе спасает но отчасти. Во первых прегенерация все равно иногда должна происходить. Во вторых если без него страница генерится секунд 10 и начинается регистрация или корзины, покупатели могут сбежать. Глобальные затыки кроются в алгоритмах построения дерева категорий, подсчете кол-ва товаров и выборке самих товаров. И думается мне что надо попробовать сделать временные таблицы и переопределить методы. Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 http://opencartforum...2909#entry22909 Переделал под свои нужды + seo_pro кэшируемый - всё летает. Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Переделал под свои нужды + seo_pro кэшируемый - всё летает. А какая у вас версия ОС? Там в теме ниже freelancer писал про то, что этот алгоритм есть в 1.5.1.3, но я у себя в 1.5.2.1 как-то его не нашел, хотя вроде если он так хорош, почему его не внедрили в последующие версии? Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 А какая у вас версия ОС? Там в теме ниже freelancer писал про то, что этот алгоритм есть в 1.5.1.3, но я у себя в 1.5.2.1 как-то его не нашел, хотя вроде если он так хорош, почему его не внедрили в последующие версии? 1.5.4.1 естественно ocStore Выборка одним запросом дампа категорий и перестройка дерева рекурсией - не самое лучшее решение если дерево категорий сильно увесистое, у меня категорий около сотни так, что терпимо, + кэширование готового результата сильно выручает. Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 (змінено) да чего уж там. может сразу амазон, кластеры и пр. ? я к тому, что у рядового пользователя обычный lamp хостинг(и на котором впрочем есть куда оптимизировать) Змінено 12 березня 2013 користувачем freelancer Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Опять у меня никаких изменений :-) До, без кеша Memory Usage: 8.050377 MB Execution Time: 0.249878 seconds 109 sql queries executed: До, с кешем Memory Usage: 8.006096 MB Execution Time: 0.3022 seconds 68 sql queries executed: После, без кеша Memory Usage: 8.054298 MB Execution Time: 0.292623 seconds 109 sql queries executed: После, с кешем Memory Usage: 8.008942 MB Execution Time: 0.314817 seconds 68 sql queries executed: Измерял новым дебаггером, и о чудо! никаких пятен Разброс в результатах исчез, и цифры стали реальнее. До замены NOW() Cache off: 7.22501 s 7.95 mb logs (2) sql (114) files (95) request (95) Cache on: 3.48739 s 7.95 mb logs (2) sql (73) files (95) request (95) После замены NOW() Cache off: 6.98414 s 7.95 mb logs (2) sql (114) files (95) request (95) Cache on: 3.44409 s 7.95 mb logs (2) sql (73) files (95) request (95) С выключенным кешем выигрыш 0.3 сек очень даже неплохо, как мне кажется Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 К сожалению, дебаггер обрезает запросы, и я еще не понял как их полностью вывести, но если устроят начальные куски их (по идее из них видно, что это за запрос), то вот такая картина (холодный старт): SELECT p.product_id, (SELECT AVG(rating) AS total FROM review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id 0.19743750 s SELECT DISTINCT m.`manufacturer_id`, m.`name` FROM `manufacturer` m LEFT JOIN product p ON(p.manufacturer_id=m.`manufacturer_id`) LEFT JOIN product_to_category p2c ON(p.product_id=p2c.product_id) LEFT JOIN product_to_store p2s ON(p.product_id=p2s.product_id) WHERE p.status = '1' AND p.date_availa 0.10013175 s SELECT DISTINCT pa.text, a.`attribute_id`, ad.`name`, ag.attribute_group_id, agd.name as attribute_group_name FROM `product_attribute` pa LEFT JOIN attribute a ON(pa.attribute_id=a.`attribute_id`) LEFT JOIN attribute_description ad ON(a.attribute_id=ad.`attribute_id`) LEFT JOIN attribute_group ag 0.56159700 s SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT price FROM product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '8' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < '2013-03-12 23:59:59') AND (pd2.date_end = ' 0.01184400 s Последний запрос повторяется столько раз, сколько товаров выводится (у меня 12), и каждый раз так же медленно выполняется. Страница категории, 12 товаров на страницу, из модулей только список категорий в шапке и сбоку (всего пара десятков, без подсчета), ну и фильтрпро с фильтрацией по цене, производителю и одной единственной группе атрибутов (тип товара). Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 (змінено) 1. Последний запрос можно выполнить 1 раз. Если сначала собрать массив product_id, а потом сделать WHERE product_id IN (...) 2. По атрибутам тяжеленький запрос получился. А где он вызывается? В модуле фильтра? 1. Наверное да, но тогда ведь теряется совместимость с версиями (хотя мне уже не страшно :-)) 2. Да, это функция getAttributesByCategoryId так резвится Скорее всего из-за кол-ва товаров в категории (4К), потому что самих уникальных атрибутов там 10 шт во всего 1-й группе. P.S. Скоро попробую изменения с вашей статьи снова прикрутить к движку, и перемерять результаты, а то старый дебаггер оказывается врал, а вот новый вроде ничего P.P.S. Подумал, что о совместимости в теме про оптимизацию вообще нет смысла говорить - либо оптимизируем, либо радуемся новым обновлениям НЕоптимизированного медленного движка :-) Змінено 12 березня 2013 користувачем RGB Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 RGB, запустите db_log на холодную, походите по тормозным местам и скиньте мне дам если будет время. либо саму базу(без заказов, пользователей и прочих секретных данных) я сейчас как раз занят такими проблемами Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 Для ускорения производительности прибегают в основном к кэшированию. Действенный способ, спору нет. Но давайте обсудим те моменты, которые НЕ стоит кэшировать: 1. Не стоит кэшировать весь контент страницы, так как nginx уже кэширует; 2. Не стоит кэшировать SQL-запросы, так как MySQL уже кэширует; 3. Разумно используйте файловый кэш OpenCart, так как при очень большом кол-ве файлов в папке system/cache/ будет тормозить из-за особенностей файловой системы; 1. nginx не везде, более того он вообще встречается в малых количествах на шаред хостингах, если не шаред хостинг и есть возможность рулить ПО на нём, то вообще к чему вопрос про кэшировние если всё лечится путём вливания денег в железо, смены СУБД/ПО, кластеризации и тд. 2. Если у Вас нет возможности рулить настройками MySQL (query_cache_size, query_cache_limit и тд) вкупе с достаточно имеющимся кол-вом физ. RAM, то толку от кэширования MySQL будет не много. 3. Здесь важно знать этот самый размер, "при очень большом кол-ве файлов" - сколько именно, какая ФС, какое железо, какой RAID? Надіслати Поділитися на інших сайтах More sharing options... vikingshop Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 обновление товаров раз в сутки ?! а оно надо если склад ведётся по магазину? Если будет обновление кол-ва товара - то запрос выпадет из кеша как бэ :) Просто так mysql вообще этот кусок у вас не будет кешировать... Кто на VDSах/виртуалах отпишите в ТП пусть на серваках в noatime перемаунтят диски где mysql (на время хотябы) и посмотрите на время исполнения :) Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 Вперед Сторінка 3 з 6 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Схожі публікації Дублируються запросы в базу данных. Автор: mario512, 6 вересня 2022 mysql opencart (і ще %d) Теги: mysql opencart птн пнх 4 відповіді 753 перегляди mario512 6 вересня 2022 работа с базой данных Автор: AlexMax13, 1 серпня 2022 база данных mysql 8 відповідей 1 218 переглядів diterknobloch 27 лютого 2023 Модуль SQL менеджер SQL Buddy [Поддержка] 1 2 Автор: sv2109, 26 липня 2013 mysql 32 відповіді 7 030 переглядів PetrSemenov 29 жовтня 2017 Кто какой программой пользуется для SQL Автор: multitask85, 10 лютого 2022 mysql 20 відповідей 1 538 переглядів clarionio 22 березня 2022 кириллица в б/д Автор: satt, 8 лютого 2022 mysql utf-8 0 відповідей 479 переглядів satt 8 лютого 2022 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Оптимизация движка под 120 000 товаров Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
afwollis Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 вот это кто то юзал ? поиск? не, не слышал: https://opencartforum.com/index.php?app=core&module=search&do=user_activity&search_app=downloads&mid=6073&userMode=all&sid=bad63a9ff80a0fde58c912c84c371af1 Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 To RGB (стандартные модули кешированные пробовали использовать ?) У меня из стандартных только блок категорий, но учитывая малое их количество, там даже отключение подсчета кол-ва не сильно сыграло роль Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 И если он поиск? не, не слышал: http://opencartforum...8c912c84c371af1 как написано в теме Начиная с версии ocStore 0.1.9 данный драйвер включен в состав основного кода то обсуждать нечего? :-) Надіслати Поділитися на інших сайтах More sharing options... Yoda Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Ля. напали... Лучше подробнее расскажите как в маженте генерация временных таблиц организована. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 извиняйте, если слишком грубо выглядит сообщение :-( очень смутило, что ссылка на opencart.com, а не наша внутренняя. обсуждать есть чего :-) Надіслати Поділитися на інших сайтах More sharing options... Yoda Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Да я тут полночи себе репу чешу, где б костылей еще навставлять... наткнулся, глянул мельком. а тут как раз тему развили... А по делу. Пока что по моим всем наблюдениям.. Попытки по мелочи где то ускорится за счет классических советом по оптимизации запросов.. до одного места. Кешер на респонсе спасает но отчасти. Во первых прегенерация все равно иногда должна происходить. Во вторых если без него страница генерится секунд 10 и начинается регистрация или корзины, покупатели могут сбежать. Глобальные затыки кроются в алгоритмах построения дерева категорий, подсчете кол-ва товаров и выборке самих товаров. И думается мне что надо попробовать сделать временные таблицы и переопределить методы. Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 http://opencartforum...2909#entry22909 Переделал под свои нужды + seo_pro кэшируемый - всё летает. Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Переделал под свои нужды + seo_pro кэшируемый - всё летает. А какая у вас версия ОС? Там в теме ниже freelancer писал про то, что этот алгоритм есть в 1.5.1.3, но я у себя в 1.5.2.1 как-то его не нашел, хотя вроде если он так хорош, почему его не внедрили в последующие версии? Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 А какая у вас версия ОС? Там в теме ниже freelancer писал про то, что этот алгоритм есть в 1.5.1.3, но я у себя в 1.5.2.1 как-то его не нашел, хотя вроде если он так хорош, почему его не внедрили в последующие версии? 1.5.4.1 естественно ocStore Выборка одним запросом дампа категорий и перестройка дерева рекурсией - не самое лучшее решение если дерево категорий сильно увесистое, у меня категорий около сотни так, что терпимо, + кэширование готового результата сильно выручает. Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 (змінено) да чего уж там. может сразу амазон, кластеры и пр. ? я к тому, что у рядового пользователя обычный lamp хостинг(и на котором впрочем есть куда оптимизировать) Змінено 12 березня 2013 користувачем freelancer Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Опять у меня никаких изменений :-) До, без кеша Memory Usage: 8.050377 MB Execution Time: 0.249878 seconds 109 sql queries executed: До, с кешем Memory Usage: 8.006096 MB Execution Time: 0.3022 seconds 68 sql queries executed: После, без кеша Memory Usage: 8.054298 MB Execution Time: 0.292623 seconds 109 sql queries executed: После, с кешем Memory Usage: 8.008942 MB Execution Time: 0.314817 seconds 68 sql queries executed: Измерял новым дебаггером, и о чудо! никаких пятен Разброс в результатах исчез, и цифры стали реальнее. До замены NOW() Cache off: 7.22501 s 7.95 mb logs (2) sql (114) files (95) request (95) Cache on: 3.48739 s 7.95 mb logs (2) sql (73) files (95) request (95) После замены NOW() Cache off: 6.98414 s 7.95 mb logs (2) sql (114) files (95) request (95) Cache on: 3.44409 s 7.95 mb logs (2) sql (73) files (95) request (95) С выключенным кешем выигрыш 0.3 сек очень даже неплохо, как мне кажется Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 К сожалению, дебаггер обрезает запросы, и я еще не понял как их полностью вывести, но если устроят начальные куски их (по идее из них видно, что это за запрос), то вот такая картина (холодный старт): SELECT p.product_id, (SELECT AVG(rating) AS total FROM review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id 0.19743750 s SELECT DISTINCT m.`manufacturer_id`, m.`name` FROM `manufacturer` m LEFT JOIN product p ON(p.manufacturer_id=m.`manufacturer_id`) LEFT JOIN product_to_category p2c ON(p.product_id=p2c.product_id) LEFT JOIN product_to_store p2s ON(p.product_id=p2s.product_id) WHERE p.status = '1' AND p.date_availa 0.10013175 s SELECT DISTINCT pa.text, a.`attribute_id`, ad.`name`, ag.attribute_group_id, agd.name as attribute_group_name FROM `product_attribute` pa LEFT JOIN attribute a ON(pa.attribute_id=a.`attribute_id`) LEFT JOIN attribute_description ad ON(a.attribute_id=ad.`attribute_id`) LEFT JOIN attribute_group ag 0.56159700 s SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT price FROM product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '8' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < '2013-03-12 23:59:59') AND (pd2.date_end = ' 0.01184400 s Последний запрос повторяется столько раз, сколько товаров выводится (у меня 12), и каждый раз так же медленно выполняется. Страница категории, 12 товаров на страницу, из модулей только список категорий в шапке и сбоку (всего пара десятков, без подсчета), ну и фильтрпро с фильтрацией по цене, производителю и одной единственной группе атрибутов (тип товара). Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 (змінено) 1. Последний запрос можно выполнить 1 раз. Если сначала собрать массив product_id, а потом сделать WHERE product_id IN (...) 2. По атрибутам тяжеленький запрос получился. А где он вызывается? В модуле фильтра? 1. Наверное да, но тогда ведь теряется совместимость с версиями (хотя мне уже не страшно :-)) 2. Да, это функция getAttributesByCategoryId так резвится Скорее всего из-за кол-ва товаров в категории (4К), потому что самих уникальных атрибутов там 10 шт во всего 1-й группе. P.S. Скоро попробую изменения с вашей статьи снова прикрутить к движку, и перемерять результаты, а то старый дебаггер оказывается врал, а вот новый вроде ничего P.P.S. Подумал, что о совместимости в теме про оптимизацию вообще нет смысла говорить - либо оптимизируем, либо радуемся новым обновлениям НЕоптимизированного медленного движка :-) Змінено 12 березня 2013 користувачем RGB Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 RGB, запустите db_log на холодную, походите по тормозным местам и скиньте мне дам если будет время. либо саму базу(без заказов, пользователей и прочих секретных данных) я сейчас как раз занят такими проблемами Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 Для ускорения производительности прибегают в основном к кэшированию. Действенный способ, спору нет. Но давайте обсудим те моменты, которые НЕ стоит кэшировать: 1. Не стоит кэшировать весь контент страницы, так как nginx уже кэширует; 2. Не стоит кэшировать SQL-запросы, так как MySQL уже кэширует; 3. Разумно используйте файловый кэш OpenCart, так как при очень большом кол-ве файлов в папке system/cache/ будет тормозить из-за особенностей файловой системы; 1. nginx не везде, более того он вообще встречается в малых количествах на шаред хостингах, если не шаред хостинг и есть возможность рулить ПО на нём, то вообще к чему вопрос про кэшировние если всё лечится путём вливания денег в железо, смены СУБД/ПО, кластеризации и тд. 2. Если у Вас нет возможности рулить настройками MySQL (query_cache_size, query_cache_limit и тд) вкупе с достаточно имеющимся кол-вом физ. RAM, то толку от кэширования MySQL будет не много. 3. Здесь важно знать этот самый размер, "при очень большом кол-ве файлов" - сколько именно, какая ФС, какое железо, какой RAID? Надіслати Поділитися на інших сайтах More sharing options... vikingshop Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 обновление товаров раз в сутки ?! а оно надо если склад ведётся по магазину? Если будет обновление кол-ва товара - то запрос выпадет из кеша как бэ :) Просто так mysql вообще этот кусок у вас не будет кешировать... Кто на VDSах/виртуалах отпишите в ТП пусть на серваках в noatime перемаунтят диски где mysql (на время хотябы) и посмотрите на время исполнения :) Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 Вперед Сторінка 3 з 6 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Схожі публікації Дублируються запросы в базу данных. Автор: mario512, 6 вересня 2022 mysql opencart (і ще %d) Теги: mysql opencart птн пнх 4 відповіді 753 перегляди mario512 6 вересня 2022 работа с базой данных Автор: AlexMax13, 1 серпня 2022 база данных mysql 8 відповідей 1 218 переглядів diterknobloch 27 лютого 2023 Модуль SQL менеджер SQL Buddy [Поддержка] 1 2 Автор: sv2109, 26 липня 2013 mysql 32 відповіді 7 030 переглядів PetrSemenov 29 жовтня 2017 Кто какой программой пользуется для SQL Автор: multitask85, 10 лютого 2022 mysql 20 відповідей 1 538 переглядів clarionio 22 березня 2022 кириллица в б/д Автор: satt, 8 лютого 2022 mysql utf-8 0 відповідей 479 переглядів satt 8 лютого 2022 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Оптимизация движка под 120 000 товаров Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 To RGB (стандартные модули кешированные пробовали использовать ?) У меня из стандартных только блок категорий, но учитывая малое их количество, там даже отключение подсчета кол-ва не сильно сыграло роль Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 И если он поиск? не, не слышал: http://opencartforum...8c912c84c371af1 как написано в теме Начиная с версии ocStore 0.1.9 данный драйвер включен в состав основного кода то обсуждать нечего? :-) Надіслати Поділитися на інших сайтах More sharing options... Yoda Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Ля. напали... Лучше подробнее расскажите как в маженте генерация временных таблиц организована. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 извиняйте, если слишком грубо выглядит сообщение :-( очень смутило, что ссылка на opencart.com, а не наша внутренняя. обсуждать есть чего :-) Надіслати Поділитися на інших сайтах More sharing options... Yoda Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Да я тут полночи себе репу чешу, где б костылей еще навставлять... наткнулся, глянул мельком. а тут как раз тему развили... А по делу. Пока что по моим всем наблюдениям.. Попытки по мелочи где то ускорится за счет классических советом по оптимизации запросов.. до одного места. Кешер на респонсе спасает но отчасти. Во первых прегенерация все равно иногда должна происходить. Во вторых если без него страница генерится секунд 10 и начинается регистрация или корзины, покупатели могут сбежать. Глобальные затыки кроются в алгоритмах построения дерева категорий, подсчете кол-ва товаров и выборке самих товаров. И думается мне что надо попробовать сделать временные таблицы и переопределить методы. Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 http://opencartforum...2909#entry22909 Переделал под свои нужды + seo_pro кэшируемый - всё летает. Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Переделал под свои нужды + seo_pro кэшируемый - всё летает. А какая у вас версия ОС? Там в теме ниже freelancer писал про то, что этот алгоритм есть в 1.5.1.3, но я у себя в 1.5.2.1 как-то его не нашел, хотя вроде если он так хорош, почему его не внедрили в последующие версии? Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 А какая у вас версия ОС? Там в теме ниже freelancer писал про то, что этот алгоритм есть в 1.5.1.3, но я у себя в 1.5.2.1 как-то его не нашел, хотя вроде если он так хорош, почему его не внедрили в последующие версии? 1.5.4.1 естественно ocStore Выборка одним запросом дампа категорий и перестройка дерева рекурсией - не самое лучшее решение если дерево категорий сильно увесистое, у меня категорий около сотни так, что терпимо, + кэширование готового результата сильно выручает. Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 (змінено) да чего уж там. может сразу амазон, кластеры и пр. ? я к тому, что у рядового пользователя обычный lamp хостинг(и на котором впрочем есть куда оптимизировать) Змінено 12 березня 2013 користувачем freelancer Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Опять у меня никаких изменений :-) До, без кеша Memory Usage: 8.050377 MB Execution Time: 0.249878 seconds 109 sql queries executed: До, с кешем Memory Usage: 8.006096 MB Execution Time: 0.3022 seconds 68 sql queries executed: После, без кеша Memory Usage: 8.054298 MB Execution Time: 0.292623 seconds 109 sql queries executed: После, с кешем Memory Usage: 8.008942 MB Execution Time: 0.314817 seconds 68 sql queries executed: Измерял новым дебаггером, и о чудо! никаких пятен Разброс в результатах исчез, и цифры стали реальнее. До замены NOW() Cache off: 7.22501 s 7.95 mb logs (2) sql (114) files (95) request (95) Cache on: 3.48739 s 7.95 mb logs (2) sql (73) files (95) request (95) После замены NOW() Cache off: 6.98414 s 7.95 mb logs (2) sql (114) files (95) request (95) Cache on: 3.44409 s 7.95 mb logs (2) sql (73) files (95) request (95) С выключенным кешем выигрыш 0.3 сек очень даже неплохо, как мне кажется Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 К сожалению, дебаггер обрезает запросы, и я еще не понял как их полностью вывести, но если устроят начальные куски их (по идее из них видно, что это за запрос), то вот такая картина (холодный старт): SELECT p.product_id, (SELECT AVG(rating) AS total FROM review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id 0.19743750 s SELECT DISTINCT m.`manufacturer_id`, m.`name` FROM `manufacturer` m LEFT JOIN product p ON(p.manufacturer_id=m.`manufacturer_id`) LEFT JOIN product_to_category p2c ON(p.product_id=p2c.product_id) LEFT JOIN product_to_store p2s ON(p.product_id=p2s.product_id) WHERE p.status = '1' AND p.date_availa 0.10013175 s SELECT DISTINCT pa.text, a.`attribute_id`, ad.`name`, ag.attribute_group_id, agd.name as attribute_group_name FROM `product_attribute` pa LEFT JOIN attribute a ON(pa.attribute_id=a.`attribute_id`) LEFT JOIN attribute_description ad ON(a.attribute_id=ad.`attribute_id`) LEFT JOIN attribute_group ag 0.56159700 s SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT price FROM product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '8' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < '2013-03-12 23:59:59') AND (pd2.date_end = ' 0.01184400 s Последний запрос повторяется столько раз, сколько товаров выводится (у меня 12), и каждый раз так же медленно выполняется. Страница категории, 12 товаров на страницу, из модулей только список категорий в шапке и сбоку (всего пара десятков, без подсчета), ну и фильтрпро с фильтрацией по цене, производителю и одной единственной группе атрибутов (тип товара). Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 (змінено) 1. Последний запрос можно выполнить 1 раз. Если сначала собрать массив product_id, а потом сделать WHERE product_id IN (...) 2. По атрибутам тяжеленький запрос получился. А где он вызывается? В модуле фильтра? 1. Наверное да, но тогда ведь теряется совместимость с версиями (хотя мне уже не страшно :-)) 2. Да, это функция getAttributesByCategoryId так резвится Скорее всего из-за кол-ва товаров в категории (4К), потому что самих уникальных атрибутов там 10 шт во всего 1-й группе. P.S. Скоро попробую изменения с вашей статьи снова прикрутить к движку, и перемерять результаты, а то старый дебаггер оказывается врал, а вот новый вроде ничего P.P.S. Подумал, что о совместимости в теме про оптимизацию вообще нет смысла говорить - либо оптимизируем, либо радуемся новым обновлениям НЕоптимизированного медленного движка :-) Змінено 12 березня 2013 користувачем RGB Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 RGB, запустите db_log на холодную, походите по тормозным местам и скиньте мне дам если будет время. либо саму базу(без заказов, пользователей и прочих секретных данных) я сейчас как раз занят такими проблемами Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 Для ускорения производительности прибегают в основном к кэшированию. Действенный способ, спору нет. Но давайте обсудим те моменты, которые НЕ стоит кэшировать: 1. Не стоит кэшировать весь контент страницы, так как nginx уже кэширует; 2. Не стоит кэшировать SQL-запросы, так как MySQL уже кэширует; 3. Разумно используйте файловый кэш OpenCart, так как при очень большом кол-ве файлов в папке system/cache/ будет тормозить из-за особенностей файловой системы; 1. nginx не везде, более того он вообще встречается в малых количествах на шаред хостингах, если не шаред хостинг и есть возможность рулить ПО на нём, то вообще к чему вопрос про кэшировние если всё лечится путём вливания денег в железо, смены СУБД/ПО, кластеризации и тд. 2. Если у Вас нет возможности рулить настройками MySQL (query_cache_size, query_cache_limit и тд) вкупе с достаточно имеющимся кол-вом физ. RAM, то толку от кэширования MySQL будет не много. 3. Здесь важно знать этот самый размер, "при очень большом кол-ве файлов" - сколько именно, какая ФС, какое железо, какой RAID? Надіслати Поділитися на інших сайтах More sharing options... vikingshop Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 обновление товаров раз в сутки ?! а оно надо если склад ведётся по магазину? Если будет обновление кол-ва товара - то запрос выпадет из кеша как бэ :) Просто так mysql вообще этот кусок у вас не будет кешировать... Кто на VDSах/виртуалах отпишите в ТП пусть на серваках в noatime перемаунтят диски где mysql (на время хотябы) и посмотрите на время исполнения :) Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 Вперед Сторінка 3 з 6 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Схожі публікації Дублируються запросы в базу данных. Автор: mario512, 6 вересня 2022 mysql opencart (і ще %d) Теги: mysql opencart птн пнх 4 відповіді 753 перегляди mario512 6 вересня 2022 работа с базой данных Автор: AlexMax13, 1 серпня 2022 база данных mysql 8 відповідей 1 218 переглядів diterknobloch 27 лютого 2023 Модуль SQL менеджер SQL Buddy [Поддержка] 1 2 Автор: sv2109, 26 липня 2013 mysql 32 відповіді 7 030 переглядів PetrSemenov 29 жовтня 2017 Кто какой программой пользуется для SQL Автор: multitask85, 10 лютого 2022 mysql 20 відповідей 1 538 переглядів clarionio 22 березня 2022 кириллица в б/д Автор: satt, 8 лютого 2022 mysql utf-8 0 відповідей 479 переглядів satt 8 лютого 2022 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Оптимизация движка под 120 000 товаров Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 И если он поиск? не, не слышал: http://opencartforum...8c912c84c371af1 как написано в теме Начиная с версии ocStore 0.1.9 данный драйвер включен в состав основного кода то обсуждать нечего? :-) Надіслати Поділитися на інших сайтах More sharing options... Yoda Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Ля. напали... Лучше подробнее расскажите как в маженте генерация временных таблиц организована. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 извиняйте, если слишком грубо выглядит сообщение :-( очень смутило, что ссылка на opencart.com, а не наша внутренняя. обсуждать есть чего :-) Надіслати Поділитися на інших сайтах More sharing options... Yoda Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Да я тут полночи себе репу чешу, где б костылей еще навставлять... наткнулся, глянул мельком. а тут как раз тему развили... А по делу. Пока что по моим всем наблюдениям.. Попытки по мелочи где то ускорится за счет классических советом по оптимизации запросов.. до одного места. Кешер на респонсе спасает но отчасти. Во первых прегенерация все равно иногда должна происходить. Во вторых если без него страница генерится секунд 10 и начинается регистрация или корзины, покупатели могут сбежать. Глобальные затыки кроются в алгоритмах построения дерева категорий, подсчете кол-ва товаров и выборке самих товаров. И думается мне что надо попробовать сделать временные таблицы и переопределить методы. Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 http://opencartforum...2909#entry22909 Переделал под свои нужды + seo_pro кэшируемый - всё летает. Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Переделал под свои нужды + seo_pro кэшируемый - всё летает. А какая у вас версия ОС? Там в теме ниже freelancer писал про то, что этот алгоритм есть в 1.5.1.3, но я у себя в 1.5.2.1 как-то его не нашел, хотя вроде если он так хорош, почему его не внедрили в последующие версии? Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 А какая у вас версия ОС? Там в теме ниже freelancer писал про то, что этот алгоритм есть в 1.5.1.3, но я у себя в 1.5.2.1 как-то его не нашел, хотя вроде если он так хорош, почему его не внедрили в последующие версии? 1.5.4.1 естественно ocStore Выборка одним запросом дампа категорий и перестройка дерева рекурсией - не самое лучшее решение если дерево категорий сильно увесистое, у меня категорий около сотни так, что терпимо, + кэширование готового результата сильно выручает. Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 (змінено) да чего уж там. может сразу амазон, кластеры и пр. ? я к тому, что у рядового пользователя обычный lamp хостинг(и на котором впрочем есть куда оптимизировать) Змінено 12 березня 2013 користувачем freelancer Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Опять у меня никаких изменений :-) До, без кеша Memory Usage: 8.050377 MB Execution Time: 0.249878 seconds 109 sql queries executed: До, с кешем Memory Usage: 8.006096 MB Execution Time: 0.3022 seconds 68 sql queries executed: После, без кеша Memory Usage: 8.054298 MB Execution Time: 0.292623 seconds 109 sql queries executed: После, с кешем Memory Usage: 8.008942 MB Execution Time: 0.314817 seconds 68 sql queries executed: Измерял новым дебаггером, и о чудо! никаких пятен Разброс в результатах исчез, и цифры стали реальнее. До замены NOW() Cache off: 7.22501 s 7.95 mb logs (2) sql (114) files (95) request (95) Cache on: 3.48739 s 7.95 mb logs (2) sql (73) files (95) request (95) После замены NOW() Cache off: 6.98414 s 7.95 mb logs (2) sql (114) files (95) request (95) Cache on: 3.44409 s 7.95 mb logs (2) sql (73) files (95) request (95) С выключенным кешем выигрыш 0.3 сек очень даже неплохо, как мне кажется Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 К сожалению, дебаггер обрезает запросы, и я еще не понял как их полностью вывести, но если устроят начальные куски их (по идее из них видно, что это за запрос), то вот такая картина (холодный старт): SELECT p.product_id, (SELECT AVG(rating) AS total FROM review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id 0.19743750 s SELECT DISTINCT m.`manufacturer_id`, m.`name` FROM `manufacturer` m LEFT JOIN product p ON(p.manufacturer_id=m.`manufacturer_id`) LEFT JOIN product_to_category p2c ON(p.product_id=p2c.product_id) LEFT JOIN product_to_store p2s ON(p.product_id=p2s.product_id) WHERE p.status = '1' AND p.date_availa 0.10013175 s SELECT DISTINCT pa.text, a.`attribute_id`, ad.`name`, ag.attribute_group_id, agd.name as attribute_group_name FROM `product_attribute` pa LEFT JOIN attribute a ON(pa.attribute_id=a.`attribute_id`) LEFT JOIN attribute_description ad ON(a.attribute_id=ad.`attribute_id`) LEFT JOIN attribute_group ag 0.56159700 s SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT price FROM product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '8' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < '2013-03-12 23:59:59') AND (pd2.date_end = ' 0.01184400 s Последний запрос повторяется столько раз, сколько товаров выводится (у меня 12), и каждый раз так же медленно выполняется. Страница категории, 12 товаров на страницу, из модулей только список категорий в шапке и сбоку (всего пара десятков, без подсчета), ну и фильтрпро с фильтрацией по цене, производителю и одной единственной группе атрибутов (тип товара). Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 (змінено) 1. Последний запрос можно выполнить 1 раз. Если сначала собрать массив product_id, а потом сделать WHERE product_id IN (...) 2. По атрибутам тяжеленький запрос получился. А где он вызывается? В модуле фильтра? 1. Наверное да, но тогда ведь теряется совместимость с версиями (хотя мне уже не страшно :-)) 2. Да, это функция getAttributesByCategoryId так резвится Скорее всего из-за кол-ва товаров в категории (4К), потому что самих уникальных атрибутов там 10 шт во всего 1-й группе. P.S. Скоро попробую изменения с вашей статьи снова прикрутить к движку, и перемерять результаты, а то старый дебаггер оказывается врал, а вот новый вроде ничего P.P.S. Подумал, что о совместимости в теме про оптимизацию вообще нет смысла говорить - либо оптимизируем, либо радуемся новым обновлениям НЕоптимизированного медленного движка :-) Змінено 12 березня 2013 користувачем RGB Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 RGB, запустите db_log на холодную, походите по тормозным местам и скиньте мне дам если будет время. либо саму базу(без заказов, пользователей и прочих секретных данных) я сейчас как раз занят такими проблемами Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 Для ускорения производительности прибегают в основном к кэшированию. Действенный способ, спору нет. Но давайте обсудим те моменты, которые НЕ стоит кэшировать: 1. Не стоит кэшировать весь контент страницы, так как nginx уже кэширует; 2. Не стоит кэшировать SQL-запросы, так как MySQL уже кэширует; 3. Разумно используйте файловый кэш OpenCart, так как при очень большом кол-ве файлов в папке system/cache/ будет тормозить из-за особенностей файловой системы; 1. nginx не везде, более того он вообще встречается в малых количествах на шаред хостингах, если не шаред хостинг и есть возможность рулить ПО на нём, то вообще к чему вопрос про кэшировние если всё лечится путём вливания денег в железо, смены СУБД/ПО, кластеризации и тд. 2. Если у Вас нет возможности рулить настройками MySQL (query_cache_size, query_cache_limit и тд) вкупе с достаточно имеющимся кол-вом физ. RAM, то толку от кэширования MySQL будет не много. 3. Здесь важно знать этот самый размер, "при очень большом кол-ве файлов" - сколько именно, какая ФС, какое железо, какой RAID? Надіслати Поділитися на інших сайтах More sharing options... vikingshop Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 обновление товаров раз в сутки ?! а оно надо если склад ведётся по магазину? Если будет обновление кол-ва товара - то запрос выпадет из кеша как бэ :) Просто так mysql вообще этот кусок у вас не будет кешировать... Кто на VDSах/виртуалах отпишите в ТП пусть на серваках в noatime перемаунтят диски где mysql (на время хотябы) и посмотрите на время исполнения :) Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 Вперед Сторінка 3 з 6 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Схожі публікації Дублируються запросы в базу данных. Автор: mario512, 6 вересня 2022 mysql opencart (і ще %d) Теги: mysql opencart птн пнх 4 відповіді 753 перегляди mario512 6 вересня 2022 работа с базой данных Автор: AlexMax13, 1 серпня 2022 база данных mysql 8 відповідей 1 218 переглядів diterknobloch 27 лютого 2023 Модуль SQL менеджер SQL Buddy [Поддержка] 1 2 Автор: sv2109, 26 липня 2013 mysql 32 відповіді 7 030 переглядів PetrSemenov 29 жовтня 2017 Кто какой программой пользуется для SQL Автор: multitask85, 10 лютого 2022 mysql 20 відповідей 1 538 переглядів clarionio 22 березня 2022 кириллица в б/д Автор: satt, 8 лютого 2022 mysql utf-8 0 відповідей 479 переглядів satt 8 лютого 2022 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Оптимизация движка под 120 000 товаров Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Yoda Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Ля. напали... Лучше подробнее расскажите как в маженте генерация временных таблиц организована. Надіслати Поділитися на інших сайтах More sharing options...
afwollis Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 извиняйте, если слишком грубо выглядит сообщение :-( очень смутило, что ссылка на opencart.com, а не наша внутренняя. обсуждать есть чего :-) Надіслати Поділитися на інших сайтах More sharing options... Yoda Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Да я тут полночи себе репу чешу, где б костылей еще навставлять... наткнулся, глянул мельком. а тут как раз тему развили... А по делу. Пока что по моим всем наблюдениям.. Попытки по мелочи где то ускорится за счет классических советом по оптимизации запросов.. до одного места. Кешер на респонсе спасает но отчасти. Во первых прегенерация все равно иногда должна происходить. Во вторых если без него страница генерится секунд 10 и начинается регистрация или корзины, покупатели могут сбежать. Глобальные затыки кроются в алгоритмах построения дерева категорий, подсчете кол-ва товаров и выборке самих товаров. И думается мне что надо попробовать сделать временные таблицы и переопределить методы. Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 http://opencartforum...2909#entry22909 Переделал под свои нужды + seo_pro кэшируемый - всё летает. Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Переделал под свои нужды + seo_pro кэшируемый - всё летает. А какая у вас версия ОС? Там в теме ниже freelancer писал про то, что этот алгоритм есть в 1.5.1.3, но я у себя в 1.5.2.1 как-то его не нашел, хотя вроде если он так хорош, почему его не внедрили в последующие версии? Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 А какая у вас версия ОС? Там в теме ниже freelancer писал про то, что этот алгоритм есть в 1.5.1.3, но я у себя в 1.5.2.1 как-то его не нашел, хотя вроде если он так хорош, почему его не внедрили в последующие версии? 1.5.4.1 естественно ocStore Выборка одним запросом дампа категорий и перестройка дерева рекурсией - не самое лучшее решение если дерево категорий сильно увесистое, у меня категорий около сотни так, что терпимо, + кэширование готового результата сильно выручает. Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 (змінено) да чего уж там. может сразу амазон, кластеры и пр. ? я к тому, что у рядового пользователя обычный lamp хостинг(и на котором впрочем есть куда оптимизировать) Змінено 12 березня 2013 користувачем freelancer Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Опять у меня никаких изменений :-) До, без кеша Memory Usage: 8.050377 MB Execution Time: 0.249878 seconds 109 sql queries executed: До, с кешем Memory Usage: 8.006096 MB Execution Time: 0.3022 seconds 68 sql queries executed: После, без кеша Memory Usage: 8.054298 MB Execution Time: 0.292623 seconds 109 sql queries executed: После, с кешем Memory Usage: 8.008942 MB Execution Time: 0.314817 seconds 68 sql queries executed: Измерял новым дебаггером, и о чудо! никаких пятен Разброс в результатах исчез, и цифры стали реальнее. До замены NOW() Cache off: 7.22501 s 7.95 mb logs (2) sql (114) files (95) request (95) Cache on: 3.48739 s 7.95 mb logs (2) sql (73) files (95) request (95) После замены NOW() Cache off: 6.98414 s 7.95 mb logs (2) sql (114) files (95) request (95) Cache on: 3.44409 s 7.95 mb logs (2) sql (73) files (95) request (95) С выключенным кешем выигрыш 0.3 сек очень даже неплохо, как мне кажется Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 К сожалению, дебаггер обрезает запросы, и я еще не понял как их полностью вывести, но если устроят начальные куски их (по идее из них видно, что это за запрос), то вот такая картина (холодный старт): SELECT p.product_id, (SELECT AVG(rating) AS total FROM review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id 0.19743750 s SELECT DISTINCT m.`manufacturer_id`, m.`name` FROM `manufacturer` m LEFT JOIN product p ON(p.manufacturer_id=m.`manufacturer_id`) LEFT JOIN product_to_category p2c ON(p.product_id=p2c.product_id) LEFT JOIN product_to_store p2s ON(p.product_id=p2s.product_id) WHERE p.status = '1' AND p.date_availa 0.10013175 s SELECT DISTINCT pa.text, a.`attribute_id`, ad.`name`, ag.attribute_group_id, agd.name as attribute_group_name FROM `product_attribute` pa LEFT JOIN attribute a ON(pa.attribute_id=a.`attribute_id`) LEFT JOIN attribute_description ad ON(a.attribute_id=ad.`attribute_id`) LEFT JOIN attribute_group ag 0.56159700 s SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT price FROM product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '8' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < '2013-03-12 23:59:59') AND (pd2.date_end = ' 0.01184400 s Последний запрос повторяется столько раз, сколько товаров выводится (у меня 12), и каждый раз так же медленно выполняется. Страница категории, 12 товаров на страницу, из модулей только список категорий в шапке и сбоку (всего пара десятков, без подсчета), ну и фильтрпро с фильтрацией по цене, производителю и одной единственной группе атрибутов (тип товара). Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 (змінено) 1. Последний запрос можно выполнить 1 раз. Если сначала собрать массив product_id, а потом сделать WHERE product_id IN (...) 2. По атрибутам тяжеленький запрос получился. А где он вызывается? В модуле фильтра? 1. Наверное да, но тогда ведь теряется совместимость с версиями (хотя мне уже не страшно :-)) 2. Да, это функция getAttributesByCategoryId так резвится Скорее всего из-за кол-ва товаров в категории (4К), потому что самих уникальных атрибутов там 10 шт во всего 1-й группе. P.S. Скоро попробую изменения с вашей статьи снова прикрутить к движку, и перемерять результаты, а то старый дебаггер оказывается врал, а вот новый вроде ничего P.P.S. Подумал, что о совместимости в теме про оптимизацию вообще нет смысла говорить - либо оптимизируем, либо радуемся новым обновлениям НЕоптимизированного медленного движка :-) Змінено 12 березня 2013 користувачем RGB Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 RGB, запустите db_log на холодную, походите по тормозным местам и скиньте мне дам если будет время. либо саму базу(без заказов, пользователей и прочих секретных данных) я сейчас как раз занят такими проблемами Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 Для ускорения производительности прибегают в основном к кэшированию. Действенный способ, спору нет. Но давайте обсудим те моменты, которые НЕ стоит кэшировать: 1. Не стоит кэшировать весь контент страницы, так как nginx уже кэширует; 2. Не стоит кэшировать SQL-запросы, так как MySQL уже кэширует; 3. Разумно используйте файловый кэш OpenCart, так как при очень большом кол-ве файлов в папке system/cache/ будет тормозить из-за особенностей файловой системы; 1. nginx не везде, более того он вообще встречается в малых количествах на шаред хостингах, если не шаред хостинг и есть возможность рулить ПО на нём, то вообще к чему вопрос про кэшировние если всё лечится путём вливания денег в железо, смены СУБД/ПО, кластеризации и тд. 2. Если у Вас нет возможности рулить настройками MySQL (query_cache_size, query_cache_limit и тд) вкупе с достаточно имеющимся кол-вом физ. RAM, то толку от кэширования MySQL будет не много. 3. Здесь важно знать этот самый размер, "при очень большом кол-ве файлов" - сколько именно, какая ФС, какое железо, какой RAID? Надіслати Поділитися на інших сайтах More sharing options... vikingshop Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 обновление товаров раз в сутки ?! а оно надо если склад ведётся по магазину? Если будет обновление кол-ва товара - то запрос выпадет из кеша как бэ :) Просто так mysql вообще этот кусок у вас не будет кешировать... Кто на VDSах/виртуалах отпишите в ТП пусть на серваках в noatime перемаунтят диски где mysql (на время хотябы) и посмотрите на время исполнения :) Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 Вперед Сторінка 3 з 6 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Схожі публікації Дублируються запросы в базу данных. Автор: mario512, 6 вересня 2022 mysql opencart (і ще %d) Теги: mysql opencart птн пнх 4 відповіді 753 перегляди mario512 6 вересня 2022 работа с базой данных Автор: AlexMax13, 1 серпня 2022 база данных mysql 8 відповідей 1 218 переглядів diterknobloch 27 лютого 2023 Модуль SQL менеджер SQL Buddy [Поддержка] 1 2 Автор: sv2109, 26 липня 2013 mysql 32 відповіді 7 030 переглядів PetrSemenov 29 жовтня 2017 Кто какой программой пользуется для SQL Автор: multitask85, 10 лютого 2022 mysql 20 відповідей 1 538 переглядів clarionio 22 березня 2022 кириллица в б/д Автор: satt, 8 лютого 2022 mysql utf-8 0 відповідей 479 переглядів satt 8 лютого 2022 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Оптимизация движка под 120 000 товаров Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Yoda Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Да я тут полночи себе репу чешу, где б костылей еще навставлять... наткнулся, глянул мельком. а тут как раз тему развили... А по делу. Пока что по моим всем наблюдениям.. Попытки по мелочи где то ускорится за счет классических советом по оптимизации запросов.. до одного места. Кешер на респонсе спасает но отчасти. Во первых прегенерация все равно иногда должна происходить. Во вторых если без него страница генерится секунд 10 и начинается регистрация или корзины, покупатели могут сбежать. Глобальные затыки кроются в алгоритмах построения дерева категорий, подсчете кол-ва товаров и выборке самих товаров. И думается мне что надо попробовать сделать временные таблицы и переопределить методы. Надіслати Поділитися на інших сайтах More sharing options...
costas Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 http://opencartforum...2909#entry22909 Переделал под свои нужды + seo_pro кэшируемый - всё летает. Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Переделал под свои нужды + seo_pro кэшируемый - всё летает. А какая у вас версия ОС? Там в теме ниже freelancer писал про то, что этот алгоритм есть в 1.5.1.3, но я у себя в 1.5.2.1 как-то его не нашел, хотя вроде если он так хорош, почему его не внедрили в последующие версии? Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 А какая у вас версия ОС? Там в теме ниже freelancer писал про то, что этот алгоритм есть в 1.5.1.3, но я у себя в 1.5.2.1 как-то его не нашел, хотя вроде если он так хорош, почему его не внедрили в последующие версии? 1.5.4.1 естественно ocStore Выборка одним запросом дампа категорий и перестройка дерева рекурсией - не самое лучшее решение если дерево категорий сильно увесистое, у меня категорий около сотни так, что терпимо, + кэширование готового результата сильно выручает. Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 (змінено) да чего уж там. может сразу амазон, кластеры и пр. ? я к тому, что у рядового пользователя обычный lamp хостинг(и на котором впрочем есть куда оптимизировать) Змінено 12 березня 2013 користувачем freelancer Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Опять у меня никаких изменений :-) До, без кеша Memory Usage: 8.050377 MB Execution Time: 0.249878 seconds 109 sql queries executed: До, с кешем Memory Usage: 8.006096 MB Execution Time: 0.3022 seconds 68 sql queries executed: После, без кеша Memory Usage: 8.054298 MB Execution Time: 0.292623 seconds 109 sql queries executed: После, с кешем Memory Usage: 8.008942 MB Execution Time: 0.314817 seconds 68 sql queries executed: Измерял новым дебаггером, и о чудо! никаких пятен Разброс в результатах исчез, и цифры стали реальнее. До замены NOW() Cache off: 7.22501 s 7.95 mb logs (2) sql (114) files (95) request (95) Cache on: 3.48739 s 7.95 mb logs (2) sql (73) files (95) request (95) После замены NOW() Cache off: 6.98414 s 7.95 mb logs (2) sql (114) files (95) request (95) Cache on: 3.44409 s 7.95 mb logs (2) sql (73) files (95) request (95) С выключенным кешем выигрыш 0.3 сек очень даже неплохо, как мне кажется Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 К сожалению, дебаггер обрезает запросы, и я еще не понял как их полностью вывести, но если устроят начальные куски их (по идее из них видно, что это за запрос), то вот такая картина (холодный старт): SELECT p.product_id, (SELECT AVG(rating) AS total FROM review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id 0.19743750 s SELECT DISTINCT m.`manufacturer_id`, m.`name` FROM `manufacturer` m LEFT JOIN product p ON(p.manufacturer_id=m.`manufacturer_id`) LEFT JOIN product_to_category p2c ON(p.product_id=p2c.product_id) LEFT JOIN product_to_store p2s ON(p.product_id=p2s.product_id) WHERE p.status = '1' AND p.date_availa 0.10013175 s SELECT DISTINCT pa.text, a.`attribute_id`, ad.`name`, ag.attribute_group_id, agd.name as attribute_group_name FROM `product_attribute` pa LEFT JOIN attribute a ON(pa.attribute_id=a.`attribute_id`) LEFT JOIN attribute_description ad ON(a.attribute_id=ad.`attribute_id`) LEFT JOIN attribute_group ag 0.56159700 s SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT price FROM product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '8' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < '2013-03-12 23:59:59') AND (pd2.date_end = ' 0.01184400 s Последний запрос повторяется столько раз, сколько товаров выводится (у меня 12), и каждый раз так же медленно выполняется. Страница категории, 12 товаров на страницу, из модулей только список категорий в шапке и сбоку (всего пара десятков, без подсчета), ну и фильтрпро с фильтрацией по цене, производителю и одной единственной группе атрибутов (тип товара). Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 (змінено) 1. Последний запрос можно выполнить 1 раз. Если сначала собрать массив product_id, а потом сделать WHERE product_id IN (...) 2. По атрибутам тяжеленький запрос получился. А где он вызывается? В модуле фильтра? 1. Наверное да, но тогда ведь теряется совместимость с версиями (хотя мне уже не страшно :-)) 2. Да, это функция getAttributesByCategoryId так резвится Скорее всего из-за кол-ва товаров в категории (4К), потому что самих уникальных атрибутов там 10 шт во всего 1-й группе. P.S. Скоро попробую изменения с вашей статьи снова прикрутить к движку, и перемерять результаты, а то старый дебаггер оказывается врал, а вот новый вроде ничего P.P.S. Подумал, что о совместимости в теме про оптимизацию вообще нет смысла говорить - либо оптимизируем, либо радуемся новым обновлениям НЕоптимизированного медленного движка :-) Змінено 12 березня 2013 користувачем RGB Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 RGB, запустите db_log на холодную, походите по тормозным местам и скиньте мне дам если будет время. либо саму базу(без заказов, пользователей и прочих секретных данных) я сейчас как раз занят такими проблемами Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 Для ускорения производительности прибегают в основном к кэшированию. Действенный способ, спору нет. Но давайте обсудим те моменты, которые НЕ стоит кэшировать: 1. Не стоит кэшировать весь контент страницы, так как nginx уже кэширует; 2. Не стоит кэшировать SQL-запросы, так как MySQL уже кэширует; 3. Разумно используйте файловый кэш OpenCart, так как при очень большом кол-ве файлов в папке system/cache/ будет тормозить из-за особенностей файловой системы; 1. nginx не везде, более того он вообще встречается в малых количествах на шаред хостингах, если не шаред хостинг и есть возможность рулить ПО на нём, то вообще к чему вопрос про кэшировние если всё лечится путём вливания денег в железо, смены СУБД/ПО, кластеризации и тд. 2. Если у Вас нет возможности рулить настройками MySQL (query_cache_size, query_cache_limit и тд) вкупе с достаточно имеющимся кол-вом физ. RAM, то толку от кэширования MySQL будет не много. 3. Здесь важно знать этот самый размер, "при очень большом кол-ве файлов" - сколько именно, какая ФС, какое железо, какой RAID? Надіслати Поділитися на інших сайтах More sharing options... vikingshop Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 обновление товаров раз в сутки ?! а оно надо если склад ведётся по магазину? Если будет обновление кол-ва товара - то запрос выпадет из кеша как бэ :) Просто так mysql вообще этот кусок у вас не будет кешировать... Кто на VDSах/виртуалах отпишите в ТП пусть на серваках в noatime перемаунтят диски где mysql (на время хотябы) и посмотрите на время исполнения :) Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 Вперед Сторінка 3 з 6 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Схожі публікації Дублируються запросы в базу данных. Автор: mario512, 6 вересня 2022 mysql opencart (і ще %d) Теги: mysql opencart птн пнх 4 відповіді 753 перегляди mario512 6 вересня 2022 работа с базой данных Автор: AlexMax13, 1 серпня 2022 база данных mysql 8 відповідей 1 218 переглядів diterknobloch 27 лютого 2023 Модуль SQL менеджер SQL Buddy [Поддержка] 1 2 Автор: sv2109, 26 липня 2013 mysql 32 відповіді 7 030 переглядів PetrSemenov 29 жовтня 2017 Кто какой программой пользуется для SQL Автор: multitask85, 10 лютого 2022 mysql 20 відповідей 1 538 переглядів clarionio 22 березня 2022 кириллица в б/д Автор: satt, 8 лютого 2022 mysql utf-8 0 відповідей 479 переглядів satt 8 лютого 2022 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Оптимизация движка под 120 000 товаров Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Переделал под свои нужды + seo_pro кэшируемый - всё летает. А какая у вас версия ОС? Там в теме ниже freelancer писал про то, что этот алгоритм есть в 1.5.1.3, но я у себя в 1.5.2.1 как-то его не нашел, хотя вроде если он так хорош, почему его не внедрили в последующие версии? Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 А какая у вас версия ОС? Там в теме ниже freelancer писал про то, что этот алгоритм есть в 1.5.1.3, но я у себя в 1.5.2.1 как-то его не нашел, хотя вроде если он так хорош, почему его не внедрили в последующие версии? 1.5.4.1 естественно ocStore Выборка одним запросом дампа категорий и перестройка дерева рекурсией - не самое лучшее решение если дерево категорий сильно увесистое, у меня категорий около сотни так, что терпимо, + кэширование готового результата сильно выручает. Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 (змінено) да чего уж там. может сразу амазон, кластеры и пр. ? я к тому, что у рядового пользователя обычный lamp хостинг(и на котором впрочем есть куда оптимизировать) Змінено 12 березня 2013 користувачем freelancer Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Опять у меня никаких изменений :-) До, без кеша Memory Usage: 8.050377 MB Execution Time: 0.249878 seconds 109 sql queries executed: До, с кешем Memory Usage: 8.006096 MB Execution Time: 0.3022 seconds 68 sql queries executed: После, без кеша Memory Usage: 8.054298 MB Execution Time: 0.292623 seconds 109 sql queries executed: После, с кешем Memory Usage: 8.008942 MB Execution Time: 0.314817 seconds 68 sql queries executed: Измерял новым дебаггером, и о чудо! никаких пятен Разброс в результатах исчез, и цифры стали реальнее. До замены NOW() Cache off: 7.22501 s 7.95 mb logs (2) sql (114) files (95) request (95) Cache on: 3.48739 s 7.95 mb logs (2) sql (73) files (95) request (95) После замены NOW() Cache off: 6.98414 s 7.95 mb logs (2) sql (114) files (95) request (95) Cache on: 3.44409 s 7.95 mb logs (2) sql (73) files (95) request (95) С выключенным кешем выигрыш 0.3 сек очень даже неплохо, как мне кажется Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 К сожалению, дебаггер обрезает запросы, и я еще не понял как их полностью вывести, но если устроят начальные куски их (по идее из них видно, что это за запрос), то вот такая картина (холодный старт): SELECT p.product_id, (SELECT AVG(rating) AS total FROM review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id 0.19743750 s SELECT DISTINCT m.`manufacturer_id`, m.`name` FROM `manufacturer` m LEFT JOIN product p ON(p.manufacturer_id=m.`manufacturer_id`) LEFT JOIN product_to_category p2c ON(p.product_id=p2c.product_id) LEFT JOIN product_to_store p2s ON(p.product_id=p2s.product_id) WHERE p.status = '1' AND p.date_availa 0.10013175 s SELECT DISTINCT pa.text, a.`attribute_id`, ad.`name`, ag.attribute_group_id, agd.name as attribute_group_name FROM `product_attribute` pa LEFT JOIN attribute a ON(pa.attribute_id=a.`attribute_id`) LEFT JOIN attribute_description ad ON(a.attribute_id=ad.`attribute_id`) LEFT JOIN attribute_group ag 0.56159700 s SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT price FROM product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '8' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < '2013-03-12 23:59:59') AND (pd2.date_end = ' 0.01184400 s Последний запрос повторяется столько раз, сколько товаров выводится (у меня 12), и каждый раз так же медленно выполняется. Страница категории, 12 товаров на страницу, из модулей только список категорий в шапке и сбоку (всего пара десятков, без подсчета), ну и фильтрпро с фильтрацией по цене, производителю и одной единственной группе атрибутов (тип товара). Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 (змінено) 1. Последний запрос можно выполнить 1 раз. Если сначала собрать массив product_id, а потом сделать WHERE product_id IN (...) 2. По атрибутам тяжеленький запрос получился. А где он вызывается? В модуле фильтра? 1. Наверное да, но тогда ведь теряется совместимость с версиями (хотя мне уже не страшно :-)) 2. Да, это функция getAttributesByCategoryId так резвится Скорее всего из-за кол-ва товаров в категории (4К), потому что самих уникальных атрибутов там 10 шт во всего 1-й группе. P.S. Скоро попробую изменения с вашей статьи снова прикрутить к движку, и перемерять результаты, а то старый дебаггер оказывается врал, а вот новый вроде ничего P.P.S. Подумал, что о совместимости в теме про оптимизацию вообще нет смысла говорить - либо оптимизируем, либо радуемся новым обновлениям НЕоптимизированного медленного движка :-) Змінено 12 березня 2013 користувачем RGB Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 RGB, запустите db_log на холодную, походите по тормозным местам и скиньте мне дам если будет время. либо саму базу(без заказов, пользователей и прочих секретных данных) я сейчас как раз занят такими проблемами Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 Для ускорения производительности прибегают в основном к кэшированию. Действенный способ, спору нет. Но давайте обсудим те моменты, которые НЕ стоит кэшировать: 1. Не стоит кэшировать весь контент страницы, так как nginx уже кэширует; 2. Не стоит кэшировать SQL-запросы, так как MySQL уже кэширует; 3. Разумно используйте файловый кэш OpenCart, так как при очень большом кол-ве файлов в папке system/cache/ будет тормозить из-за особенностей файловой системы; 1. nginx не везде, более того он вообще встречается в малых количествах на шаред хостингах, если не шаред хостинг и есть возможность рулить ПО на нём, то вообще к чему вопрос про кэшировние если всё лечится путём вливания денег в железо, смены СУБД/ПО, кластеризации и тд. 2. Если у Вас нет возможности рулить настройками MySQL (query_cache_size, query_cache_limit и тд) вкупе с достаточно имеющимся кол-вом физ. RAM, то толку от кэширования MySQL будет не много. 3. Здесь важно знать этот самый размер, "при очень большом кол-ве файлов" - сколько именно, какая ФС, какое железо, какой RAID? Надіслати Поділитися на інших сайтах More sharing options... vikingshop Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 обновление товаров раз в сутки ?! а оно надо если склад ведётся по магазину? Если будет обновление кол-ва товара - то запрос выпадет из кеша как бэ :) Просто так mysql вообще этот кусок у вас не будет кешировать... Кто на VDSах/виртуалах отпишите в ТП пусть на серваках в noatime перемаунтят диски где mysql (на время хотябы) и посмотрите на время исполнения :) Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 Вперед Сторінка 3 з 6 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Схожі публікації Дублируються запросы в базу данных. Автор: mario512, 6 вересня 2022 mysql opencart (і ще %d) Теги: mysql opencart птн пнх 4 відповіді 753 перегляди mario512 6 вересня 2022 работа с базой данных Автор: AlexMax13, 1 серпня 2022 база данных mysql 8 відповідей 1 218 переглядів diterknobloch 27 лютого 2023 Модуль SQL менеджер SQL Buddy [Поддержка] 1 2 Автор: sv2109, 26 липня 2013 mysql 32 відповіді 7 030 переглядів PetrSemenov 29 жовтня 2017 Кто какой программой пользуется для SQL Автор: multitask85, 10 лютого 2022 mysql 20 відповідей 1 538 переглядів clarionio 22 березня 2022 кириллица в б/д Автор: satt, 8 лютого 2022 mysql utf-8 0 відповідей 479 переглядів satt 8 лютого 2022 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Оптимизация движка под 120 000 товаров Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
costas Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 А какая у вас версия ОС? Там в теме ниже freelancer писал про то, что этот алгоритм есть в 1.5.1.3, но я у себя в 1.5.2.1 как-то его не нашел, хотя вроде если он так хорош, почему его не внедрили в последующие версии? 1.5.4.1 естественно ocStore Выборка одним запросом дампа категорий и перестройка дерева рекурсией - не самое лучшее решение если дерево категорий сильно увесистое, у меня категорий около сотни так, что терпимо, + кэширование готового результата сильно выручает. Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 (змінено) да чего уж там. может сразу амазон, кластеры и пр. ? я к тому, что у рядового пользователя обычный lamp хостинг(и на котором впрочем есть куда оптимизировать) Змінено 12 березня 2013 користувачем freelancer Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Опять у меня никаких изменений :-) До, без кеша Memory Usage: 8.050377 MB Execution Time: 0.249878 seconds 109 sql queries executed: До, с кешем Memory Usage: 8.006096 MB Execution Time: 0.3022 seconds 68 sql queries executed: После, без кеша Memory Usage: 8.054298 MB Execution Time: 0.292623 seconds 109 sql queries executed: После, с кешем Memory Usage: 8.008942 MB Execution Time: 0.314817 seconds 68 sql queries executed: Измерял новым дебаггером, и о чудо! никаких пятен Разброс в результатах исчез, и цифры стали реальнее. До замены NOW() Cache off: 7.22501 s 7.95 mb logs (2) sql (114) files (95) request (95) Cache on: 3.48739 s 7.95 mb logs (2) sql (73) files (95) request (95) После замены NOW() Cache off: 6.98414 s 7.95 mb logs (2) sql (114) files (95) request (95) Cache on: 3.44409 s 7.95 mb logs (2) sql (73) files (95) request (95) С выключенным кешем выигрыш 0.3 сек очень даже неплохо, как мне кажется Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 К сожалению, дебаггер обрезает запросы, и я еще не понял как их полностью вывести, но если устроят начальные куски их (по идее из них видно, что это за запрос), то вот такая картина (холодный старт): SELECT p.product_id, (SELECT AVG(rating) AS total FROM review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id 0.19743750 s SELECT DISTINCT m.`manufacturer_id`, m.`name` FROM `manufacturer` m LEFT JOIN product p ON(p.manufacturer_id=m.`manufacturer_id`) LEFT JOIN product_to_category p2c ON(p.product_id=p2c.product_id) LEFT JOIN product_to_store p2s ON(p.product_id=p2s.product_id) WHERE p.status = '1' AND p.date_availa 0.10013175 s SELECT DISTINCT pa.text, a.`attribute_id`, ad.`name`, ag.attribute_group_id, agd.name as attribute_group_name FROM `product_attribute` pa LEFT JOIN attribute a ON(pa.attribute_id=a.`attribute_id`) LEFT JOIN attribute_description ad ON(a.attribute_id=ad.`attribute_id`) LEFT JOIN attribute_group ag 0.56159700 s SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT price FROM product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '8' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < '2013-03-12 23:59:59') AND (pd2.date_end = ' 0.01184400 s Последний запрос повторяется столько раз, сколько товаров выводится (у меня 12), и каждый раз так же медленно выполняется. Страница категории, 12 товаров на страницу, из модулей только список категорий в шапке и сбоку (всего пара десятков, без подсчета), ну и фильтрпро с фильтрацией по цене, производителю и одной единственной группе атрибутов (тип товара). Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 (змінено) 1. Последний запрос можно выполнить 1 раз. Если сначала собрать массив product_id, а потом сделать WHERE product_id IN (...) 2. По атрибутам тяжеленький запрос получился. А где он вызывается? В модуле фильтра? 1. Наверное да, но тогда ведь теряется совместимость с версиями (хотя мне уже не страшно :-)) 2. Да, это функция getAttributesByCategoryId так резвится Скорее всего из-за кол-ва товаров в категории (4К), потому что самих уникальных атрибутов там 10 шт во всего 1-й группе. P.S. Скоро попробую изменения с вашей статьи снова прикрутить к движку, и перемерять результаты, а то старый дебаггер оказывается врал, а вот новый вроде ничего P.P.S. Подумал, что о совместимости в теме про оптимизацию вообще нет смысла говорить - либо оптимизируем, либо радуемся новым обновлениям НЕоптимизированного медленного движка :-) Змінено 12 березня 2013 користувачем RGB Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 RGB, запустите db_log на холодную, походите по тормозным местам и скиньте мне дам если будет время. либо саму базу(без заказов, пользователей и прочих секретных данных) я сейчас как раз занят такими проблемами Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 Для ускорения производительности прибегают в основном к кэшированию. Действенный способ, спору нет. Но давайте обсудим те моменты, которые НЕ стоит кэшировать: 1. Не стоит кэшировать весь контент страницы, так как nginx уже кэширует; 2. Не стоит кэшировать SQL-запросы, так как MySQL уже кэширует; 3. Разумно используйте файловый кэш OpenCart, так как при очень большом кол-ве файлов в папке system/cache/ будет тормозить из-за особенностей файловой системы; 1. nginx не везде, более того он вообще встречается в малых количествах на шаред хостингах, если не шаред хостинг и есть возможность рулить ПО на нём, то вообще к чему вопрос про кэшировние если всё лечится путём вливания денег в железо, смены СУБД/ПО, кластеризации и тд. 2. Если у Вас нет возможности рулить настройками MySQL (query_cache_size, query_cache_limit и тд) вкупе с достаточно имеющимся кол-вом физ. RAM, то толку от кэширования MySQL будет не много. 3. Здесь важно знать этот самый размер, "при очень большом кол-ве файлов" - сколько именно, какая ФС, какое железо, какой RAID? Надіслати Поділитися на інших сайтах More sharing options... vikingshop Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 обновление товаров раз в сутки ?! а оно надо если склад ведётся по магазину? Если будет обновление кол-ва товара - то запрос выпадет из кеша как бэ :) Просто так mysql вообще этот кусок у вас не будет кешировать... Кто на VDSах/виртуалах отпишите в ТП пусть на серваках в noatime перемаунтят диски где mysql (на время хотябы) и посмотрите на время исполнения :) Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 Вперед Сторінка 3 з 6 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Схожі публікації Дублируються запросы в базу данных. Автор: mario512, 6 вересня 2022 mysql opencart (і ще %d) Теги: mysql opencart птн пнх 4 відповіді 753 перегляди mario512 6 вересня 2022 работа с базой данных Автор: AlexMax13, 1 серпня 2022 база данных mysql 8 відповідей 1 218 переглядів diterknobloch 27 лютого 2023 Модуль SQL менеджер SQL Buddy [Поддержка] 1 2 Автор: sv2109, 26 липня 2013 mysql 32 відповіді 7 030 переглядів PetrSemenov 29 жовтня 2017 Кто какой программой пользуется для SQL Автор: multitask85, 10 лютого 2022 mysql 20 відповідей 1 538 переглядів clarionio 22 березня 2022 кириллица в б/д Автор: satt, 8 лютого 2022 mysql utf-8 0 відповідей 479 переглядів satt 8 лютого 2022 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Оптимизация движка под 120 000 товаров Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
freelancer Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 (змінено) да чего уж там. может сразу амазон, кластеры и пр. ? я к тому, что у рядового пользователя обычный lamp хостинг(и на котором впрочем есть куда оптимизировать) Змінено 12 березня 2013 користувачем freelancer Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Опять у меня никаких изменений :-) До, без кеша Memory Usage: 8.050377 MB Execution Time: 0.249878 seconds 109 sql queries executed: До, с кешем Memory Usage: 8.006096 MB Execution Time: 0.3022 seconds 68 sql queries executed: После, без кеша Memory Usage: 8.054298 MB Execution Time: 0.292623 seconds 109 sql queries executed: После, с кешем Memory Usage: 8.008942 MB Execution Time: 0.314817 seconds 68 sql queries executed: Измерял новым дебаггером, и о чудо! никаких пятен Разброс в результатах исчез, и цифры стали реальнее. До замены NOW() Cache off: 7.22501 s 7.95 mb logs (2) sql (114) files (95) request (95) Cache on: 3.48739 s 7.95 mb logs (2) sql (73) files (95) request (95) После замены NOW() Cache off: 6.98414 s 7.95 mb logs (2) sql (114) files (95) request (95) Cache on: 3.44409 s 7.95 mb logs (2) sql (73) files (95) request (95) С выключенным кешем выигрыш 0.3 сек очень даже неплохо, как мне кажется Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 К сожалению, дебаггер обрезает запросы, и я еще не понял как их полностью вывести, но если устроят начальные куски их (по идее из них видно, что это за запрос), то вот такая картина (холодный старт): SELECT p.product_id, (SELECT AVG(rating) AS total FROM review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id 0.19743750 s SELECT DISTINCT m.`manufacturer_id`, m.`name` FROM `manufacturer` m LEFT JOIN product p ON(p.manufacturer_id=m.`manufacturer_id`) LEFT JOIN product_to_category p2c ON(p.product_id=p2c.product_id) LEFT JOIN product_to_store p2s ON(p.product_id=p2s.product_id) WHERE p.status = '1' AND p.date_availa 0.10013175 s SELECT DISTINCT pa.text, a.`attribute_id`, ad.`name`, ag.attribute_group_id, agd.name as attribute_group_name FROM `product_attribute` pa LEFT JOIN attribute a ON(pa.attribute_id=a.`attribute_id`) LEFT JOIN attribute_description ad ON(a.attribute_id=ad.`attribute_id`) LEFT JOIN attribute_group ag 0.56159700 s SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT price FROM product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '8' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < '2013-03-12 23:59:59') AND (pd2.date_end = ' 0.01184400 s Последний запрос повторяется столько раз, сколько товаров выводится (у меня 12), и каждый раз так же медленно выполняется. Страница категории, 12 товаров на страницу, из модулей только список категорий в шапке и сбоку (всего пара десятков, без подсчета), ну и фильтрпро с фильтрацией по цене, производителю и одной единственной группе атрибутов (тип товара). Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 (змінено) 1. Последний запрос можно выполнить 1 раз. Если сначала собрать массив product_id, а потом сделать WHERE product_id IN (...) 2. По атрибутам тяжеленький запрос получился. А где он вызывается? В модуле фильтра? 1. Наверное да, но тогда ведь теряется совместимость с версиями (хотя мне уже не страшно :-)) 2. Да, это функция getAttributesByCategoryId так резвится Скорее всего из-за кол-ва товаров в категории (4К), потому что самих уникальных атрибутов там 10 шт во всего 1-й группе. P.S. Скоро попробую изменения с вашей статьи снова прикрутить к движку, и перемерять результаты, а то старый дебаггер оказывается врал, а вот новый вроде ничего P.P.S. Подумал, что о совместимости в теме про оптимизацию вообще нет смысла говорить - либо оптимизируем, либо радуемся новым обновлениям НЕоптимизированного медленного движка :-) Змінено 12 березня 2013 користувачем RGB Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 RGB, запустите db_log на холодную, походите по тормозным местам и скиньте мне дам если будет время. либо саму базу(без заказов, пользователей и прочих секретных данных) я сейчас как раз занят такими проблемами Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 Для ускорения производительности прибегают в основном к кэшированию. Действенный способ, спору нет. Но давайте обсудим те моменты, которые НЕ стоит кэшировать: 1. Не стоит кэшировать весь контент страницы, так как nginx уже кэширует; 2. Не стоит кэшировать SQL-запросы, так как MySQL уже кэширует; 3. Разумно используйте файловый кэш OpenCart, так как при очень большом кол-ве файлов в папке system/cache/ будет тормозить из-за особенностей файловой системы; 1. nginx не везде, более того он вообще встречается в малых количествах на шаред хостингах, если не шаред хостинг и есть возможность рулить ПО на нём, то вообще к чему вопрос про кэшировние если всё лечится путём вливания денег в железо, смены СУБД/ПО, кластеризации и тд. 2. Если у Вас нет возможности рулить настройками MySQL (query_cache_size, query_cache_limit и тд) вкупе с достаточно имеющимся кол-вом физ. RAM, то толку от кэширования MySQL будет не много. 3. Здесь важно знать этот самый размер, "при очень большом кол-ве файлов" - сколько именно, какая ФС, какое железо, какой RAID? Надіслати Поділитися на інших сайтах More sharing options... vikingshop Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 обновление товаров раз в сутки ?! а оно надо если склад ведётся по магазину? Если будет обновление кол-ва товара - то запрос выпадет из кеша как бэ :) Просто так mysql вообще этот кусок у вас не будет кешировать... Кто на VDSах/виртуалах отпишите в ТП пусть на серваках в noatime перемаунтят диски где mysql (на время хотябы) и посмотрите на время исполнения :) Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 Вперед Сторінка 3 з 6 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Схожі публікації Дублируються запросы в базу данных. Автор: mario512, 6 вересня 2022 mysql opencart (і ще %d) Теги: mysql opencart птн пнх 4 відповіді 753 перегляди mario512 6 вересня 2022 работа с базой данных Автор: AlexMax13, 1 серпня 2022 база данных mysql 8 відповідей 1 218 переглядів diterknobloch 27 лютого 2023 Модуль SQL менеджер SQL Buddy [Поддержка] 1 2 Автор: sv2109, 26 липня 2013 mysql 32 відповіді 7 030 переглядів PetrSemenov 29 жовтня 2017 Кто какой программой пользуется для SQL Автор: multitask85, 10 лютого 2022 mysql 20 відповідей 1 538 переглядів clarionio 22 березня 2022 кириллица в б/д Автор: satt, 8 лютого 2022 mysql utf-8 0 відповідей 479 переглядів satt 8 лютого 2022 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Оптимизация движка под 120 000 товаров Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 Опять у меня никаких изменений :-) До, без кеша Memory Usage: 8.050377 MB Execution Time: 0.249878 seconds 109 sql queries executed: До, с кешем Memory Usage: 8.006096 MB Execution Time: 0.3022 seconds 68 sql queries executed: После, без кеша Memory Usage: 8.054298 MB Execution Time: 0.292623 seconds 109 sql queries executed: После, с кешем Memory Usage: 8.008942 MB Execution Time: 0.314817 seconds 68 sql queries executed: Измерял новым дебаггером, и о чудо! никаких пятен Разброс в результатах исчез, и цифры стали реальнее. До замены NOW() Cache off: 7.22501 s 7.95 mb logs (2) sql (114) files (95) request (95) Cache on: 3.48739 s 7.95 mb logs (2) sql (73) files (95) request (95) После замены NOW() Cache off: 6.98414 s 7.95 mb logs (2) sql (114) files (95) request (95) Cache on: 3.44409 s 7.95 mb logs (2) sql (73) files (95) request (95) С выключенным кешем выигрыш 0.3 сек очень даже неплохо, как мне кажется Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 К сожалению, дебаггер обрезает запросы, и я еще не понял как их полностью вывести, но если устроят начальные куски их (по идее из них видно, что это за запрос), то вот такая картина (холодный старт): SELECT p.product_id, (SELECT AVG(rating) AS total FROM review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id 0.19743750 s SELECT DISTINCT m.`manufacturer_id`, m.`name` FROM `manufacturer` m LEFT JOIN product p ON(p.manufacturer_id=m.`manufacturer_id`) LEFT JOIN product_to_category p2c ON(p.product_id=p2c.product_id) LEFT JOIN product_to_store p2s ON(p.product_id=p2s.product_id) WHERE p.status = '1' AND p.date_availa 0.10013175 s SELECT DISTINCT pa.text, a.`attribute_id`, ad.`name`, ag.attribute_group_id, agd.name as attribute_group_name FROM `product_attribute` pa LEFT JOIN attribute a ON(pa.attribute_id=a.`attribute_id`) LEFT JOIN attribute_description ad ON(a.attribute_id=ad.`attribute_id`) LEFT JOIN attribute_group ag 0.56159700 s SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT price FROM product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '8' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < '2013-03-12 23:59:59') AND (pd2.date_end = ' 0.01184400 s Последний запрос повторяется столько раз, сколько товаров выводится (у меня 12), и каждый раз так же медленно выполняется. Страница категории, 12 товаров на страницу, из модулей только список категорий в шапке и сбоку (всего пара десятков, без подсчета), ну и фильтрпро с фильтрацией по цене, производителю и одной единственной группе атрибутов (тип товара). Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 (змінено) 1. Последний запрос можно выполнить 1 раз. Если сначала собрать массив product_id, а потом сделать WHERE product_id IN (...) 2. По атрибутам тяжеленький запрос получился. А где он вызывается? В модуле фильтра? 1. Наверное да, но тогда ведь теряется совместимость с версиями (хотя мне уже не страшно :-)) 2. Да, это функция getAttributesByCategoryId так резвится Скорее всего из-за кол-ва товаров в категории (4К), потому что самих уникальных атрибутов там 10 шт во всего 1-й группе. P.S. Скоро попробую изменения с вашей статьи снова прикрутить к движку, и перемерять результаты, а то старый дебаггер оказывается врал, а вот новый вроде ничего P.P.S. Подумал, что о совместимости в теме про оптимизацию вообще нет смысла говорить - либо оптимизируем, либо радуемся новым обновлениям НЕоптимизированного медленного движка :-) Змінено 12 березня 2013 користувачем RGB Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 RGB, запустите db_log на холодную, походите по тормозным местам и скиньте мне дам если будет время. либо саму базу(без заказов, пользователей и прочих секретных данных) я сейчас как раз занят такими проблемами Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 Для ускорения производительности прибегают в основном к кэшированию. Действенный способ, спору нет. Но давайте обсудим те моменты, которые НЕ стоит кэшировать: 1. Не стоит кэшировать весь контент страницы, так как nginx уже кэширует; 2. Не стоит кэшировать SQL-запросы, так как MySQL уже кэширует; 3. Разумно используйте файловый кэш OpenCart, так как при очень большом кол-ве файлов в папке system/cache/ будет тормозить из-за особенностей файловой системы; 1. nginx не везде, более того он вообще встречается в малых количествах на шаред хостингах, если не шаред хостинг и есть возможность рулить ПО на нём, то вообще к чему вопрос про кэшировние если всё лечится путём вливания денег в железо, смены СУБД/ПО, кластеризации и тд. 2. Если у Вас нет возможности рулить настройками MySQL (query_cache_size, query_cache_limit и тд) вкупе с достаточно имеющимся кол-вом физ. RAM, то толку от кэширования MySQL будет не много. 3. Здесь важно знать этот самый размер, "при очень большом кол-ве файлов" - сколько именно, какая ФС, какое железо, какой RAID? Надіслати Поділитися на інших сайтах More sharing options... vikingshop Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 обновление товаров раз в сутки ?! а оно надо если склад ведётся по магазину? Если будет обновление кол-ва товара - то запрос выпадет из кеша как бэ :) Просто так mysql вообще этот кусок у вас не будет кешировать... Кто на VDSах/виртуалах отпишите в ТП пусть на серваках в noatime перемаунтят диски где mysql (на время хотябы) и посмотрите на время исполнения :) Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 Вперед Сторінка 3 з 6 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Схожі публікації Дублируються запросы в базу данных. Автор: mario512, 6 вересня 2022 mysql opencart (і ще %d) Теги: mysql opencart птн пнх 4 відповіді 753 перегляди mario512 6 вересня 2022 работа с базой данных Автор: AlexMax13, 1 серпня 2022 база данных mysql 8 відповідей 1 218 переглядів diterknobloch 27 лютого 2023 Модуль SQL менеджер SQL Buddy [Поддержка] 1 2 Автор: sv2109, 26 липня 2013 mysql 32 відповіді 7 030 переглядів PetrSemenov 29 жовтня 2017 Кто какой программой пользуется для SQL Автор: multitask85, 10 лютого 2022 mysql 20 відповідей 1 538 переглядів clarionio 22 березня 2022 кириллица в б/д Автор: satt, 8 лютого 2022 mysql utf-8 0 відповідей 479 переглядів satt 8 лютого 2022 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Оптимизация движка под 120 000 товаров Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 К сожалению, дебаггер обрезает запросы, и я еще не понял как их полностью вывести, но если устроят начальные куски их (по идее из них видно, что это за запрос), то вот такая картина (холодный старт): SELECT p.product_id, (SELECT AVG(rating) AS total FROM review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id 0.19743750 s SELECT DISTINCT m.`manufacturer_id`, m.`name` FROM `manufacturer` m LEFT JOIN product p ON(p.manufacturer_id=m.`manufacturer_id`) LEFT JOIN product_to_category p2c ON(p.product_id=p2c.product_id) LEFT JOIN product_to_store p2s ON(p.product_id=p2s.product_id) WHERE p.status = '1' AND p.date_availa 0.10013175 s SELECT DISTINCT pa.text, a.`attribute_id`, ad.`name`, ag.attribute_group_id, agd.name as attribute_group_name FROM `product_attribute` pa LEFT JOIN attribute a ON(pa.attribute_id=a.`attribute_id`) LEFT JOIN attribute_description ad ON(a.attribute_id=ad.`attribute_id`) LEFT JOIN attribute_group ag 0.56159700 s SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT price FROM product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '8' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < '2013-03-12 23:59:59') AND (pd2.date_end = ' 0.01184400 s Последний запрос повторяется столько раз, сколько товаров выводится (у меня 12), и каждый раз так же медленно выполняется. Страница категории, 12 товаров на страницу, из модулей только список категорий в шапке и сбоку (всего пара десятков, без подсчета), ну и фильтрпро с фильтрацией по цене, производителю и одной единственной группе атрибутов (тип товара). Надіслати Поділитися на інших сайтах More sharing options... RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 (змінено) 1. Последний запрос можно выполнить 1 раз. Если сначала собрать массив product_id, а потом сделать WHERE product_id IN (...) 2. По атрибутам тяжеленький запрос получился. А где он вызывается? В модуле фильтра? 1. Наверное да, но тогда ведь теряется совместимость с версиями (хотя мне уже не страшно :-)) 2. Да, это функция getAttributesByCategoryId так резвится Скорее всего из-за кол-ва товаров в категории (4К), потому что самих уникальных атрибутов там 10 шт во всего 1-й группе. P.S. Скоро попробую изменения с вашей статьи снова прикрутить к движку, и перемерять результаты, а то старый дебаггер оказывается врал, а вот новый вроде ничего P.P.S. Подумал, что о совместимости в теме про оптимизацию вообще нет смысла говорить - либо оптимизируем, либо радуемся новым обновлениям НЕоптимизированного медленного движка :-) Змінено 12 березня 2013 користувачем RGB Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 RGB, запустите db_log на холодную, походите по тормозным местам и скиньте мне дам если будет время. либо саму базу(без заказов, пользователей и прочих секретных данных) я сейчас как раз занят такими проблемами Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 Для ускорения производительности прибегают в основном к кэшированию. Действенный способ, спору нет. Но давайте обсудим те моменты, которые НЕ стоит кэшировать: 1. Не стоит кэшировать весь контент страницы, так как nginx уже кэширует; 2. Не стоит кэшировать SQL-запросы, так как MySQL уже кэширует; 3. Разумно используйте файловый кэш OpenCart, так как при очень большом кол-ве файлов в папке system/cache/ будет тормозить из-за особенностей файловой системы; 1. nginx не везде, более того он вообще встречается в малых количествах на шаред хостингах, если не шаред хостинг и есть возможность рулить ПО на нём, то вообще к чему вопрос про кэшировние если всё лечится путём вливания денег в железо, смены СУБД/ПО, кластеризации и тд. 2. Если у Вас нет возможности рулить настройками MySQL (query_cache_size, query_cache_limit и тд) вкупе с достаточно имеющимся кол-вом физ. RAM, то толку от кэширования MySQL будет не много. 3. Здесь важно знать этот самый размер, "при очень большом кол-ве файлов" - сколько именно, какая ФС, какое железо, какой RAID? Надіслати Поділитися на інших сайтах More sharing options... vikingshop Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 обновление товаров раз в сутки ?! а оно надо если склад ведётся по магазину? Если будет обновление кол-ва товара - то запрос выпадет из кеша как бэ :) Просто так mysql вообще этот кусок у вас не будет кешировать... Кто на VDSах/виртуалах отпишите в ТП пусть на серваках в noatime перемаунтят диски где mysql (на время хотябы) и посмотрите на время исполнения :) Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 Вперед Сторінка 3 з 6 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Схожі публікації Дублируються запросы в базу данных. Автор: mario512, 6 вересня 2022 mysql opencart (і ще %d) Теги: mysql opencart птн пнх 4 відповіді 753 перегляди mario512 6 вересня 2022 работа с базой данных Автор: AlexMax13, 1 серпня 2022 база данных mysql 8 відповідей 1 218 переглядів diterknobloch 27 лютого 2023 Модуль SQL менеджер SQL Buddy [Поддержка] 1 2 Автор: sv2109, 26 липня 2013 mysql 32 відповіді 7 030 переглядів PetrSemenov 29 жовтня 2017 Кто какой программой пользуется для SQL Автор: multitask85, 10 лютого 2022 mysql 20 відповідей 1 538 переглядів clarionio 22 березня 2022 кириллица в б/д Автор: satt, 8 лютого 2022 mysql utf-8 0 відповідей 479 переглядів satt 8 лютого 2022 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Оптимизация движка под 120 000 товаров Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich
RGB Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 (змінено) 1. Последний запрос можно выполнить 1 раз. Если сначала собрать массив product_id, а потом сделать WHERE product_id IN (...) 2. По атрибутам тяжеленький запрос получился. А где он вызывается? В модуле фильтра? 1. Наверное да, но тогда ведь теряется совместимость с версиями (хотя мне уже не страшно :-)) 2. Да, это функция getAttributesByCategoryId так резвится Скорее всего из-за кол-ва товаров в категории (4К), потому что самих уникальных атрибутов там 10 шт во всего 1-й группе. P.S. Скоро попробую изменения с вашей статьи снова прикрутить к движку, и перемерять результаты, а то старый дебаггер оказывается врал, а вот новый вроде ничего P.P.S. Подумал, что о совместимости в теме про оптимизацию вообще нет смысла говорить - либо оптимизируем, либо радуемся новым обновлениям НЕоптимизированного медленного движка :-) Змінено 12 березня 2013 користувачем RGB Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 RGB, запустите db_log на холодную, походите по тормозным местам и скиньте мне дам если будет время. либо саму базу(без заказов, пользователей и прочих секретных данных) я сейчас как раз занят такими проблемами Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 Для ускорения производительности прибегают в основном к кэшированию. Действенный способ, спору нет. Но давайте обсудим те моменты, которые НЕ стоит кэшировать: 1. Не стоит кэшировать весь контент страницы, так как nginx уже кэширует; 2. Не стоит кэшировать SQL-запросы, так как MySQL уже кэширует; 3. Разумно используйте файловый кэш OpenCart, так как при очень большом кол-ве файлов в папке system/cache/ будет тормозить из-за особенностей файловой системы; 1. nginx не везде, более того он вообще встречается в малых количествах на шаред хостингах, если не шаред хостинг и есть возможность рулить ПО на нём, то вообще к чему вопрос про кэшировние если всё лечится путём вливания денег в железо, смены СУБД/ПО, кластеризации и тд. 2. Если у Вас нет возможности рулить настройками MySQL (query_cache_size, query_cache_limit и тд) вкупе с достаточно имеющимся кол-вом физ. RAM, то толку от кэширования MySQL будет не много. 3. Здесь важно знать этот самый размер, "при очень большом кол-ве файлов" - сколько именно, какая ФС, какое железо, какой RAID? Надіслати Поділитися на інших сайтах More sharing options... vikingshop Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 обновление товаров раз в сутки ?! а оно надо если склад ведётся по магазину? Если будет обновление кол-ва товара - то запрос выпадет из кеша как бэ :) Просто так mysql вообще этот кусок у вас не будет кешировать... Кто на VDSах/виртуалах отпишите в ТП пусть на серваках в noatime перемаунтят диски где mysql (на время хотябы) и посмотрите на время исполнения :) Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 Вперед Сторінка 3 з 6 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Схожі публікації Дублируються запросы в базу данных. Автор: mario512, 6 вересня 2022 mysql opencart (і ще %d) Теги: mysql opencart птн пнх 4 відповіді 753 перегляди mario512 6 вересня 2022 работа с базой данных Автор: AlexMax13, 1 серпня 2022 база данных mysql 8 відповідей 1 218 переглядів diterknobloch 27 лютого 2023 Модуль SQL менеджер SQL Buddy [Поддержка] 1 2 Автор: sv2109, 26 липня 2013 mysql 32 відповіді 7 030 переглядів PetrSemenov 29 жовтня 2017 Кто какой программой пользуется для SQL Автор: multitask85, 10 лютого 2022 mysql 20 відповідей 1 538 переглядів clarionio 22 березня 2022 кириллица в б/д Автор: satt, 8 лютого 2022 mysql utf-8 0 відповідей 479 переглядів satt 8 лютого 2022 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Оптимизация движка под 120 000 товаров
freelancer Опубліковано: 12 березня 2013 Share Опубліковано: 12 березня 2013 RGB, запустите db_log на холодную, походите по тормозным местам и скиньте мне дам если будет время. либо саму базу(без заказов, пользователей и прочих секретных данных) я сейчас как раз занят такими проблемами Надіслати Поділитися на інших сайтах More sharing options... costas Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 Для ускорения производительности прибегают в основном к кэшированию. Действенный способ, спору нет. Но давайте обсудим те моменты, которые НЕ стоит кэшировать: 1. Не стоит кэшировать весь контент страницы, так как nginx уже кэширует; 2. Не стоит кэшировать SQL-запросы, так как MySQL уже кэширует; 3. Разумно используйте файловый кэш OpenCart, так как при очень большом кол-ве файлов в папке system/cache/ будет тормозить из-за особенностей файловой системы; 1. nginx не везде, более того он вообще встречается в малых количествах на шаред хостингах, если не шаред хостинг и есть возможность рулить ПО на нём, то вообще к чему вопрос про кэшировние если всё лечится путём вливания денег в железо, смены СУБД/ПО, кластеризации и тд. 2. Если у Вас нет возможности рулить настройками MySQL (query_cache_size, query_cache_limit и тд) вкупе с достаточно имеющимся кол-вом физ. RAM, то толку от кэширования MySQL будет не много. 3. Здесь важно знать этот самый размер, "при очень большом кол-ве файлов" - сколько именно, какая ФС, какое железо, какой RAID? Надіслати Поділитися на інших сайтах More sharing options... vikingshop Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 обновление товаров раз в сутки ?! а оно надо если склад ведётся по магазину? Если будет обновление кол-ва товара - то запрос выпадет из кеша как бэ :) Просто так mysql вообще этот кусок у вас не будет кешировать... Кто на VDSах/виртуалах отпишите в ТП пусть на серваках в noatime перемаунтят диски где mysql (на время хотябы) и посмотрите на время исполнения :) Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 Вперед Сторінка 3 з 6 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Схожі публікації Дублируються запросы в базу данных. Автор: mario512, 6 вересня 2022 mysql opencart (і ще %d) Теги: mysql opencart птн пнх 4 відповіді 753 перегляди mario512 6 вересня 2022 работа с базой данных Автор: AlexMax13, 1 серпня 2022 база данных mysql 8 відповідей 1 218 переглядів diterknobloch 27 лютого 2023 Модуль SQL менеджер SQL Buddy [Поддержка] 1 2 Автор: sv2109, 26 липня 2013 mysql 32 відповіді 7 030 переглядів PetrSemenov 29 жовтня 2017 Кто какой программой пользуется для SQL Автор: multitask85, 10 лютого 2022 mysql 20 відповідей 1 538 переглядів clarionio 22 березня 2022 кириллица в б/д Автор: satt, 8 лютого 2022 mysql utf-8 0 відповідей 479 переглядів satt 8 лютого 2022 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку
costas Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 Для ускорения производительности прибегают в основном к кэшированию. Действенный способ, спору нет. Но давайте обсудим те моменты, которые НЕ стоит кэшировать: 1. Не стоит кэшировать весь контент страницы, так как nginx уже кэширует; 2. Не стоит кэшировать SQL-запросы, так как MySQL уже кэширует; 3. Разумно используйте файловый кэш OpenCart, так как при очень большом кол-ве файлов в папке system/cache/ будет тормозить из-за особенностей файловой системы; 1. nginx не везде, более того он вообще встречается в малых количествах на шаред хостингах, если не шаред хостинг и есть возможность рулить ПО на нём, то вообще к чему вопрос про кэшировние если всё лечится путём вливания денег в железо, смены СУБД/ПО, кластеризации и тд. 2. Если у Вас нет возможности рулить настройками MySQL (query_cache_size, query_cache_limit и тд) вкупе с достаточно имеющимся кол-вом физ. RAM, то толку от кэширования MySQL будет не много. 3. Здесь важно знать этот самый размер, "при очень большом кол-ве файлов" - сколько именно, какая ФС, какое железо, какой RAID? Надіслати Поділитися на інших сайтах More sharing options... vikingshop Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 обновление товаров раз в сутки ?! а оно надо если склад ведётся по магазину? Если будет обновление кол-ва товара - то запрос выпадет из кеша как бэ :) Просто так mysql вообще этот кусок у вас не будет кешировать... Кто на VDSах/виртуалах отпишите в ТП пусть на серваках в noatime перемаунтят диски где mysql (на время хотябы) и посмотрите на время исполнения :) Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 Вперед Сторінка 3 з 6 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1
vikingshop Опубліковано: 13 березня 2013 Share Опубліковано: 13 березня 2013 обновление товаров раз в сутки ?! а оно надо если склад ведётся по магазину? Если будет обновление кол-ва товара - то запрос выпадет из кеша как бэ :) Просто так mysql вообще этот кусок у вас не будет кешировать... Кто на VDSах/виртуалах отпишите в ТП пусть на серваках в noatime перемаунтят диски где mysql (на время хотябы) и посмотрите на время исполнения :) Надіслати Поділитися на інших сайтах More sharing options...
Recommended Posts