Выполнение запроса в клиент серверном варианте в сотни раз длительнее файлового #704641


#0 by Joshim
Один и тот же запрос выполняемый в файловом варианте меньше чем за 1 минуту - в клиент серверном варианте выполняется больше трех часов. Запрос вызывается при проведении документа Расчет себестоимости. Запрос типовой. Обслуживание базы данных средствами SQL выполняется ежедневно - перестроение индекса, обновление статистики.
#1 by Joshim
Прошу помочь найти причину
#2 by Joshim
УПП 1.3 для Украины MS SQL 2012 1С:Предприятие 8.2 (8.2.19.83)
#3 by Красный рассвет
Я вряд ли помогу, но точно ли именно запрос? Отладчик в каких местах показывает такое дикое время?
#4 by Joshim
РезультатЗапроса = Запрос.Выполнить;
#5 by Красный рассвет
И в копии тоже?
#6 by Joshim
да
#7 by alexei366
А нас самом скуле статистику не смотрел?
#8 by Joshim
сформировал встроенный отчет "Физическая статистика индекса"- изучаю, есть некоторые рекомендации по перестроению индекса. Попробую отпишусь. Что еще посмотреть?
#9 by х86
давай текст запроса
#10 by Joshim
Текст запроса (в отладчике): ВЫБРАТЬ     РегЗатраты.Затрата,     РегЗатраты.ХарактеристикаЗатраты,      РегЗатраты.НалоговоеНазначение,              РегВыпуск.СчетУчетаНЗП,         ГДЕ             РегВыпуск.Период МЕЖДУ &НачДата И &КонДата             РегВыпуск.Заказ ГДЕ     РегЗатраты.Период МЕЖДУ &НачДата И &КонДата     И РегЗатраты.Активность     И РегЗатраты.КодОперации В (&КодыОпераций)     И (РегВыпуск.КоличествоВыпуск = 0 ИЛИ РегВыпуск.КоличествоВыпуск Есть NULL)     И (РегЗатраты.Количество <> 0 ИЛИ РегЗатраты.Сумма <> 0     РегЗатраты.Заказ
#11 by Heckfy
Очистка процедурного кэша-перестроение индексов-обновление статистики делал? Какая модель базы? Шринк и все такое....
#12 by Heckfy
Скуль по памяти как настроен?
#13 by Joshim
+ запрос типовой, пробовал переделать на временные таблицы - ждал более часа, запрос не выполнился.
#14 by Chai Nic
Отлавливай запрос в том виде, как его исполняет sql, и смотри план запроса. Скорее всего, там что-то вроде nested loop при соединении с большой неселективной выборкой..
#15 by Chai Nic
Временные таблицы могут здорово ускорить, но надо не забывать индексировать поля связей.
#16 by Joshim
шринк и Очистка процедурного кэша не делается, остальное по расписанию ежедневно
#17 by Joshim
попробую с индексом, отпишусь
#18 by jsmith82
сколько памяти сжирает при этом? индекс тут по ходу не причём
#19 by Смешарик
Запусти по сети запрос в файловом варианте
#20 by vi0
странный запрос не использующий виртуальные таблицы при этом у одного регистра фильтруются записи по Активности, у второго нет
#21 by DexterMorgan
с сетью чета
#22 by vi0
и вот такие условия по неиндексированным полям гарантируют полный скан таблицы (я так понимаю ресурсы неиндексированы)
#23 by х86
запрос чуть поправить нужно, вложенный запрос из левого соединения во времянку нужно
#24 by DexterMorgan
ресурсы неиндексированы чиво, чиво ???
#25 by jsmith82
#26 by vi0
что конкретно смущает?
#27 by alexei366
Скулю может оперативы не хватает, как ктото выше писал, Помню у меня с этим проблема была, правда разница не с минуты в 3 часа, а с 0.2 сек до 1.5 сек)
#28 by alexei366
В итоге добавили оперативы (и физически и в скуле) и стало < 0.1
#29 by Зойч
план запроса пробовал строить?
#30 by Joshim
оперативы хватает, 40 гб скулю
#31 by Joshim
нет, как это?
#32 by vi0
в профайлере во время выполнения запроса нужно отловить событие Perfomance/Showplan statictic profile и Perfomance/Showplan text (который ты можешь показать здесь)
#33 by Joshim
трассировку с указанными событиями запустил, как отловить нужные? их там очень много
#34 by Joshim
создание временной таблицы с индексированием полей связи результата ощутимого не принесли, запрос по прежнему выполняется в часах
#35 by vi0
способы разные есть один из - понять какой у тебя SPID и либо заранее накладывать фильтр на SPID либо потом просматривать один из простых способов получить SPID выполнить в консоли что то типа ВЫБРАТЬ    11222333 найти строку 11222333 и посмотреть какой там SPID
#36 by Maxus43
я по имени базы обычно фильтрую, ибо такой садомией занимаюсь на тестовых базах, там окромя меня никого нет)
#37 by vi0
+ только это можно увидеть в событиях RPC:Completed или SQL:BAtchCompleted
#38 by vi0
ну я грю, что способы зависят от ситуации
#39 by Joshim
Переделал все типовые тормозящие запросы на запросы с временными таблицами с индексированием всех полей временных таблиц, проблема производительности запросов в СУБД MS SQL исчезла. Насколько я понял, проблема была в том, что оптимизатор запроса SQL не может корректно составить план выполнения запроса в котором используются соединения с подзапросами. Использование в запросах временных таблицы с индексированием полей решают эту проблему
#40 by AlexTim03
Именно про это недавно на курсах говорили: скуль не может оценить объем данных вложенного запроса и строит неверный план запроса. С временной таблицей скулю проще.
#41 by Chai Nic
По идее, здесь должна платформа 1с подключаться. Ввели бы опцию на уровне сервера 1с "по возможности подавлять nested loop", чтобы сервер 1с выдавал нужные хинты при формировании запросов к sql-серверу..
#42 by Chai Nic
Ну или эвристику придумать какую-нибудь..
#43 by alexhtn
Можно попробовать сделать дополнительные индексы средствами sql сервера 1. В SQL server management studio открываешь activity monitor 2. Разворачиваешь recent expensive queries 3. Сортируешь по полю average duration 4. На самом длительном запросе нажимаешь правой кнопкой и выбираешь show execution plan 5. Ищешь действия у которых большая стоимость (cost) 6. Нажимаешь на них правой кнопкой и там обычно есть "missing index detail" (если нет - то уже есть необходимый индекс) и у тебя появляется текст запроса для создания индекса, который облегчит выполнение этого запроса.
#44 by jsmith82
просто у разрабов платформы И у разрабов конфиг непонятки друг с другом
#45 by jsmith82
видимо, там дело не в индексах было, а в левом соединении походу он как-то в трансляции жахнул не на левое а на В (Таблица)
#46 by jsmith82
индексы в целом не так страшно, как кривая трансляция
#47 by Gepard
КодКонвертации,  Организация - есть индексы?
#48 by Joshim
при нажатии show execution plan SQL management studio сначала "задумывается секунд на 10", затем завершается ошибкой. Наверное очень огромный план
#49 by Зойч
для сбора плана проще всего воспользоваться
#50 by krbIso
было бы интересно как этот запрос  обработал оптимизатор в 2014
#51 by Леша1с
" Расчет себестоимости. Запрос типовой." что-то не припомню расчет себестоимости "за минуту". Сколкьо документов? Какой период? Точно уверены, что в файловом себестоимость рассчитывает, а не иммитирует загрузку процессора?
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С