Доброго времени суток всем! появилась подобная проблема, сайты: http://оптом-оптика.рф и http://salyra.ru До нового года нагрузка на БД была в районе 1000, потом резко упала на несколько дней и была в районе 150-200, но спустя несколько дней выросла до больших аномальных значений 3000-4200. Никаких работ на сайте не проводилось, при выяснении причин обнаружилось следующее:
На двух сайтах настроено логирование медленных запросов.
как такой запрос может выполнятся 2 секунды:
2017-04-08 0:15:11 - 2.015 - SELECT * FROM oc_store WHERE REPLACE(`url`, 'www.', '') = 'http://xn----8sbxihlacfe2af.xn--p1ai/';
Если в таблице oc_store - всего одна запись.
При чём это только на этом сайте выскакивает. И не только на этом простом запросе.
При этом на соседнем сайте с таким же движком, это проблемы нет.
При этом нагрузка на CPUкоррелирует с посещаемостью сайта (Ночная от дневной отличается в 10 раз).
А нагрузка MySQL проктически постоянна, за некоторыми исключениями. И практически не зависит от посещаемости.
Нагрузка смотрелась по AWStats.
При это ни каких действий по cron на сайте не выполняется.
Ответы (10)
Вот выдержка из нашего лога запросов:
2017-04-10 1:15:14 - 0.970 - REPLACE INTO `oc_customer_online` SET `ip` = '62.249.146.12', `customer_id` = '405', `url` = 'http://salyra.ru/gotovye-ochki-focus-655-c-2-fiolet.html';, `referer` = 'http://salyra.ru/ochki/korrigiruyuschie-dlya-zreniya/ochki-quot-focus-quot-ot-105r/';, `date_added` = NOW()
2017-04-10 1:15:21 - 0.943 - REPLACE INTO `oc_customer_online` SET `ip` = '62.249.146.12', `customer_id` = '405', `url` = 'http://salyra.ru/ochki/korrigiruyuschie-dlya-zreniya/ochki-quot-focus-quot-ot-105r/';, `referer` = 'http://salyra.ru/ochki/korrigiruyuschie-dlya-zreniya/';, `date_added` = NOW()
2017-04-10 1:15:38 - 0.677 - REPLACE INTO `oc_customer_online` SET `ip` = '62.249.146.12', `customer_id` = '405', `url` = 'http://salyra.ru/ochki/korrigiruyuschie-dlya-zreniya/ochki-quot-focus-quot-ot-105r/';, `referer` = 'http://salyra.ru/ochki/korrigiruyuschie-dlya-zreniya/';, `date_added` = NOW()
2017-04-10 1:15:40 - 2.013 - REPLACE INTO `oc_customer_online` SET `ip` = '217.168.68.208', `customer_id` = '0', `url` = 'http://salyra.ru/gotovye-ochki-eae-2009-zh-c-1.html';, `referer` = 'http://salyra.ru/search/?search=EAE%202009%20(%D0%96)(C-1)';, `date_added` = NOW()
2017-04-10 1:16:26 - 2.383 - REPLACE INTO `oc_customer_online` SET `ip` = '62.249.146.12', `customer_id` = '405', `url` = 'http://salyra.ru/ochki/korrigiruyuschie-dlya-zreniya/ochki-quot-focus-quot-ot-105r/';, `referer` = 'http://salyra.ru/ochki/korrigiruyuschie-dlya-zreniya/';, `date_added` = NOW()
2017-04-10 1:18:00 - 2.956 - REPLACE INTO `oc_customer_online` SET `ip` = '62.249.146.12', `customer_id` = '405', `url` = 'http://salyra.ru/ochki/korrigiruyuschie-dlya-zreniya/ochki-quot-focus-quot-ot-105r/';, `referer` = 'http://salyra.ru/ochki/korrigiruyuschie-dlya-zreniya/';, `date_added` = NOW()
2017-04-10 1:22:22 - 4.945 - REPLACE INTO `oc_customer_online` SET `ip` = '62.249.146.12', `customer_id` = '405', `url` = 'http://salyra.ru/ochki/korrigiruyuschie-dlya-zreniya/';, `referer` = 'http://salyra.ru/ochki/';, `date_added` = NOW()
Сходные запросы, а разброс времени выполнения довольно приличный.
Вот ещё пример:
2017-04-10 7:12:35 - 1.139 - SELECT * FROM oc_weight_class wc LEFT JOIN oc_weight_class_description wcd ON (wc.weight_class_id = wcd.weight_class_id) WHERE wcd.language_id = '1'
В таблице oc_weight_class - всего 4 записи.
Причём большое время выполнения всегда у разных запросов.
Такая ситуация происходит в основном ночью.
При таком разбросе времени выполнения на простейших запросах, нет возможности что-то дальше оптимимзировать.
- Через phpMyAdmin оптимизируйте таблицы в базе
- Посмотрите на официальном форуме по используемой CMS похожие ситуации со схожими запросами
- Изучите возможность оптимизации подобных процессов с помощью плагинов/расширений для CMS
В итоге сайт почти недоступен полдня, учитывая, что копирование идёт ночью по МСК, а сайт работает на Дальний Восток.
Решилась в итоге у вас ситуация? Каким обазом?