Название: Очень долго выполняется SELECT SQL_CALC_FOUND_ROWS Отправлено: goletsa от 03 Июня 2014, 13:20:07 Можно с этим что-то сделать?
Запрос может идти по 15-20 секунд. И во время его выполнения блокируются все остальные запросы к базе (Locked в mtop'е). (http://s019.radikal.ru/i614/1406/c5/f6a4bb1cbf5d.png) Название: Re: Очень долго выполняется SELECT SQL_CALC_FOUND_ROWS Отправлено: Efendy от 03 Июня 2014, 14:12:14 Полный запрос не виден. Но подозреваю, что у тебя 50.32 версия в которой проблема когда дохрена ревизий. Можно решить удалением неактуальных ревизий, я уже не помню - другие наверняка знают
Название: Re: Очень долго выполняется SELECT SQL_CALC_FOUND_ROWS Отправлено: goletsa от 04 Июня 2014, 10:12:07 Полный запрос не виден. Но подозреваю, что у тебя 50.32 версия в которой проблема когда дохрена ревизий. Можно решить удалением неактуальных ревизий, я уже не помню - другие наверняка знают Вроде крайняя из 50.32 стоит. Вот тоже приходило в голову избавиться от старых ревизий, вопрос тогда как. Еще когда на 50.19(точно не помню) обновлялись были проблемы с большим количеством ревизий, где-то топик был. Там как раз проблема была при WHERE .. IN (вложенный запрос). Нашел топик, там было 50.19->50.31. Где-то между ними ревизии полей появились. 220 тысяч записей в dopdata :( Название: Re: Очень долго выполняется SELECT SQL_CALC_FOUND_ROWS Отправлено: Efendy от 04 Июня 2014, 11:10:35 ну вот я нашел в форуме
Код: DELETE FROM dopvalues WHERE revision NOT IN (SELECT rev FROM rev_users) AND revision NOT IN (SELECT rev FROM rev_equip) обязательно сделай бекап Название: Re: Очень долго выполняется SELECT SQL_CALC_FOUND_ROWS Отправлено: goletsa от 04 Июня 2014, 12:49:43 ну вот я нашел в форуме Не сильно помогло, из 220к осталось 150к записей.Код: DELETE FROM dopvalues WHERE revision NOT IN (SELECT rev FROM rev_users) AND revision NOT IN (SELECT rev FROM rev_equip) обязательно сделай бекап Остается только на N+ переежать? Название: Re: Очень долго выполняется SELECT SQL_CALC_FOUND_ROWS Отправлено: Efendy от 04 Июня 2014, 13:16:50 50.33, только немного функционал уменьшится
Название: Re: Очень долго выполняется SELECT SQL_CALC_FOUND_ROWS Отправлено: goletsa от 04 Июня 2014, 13:18:15 50.33, только немного функционал уменьшится Какой именно?Название: Re: Очень долго выполняется SELECT SQL_CALC_FOUND_ROWS Отправлено: Андрій от 29 Января 2015, 15:26:32 пробую видалити в себе старі ревізії, але нічого не видаляється -
Код: mysql> DELETE FROM dopvalues WHERE revision NOT IN (SELECT rev FROM rev_users) AND revision NOT IN (SELECT rev FROM rev_equip); Название: Re: Очень долго выполняется SELECT SQL_CALC_FOUND_ROWS Отправлено: goletsa от 31 Июля 2015, 11:46:47 Грусть-пичаль, у меня время выполнения запроса доросло до 32 секунд.
Причем странно. Раскатал базу на другой комп, на ссд\хдд - там запрос на незагруженной базе выполняется 12 секунд независимо от того с какого носителя загружена база. И в момент запроса сильно грузит 1 ядро. Т.е. перенос основной базы на ssd и 24 потока на сервере бесполезны, так как запрос похоже грузит только 1 ядро. Название: Re: Очень долго выполняется SELECT SQL_CALC_FOUND_ROWS Отправлено: Efendy от 31 Июля 2015, 15:00:14 А проверьте сколько времени выполняется
Код: SELECT parent_id AS id, template_num, MAX(revision) AS rev FROM (SELECT * FROM dopfields f JOIN dopvalues v ON f.id=v.dopfield_id) d WHERE parent_type=0 GROUP BY parent_id,template_num и Код: SELECT parent_id AS id, template_num, MAX(revision) AS rev FROM dopfields f JOIN dopvalues v ON f.id=v.dopfield_id WHERE parent_type=0 GROUP BY parent_id, template_num Название: Re: Очень долго выполняется SELECT SQL_CALC_FOUND_ROWS Отправлено: Efendy от 31 Июля 2015, 15:23:08 Вообще, постарайтесь найти эти долгие запросы, постараюсь (не обещаю), что оптимизирую их. Что бы найти - включите дебаг режим в админке
Название: Re: Очень долго выполняется SELECT SQL_CALC_FOUND_ROWS Отправлено: goletsa от 31 Июля 2015, 17:02:48 Вообще, постарайтесь найти эти долгие запросы, постараюсь (не обещаю), что оптимизирую их. Что бы найти - включите дебаг режим в админке А он один такой:Код: Основной запрос: Название: Re: Очень долго выполняется SELECT SQL_CALC_FOUND_ROWS Отправлено: goletsa от 31 Июля 2015, 17:06:15 А проверьте сколько времени выполняется ПервыйКод: SELECT parent_id AS id, template_num, MAX(revision) AS rev FROM (SELECT * FROM dopfields f JOIN dopvalues v ON f.id=v.dopfield_id) d WHERE parent_type=0 GROUP BY parent_id,template_num Код: SELECT parent_id AS id, template_num, MAX(revision) AS rev FROM dopfields f JOIN dopvalues v ON f.id=v.dopfield_id WHERE parent_type=0 GROUP BY parent_id, template_num Отображение строк 0 - 24 (25825 всего, Query took 2.1825 seconds.) Второй Отображение строк 0 - 24 (25825 всего, Query took 0.9509 seconds.) Название: Re: Очень долго выполняется SELECT SQL_CALC_FOUND_ROWS Отправлено: Efendy от 31 Июля 2015, 22:59:16 Можно оптимизировать на ту одну секунду, что и дало изменение rev_users, а толку? Чтоб вы понимали что делает этот запрос:
- те несколько сотен тысяч записей группируются по клиенту и выбирается максимальная ревизия для каждого (тут, кстати, оптимизируется та одна секунда и тут еще используются индексы). Получили 25 тыс записей - в этих 25 тыс ищется поле, у которого значение = 32 (по твоему примеру), причем ищется по like - без индексов - из полученного количества записей выуживаем ревизии и по каждому номеру ревизии выбираем набор данных с такой же ревизией и еще фильтруем по значению 6 (опять же без индексов) К сожалению, такой пиздец для субд очень и очень затратен и оптимизировать это нихрена не удастся - неверная архитектура. Я это понял когда в моей сети стало 1000 абонов, поэтому я попытался улучшить ситуацию и убрал ревизии вообще нафик в 50.33 версии. Но полностью менять архитектуру уже было поздно. В N+ я и избавился от такой горизонтальной организации столбцов данных. Запрос я вроде оптимизировал (надо тестить): Код: SELECT SQL_CALC_FOUND_ROWS id FROM users Вопрос в том "как его в N50" внедрить? Название: Re: Очень долго выполняется SELECT SQL_CALC_FOUND_ROWS Отправлено: Efendy от 31 Июля 2015, 23:12:04 Насколько я понял, надо править файл nDopdatAPI.pl функцию nDopdata_search
Название: Re: Очень долго выполняется SELECT SQL_CALC_FOUND_ROWS Отправлено: goletsa от 01 Августа 2015, 12:54:45 Насколько я понял, надо править файл nDopdatAPI.pl функцию nDopdata_search Хорошо, спасибо, я просматривал исходники и видел где он там начинает собираться, попробую прикрутить его.Название: Re: Очень долго выполняется SELECT SQL_CALC_FOUND_ROWS Отправлено: 0xbad0c0d3 от 02 Августа 2015, 10:42:14 >10k абонов, поиск по допданным отстреливает за <0.5 сек.
Переделывал поисковый механизм полностью, плюс создавал индексы в таблицах. v. 50.33 на 50.32 сомневаюсь что что-то выйдет я думаю даже перейти на 50.33 уже даст прирост Название: Re: Очень долго выполняется SELECT SQL_CALC_FOUND_ROWS Отправлено: Efendy от 02 Августа 2015, 11:42:13 Насколько я понял, надо править файл nDopdatAPI.pl функцию nDopdata_search Хорошо, спасибо, я просматривал исходники и видел где он там начинает собираться, попробую прикрутить его.Название: Re: Очень долго выполняется SELECT SQL_CALC_FOUND_ROWS Отправлено: goletsa от 03 Августа 2015, 17:35:09 >10k абонов, поиск по допданным отстреливает за <0.5 сек. Я думал переделать через промежуточные таблицы, у меня раз в сутки строится таблица клиентов с адресами для работы других модулей, в принципе потерять в поиске пару новых клиентов не так критично чем каждый раз мучать тормоза.Переделывал поисковый механизм полностью, плюс создавал индексы в таблицах. v. 50.33 на 50.32 сомневаюсь что что-то выйдет я думаю даже перейти на 50.33 уже даст прирост Название: Re: Очень долго выполняется SELECT SQL_CALC_FOUND_ROWS Отправлено: goletsa от 03 Августа 2015, 17:35:38 Насколько я понял, надо править файл nDopdatAPI.pl функцию nDopdata_search Хорошо, спасибо, я просматривал исходники и видел где он там начинает собираться, попробую прикрутить его.Название: Re: Очень долго выполняется SELECT SQL_CALC_FOUND_ROWS Отправлено: goletsa от 17 Августа 2015, 14:47:08 Код: SELECT SQL_CALC_FOUND_ROWS id FROM users Вопрос в том "как его в N50" внедрить? Т.е. придется делать еще JOIN dopvalues d3 ON d2.revision=d3.revision? Название: Re: Очень долго выполняется SELECT SQL_CALC_FOUND_ROWS Отправлено: 0xbad0c0d3 от 18 Августа 2015, 08:13:43 А где тут джоины? С джоинами, как раз и будет все более или менее, а вот с подзапросами - беда
Название: Re: Очень долго выполняется SELECT SQL_CALC_FOUND_ROWS Отправлено: goletsa от 19 Августа 2015, 16:36:00 А где тут джоины? С джоинами, как раз и будет все более или менее, а вот с подзапросами - беда Запрос же в цитировании есть.А у вас диффы с вашим переделанным поиском есть под 32 версию? Я этот пока не прикрутил еще, другие штуки допиливал под себя. Название: Re: Очень долго выполняется SELECT SQL_CALC_FOUND_ROWS Отправлено: NodenY45 от 17 Апреля 2016, 08:06:52 А где тут джоины? С джоинами, как раз и будет все более или менее, а вот с подзапросами - беда Запрос же в цитировании есть.А у вас диффы с вашим переделанным поиском есть под 32 версию? Я этот пока не прикрутил еще, другие штуки допиливал под себя. Присоединяюсь :) Есть диффы? |