Enhill Опубликовано 18 марта, 2016 Жалоба Поделиться Опубликовано 18 марта, 2016 Добрый вечер, форумчане.Движок оброс множеством доработок, приличным трафиком и ~10000 товарами. Приключилось все еще на хостинге, что привело меня к переезду на VDS. Характеристики машины:CPU: 4 Core RAM: 4096 Mb Диск: 20 Gb,SSD А приключилось следующее:При неизвестных мне обстоятельтвах, mysql не хватает памяти выполнить некоторые запросы. Он сбрасывает кеш на диск и сбрасывает его до тех пор, пока не займет все пространство на диске, что приводит к блокировке всех сервисов, как mysql, так и php. В логе ошибок PHP - все кристально чисто. mysqltuner - говорит, что конфиги правильно настроенны. а вот в логах mysql-slow есть много интересного:Запросы с большим временем выполнения и неиспользующим индексы: # Time: 160318 14:02:09 # User@Host: o[o] @ localhost [] # Thread_id: 18308 Schema: o QC_hit: No # Query_time: 240.045449 Lock_time: 0.000199 Rows_sent: 1 Rows_examined: 8227 SET timestamp=1458291729; SELECT p.id, p.url, p.brand_id, p.name, p.annotation, p.body, p.bodytwo, p.video, pc.category_id, p.position, p.created as created, p.visible, p.proizvodstvo, p.featured, p.meta_title, p.meta_keywords, p.meta_description, b.name as brand, b.url as brand_url FROM s_products p INNER JOIN s_products_categories pc ON pc.product_id = p.id LEFT JOIN s_brands b ON p.brand_id = b.id , s_variants v WHERE 1 AND p.id=v.product_id AND (v.sku LIKE "%Самокат%" OR p.name LIKE "%Самокат%" OR p.meta_keywords LIKE "%Самокат%") AND p.id=v.product_id AND (v.sku LIKE "%3-х%" OR p.name LIKE "%3-х%" OR p.meta_keywords LIKE "%3-х%") AND p.id=v.product_id AND (v.sku LIKE "%колесный%" OR p.name LIKE "%колесный%" OR p.meta_keywords LIKE "%колесный%") AND p.id=v.product_id AND (v.sku LIKE "%Marvel%" OR p.name LIKE "%Marvel%" OR p.meta_keywords LIKE "%Marvel%") AND p.id=v.product_id AND (v.sku LIKE "%Spider%" OR p.name LIKE "%Spider%" OR p.meta_keywords LIKE "%Spider%") AND p.id=v.product_id AND (v.sku LIKE "%Man%" OR p.name LIKE "%Man%" OR p.meta_keywords LIKE "%Man%") AND p.visible=1 ORDER BY (SELECT p.position FROM s_variants pv WHERE p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM s_variants WHERE (stock>0 OR stock IS NULL) AND product_id=p.id LIMIT 1) LIMIT 1)DESC LIMIT 0, 150; Или вот этот, с пугающим значением Rows_examined # Time: 160318 13:26:07 # User@Host: r[r] @ localhost [] # Thread_id: 17388 Schema: r QC_hit: No # Query_time: 0.049616 Lock_time: 0.000179 Rows_sent: 24 Rows_examined: 19005 SET timestamp=1458289567; SELECT p.id, p.url, p.brand_id, p.name, p.yandex_name, p.annotation, p.body, p.bodyniz, p.bodyunderbutton, p.video, p.no_active_product, p.position, p.created as created, p.visible, p.yandex, p.tiu, p.freelance_status, p.featured, p.meta_title, p.meta_keywords, p.meta_description, b.name as brand, b.url as brand_url FROM s_products p LEFT JOIN s_brands b ON p.brand_id = b.id , s_variants v WHERE 1 AND p.id=v.product_id AND (v.sku LIKE "%%" OR p.name LIKE "%%" OR p.meta_keywords LIKE "%%") AND p.id=v.product_id AND (v.sku LIKE "%Карапуз-5А%" OR p.name LIKE "%Карапуз-5А%" OR p.meta_keywords LIKE "%Карапуз-5А%") AND p.id=v.product_id AND (v.sku LIKE "%%" OR p.name LIKE "%%" OR p.meta_keywords LIKE "%%") AND p.visible=1 ORDER BY (SELECT p.position FROM s_variants pv WHERE p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM s_variants WHERE (stock>0 OR stock IS NULL) AND product_id=p.id LIMIT 1) LIMIT 1)DESC LIMIT 0, 200; Какие то запросы висят, блокируют таблицу и пишут кеш в гигабайты! Что за запросы, понять я не могу. Прошу вашей помощи! Предоставлю любые листинги чего угодно. Если хотите денег за помощь - говорите, за мной не заржавеет. Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 18 марта, 2016 Жалоба Поделиться Опубликовано 18 марта, 2016 Судя по второму запросу, у Вас в скрипте в логике есть ошибка. Во всяком случае, этот запрос скорее всего и подвешивает Вашу систему... Могу попробовать выяснить и поправить. Обращайтесь... Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 18 марта, 2016 Жалоба Поделиться Опубликовано 18 марта, 2016 Уберите AND p.id=v.product_id из цикла перебора слов для поиска. и сделайте вместо ,s_variants v LEFT JOIN s_variants as v ON (p.id=v.product_id) PS: Код формирования запроса - не знаю. Поэтому привел примеры исходя из показанных запросов Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.