Есть несколько пользователей, у которых при действиях с задачами в документообороте(согласовать, не согласовать и т.д.) интерфейс зависает намертво в тонком и веб клиентах на время до 120 секунд. Причем такое происходит хаотически - можно согласовать сотню заявок без проблем, а можно на трех подряд словить зависание. В консоли кластера проблемные пользователи находятся в топе по времени вызовов СУБД, что наводит на мысли о плохом запросе.
Есть идеи, как отловить такой запрос? Запускать пользователя через конфигуратор с замером производительности хотелось бы в последнюю очередь.
собираете данные в пределах часах http://www.gilev.ru/querytj/ до и после, затем ставите фильтр на период который вас интересует
если проблема была например с 12.03 до 12.06 поставьте в http://www.gilev.ru/querytj/ отбор с 12.00 до 12.15 и посмотрите какие запросы попали в этот период
правда если не будет совсем, то период надо увеличить на 15 минут до и после, если происходил какой то ну очень долгий запрос (чтобы начало и конец запроса попали в отбор)
(1) Возможно, происходит синхронная попытка блокировки каких-то данных. Такое хорошо отлавливается ТЖ с общими критическими настройками, которые 1С рекомендует установить на всех БД.
Запрос нашелся в модуле формы с задачами пользователя, он тянет из базы данные для обновления дерева задач.
Текст запроса
ВЫБРАТЬ
ИсполнителиРолейИДелегаты.РольПользователь КАК Исполнитель,
МИНИМУМ(ИсполнителиРолейИДелегаты.НастройкаДелегирования) КАК НастройкаДелегирования
ПОМЕСТИТЬ ИсполнителиЗадач
ИЗ
РегистрСведений.ИсполнителиРолейИДелегаты КАК ИсполнителиРолейИДелегаты
ГДЕ
ИсполнителиРолейИДелегаты.ИсполнительДелегат = &ТекущийПользователь
И ИсполнителиРолейИДелегаты.ИмяОбластиДелегирования В ("", "ПроцессыИЗадачи")
СГРУППИРОВАТЬ ПО
ИсполнителиРолейИДелегаты.РольПользователь
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЗадачаИсполнителя.Ссылка КАК Ссылка,
ЗадачаИсполнителя.Дата КАК Дата,
ЗадачаИсполнителя.Наименование КАК Наименование,
ЗадачаИсполнителя.СрокИсполнения КАК СрокИсполнения,
ЗадачаИсполнителя.ПринятаКИсполнению КАК ПринятаКИсполнению,
ЗадачаИсполнителя.Выполнена КАК Выполнена,
ЗадачаИсполнителя.Автор КАК Автор,
ЗадачаИсполнителя.БизнесПроцесс КАК БизнесПроцесс,
ЗадачаИсполнителя.ТочкаМаршрута КАК ТочкаМаршрута,
ЗадачаИсполнителя.ПредметСтрокой КАК ПредметСтрокой,
ЗадачаИсполнителя.Проект КАК Проект,
ЗадачаИсполнителя.Исполнитель КАК Исполнитель,
ЗадачаИсполнителя.ТекущийИсполнитель КАК ТекущийИсполнитель,
ИсполнителиЗадач.НастройкаДелегирования КАК НастройкаДелегирования,
ЗадачаИсполнителя.Важность КАК Важность,
ЗадачиДляВыполнения.СостояниеВыполнения КАК СостояниеВыполнения
ПОМЕСТИТЬ Задачи
ИЗ
Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ИсполнителиЗадач КАК ИсполнителиЗадач
ПО ЗадачаИсполнителя.ТекущийИсполнитель = ИсполнителиЗадач.Исполнитель
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗадачиДляВыполнения КАК ЗадачиДляВыполнения
ПО ЗадачаИсполнителя.Ссылка = ЗадачиДляВыполнения.Задача
ГДЕ
ЗадачаИсполнителя.СостояниеБизнесПроцесса = ЗНАЧЕНИЕ(Перечисление.СостоянияБизнесПроцессов.Активен)
И ЕСТЬNULL(ЗадачиДляВыполнения.СостояниеВыполнения, НЕОПРЕДЕЛЕНО) <> ЗНАЧЕНИЕ(Перечисление.СостоянияЗадачДляВыполнения.ГотоваКВыполнению)
И ЗадачаИсполнителя.ПометкаУдаления = ЛОЖЬ
И ЗадачаИсполнителя.ИсключенаИзПроцесса = ЛОЖЬ
И ЗадачаИсполнителя.Выполнена = ЛОЖЬ
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
Задачи.Ссылка КАК Ссылка,
Задачи.Дата КАК Дата,
Задачи.Наименование КАК Наименование,
Задачи.СрокИсполнения КАК СрокИсполнения,
Задачи.ПринятаКИсполнению КАК ПринятаКИсполнению,
Задачи.Выполнена КАК Выполнена,
Задачи.Автор КАК Автор,
Задачи.БизнесПроцесс КАК БизнесПроцесс,
Задачи.ТочкаМаршрута КАК ТочкаМаршрута,
Задачи.ПредметСтрокой КАК ПредметСтрокой,
Задачи.Проект КАК Проект,
Задачи.Исполнитель КАК Исполнитель,
Задачи.ТекущийИсполнитель КАК ТекущийИсполнитель,
Задачи.Важность КАК Важность,
Задачи.СостояниеВыполнения КАК СостояниеВыполнения,
Задачи.НастройкаДелегирования КАК НастройкаДелегирования
ПОМЕСТИТЬ ЗадачиСRLS
ИЗ
Задачи КАК Задачи
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.УчастникиПроцессов КАК УчастникиПроцессов
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставСубъектовПравДоступа КАК СоставСубъектовПравДоступа
ПО УчастникиПроцессов.Участник = СоставСубъектовПравДоступа.Субъект
ПО Задачи.БизнесПроцесс = УчастникиПроцессов.Процесс
ГДЕ
СоставСубъектовПравДоступа.Пользователь = &ТекущийПользователь
И СоставСубъектовПравДоступа.ИмяОбластиДелегирования В ("", "ПроцессыИЗадачи")
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЗадачаИсполнителя.Ссылка КАК Ссылка,
ЗадачаИсполнителя.БизнесПроцесс КАК БизнесПроцесс,
ДанныеБизнесПроцессов.ГлавнаяЗадача КАК ГлавнаяЗадача
ПОМЕСТИТЬ ЗадачиАвтора
ИЗ
Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ИсполнителиЗадач КАК ИсполнителиЗадач
ПО ЗадачаИсполнителя.Автор = ИсполнителиЗадач.Исполнитель
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗадачиДляВыполнения КАК ЗадачиДляВыполнения
ПО ЗадачаИсполнителя.Ссылка = ЗадачиДляВыполнения.Задача
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеБизнесПроцессов КАК ДанныеБизнесПроцессов
ПО ЗадачаИсполнителя.БизнесПроцесс = ДанныеБизнесПроцессов.БизнесПроцесс
ГДЕ
ЗадачаИсполнителя.СостояниеБизнесПроцесса = ЗНАЧЕНИЕ(Перечисление.СостоянияБизнесПроцессов.Активен)
И ЕСТЬNULL(ЗадачиДляВыполнения.СостояниеВыполнения, НЕОПРЕДЕЛЕНО) <> ЗНАЧЕНИЕ(Перечисление.СостоянияЗадачДляВыполнения.ГотоваКВыполнению)
И ЗадачаИсполнителя.ПометкаУдаления = ЛОЖЬ
И ЗадачаИсполнителя.ИсключенаИзПроцесса = ЛОЖЬ
И ЗадачаИсполнителя.Выполнена = ЛОЖЬ
И НЕ ЗадачаИсполнителя.Исполнитель В
(ВЫБРАТЬ
ИсполнителиЗадач.Исполнитель
ИЗ
ИсполнителиЗадач КАК ИсполнителиЗадач)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ИСТИНА КАК ЕстьПодчиненныеЗадачи,
ЗадачиАвтора.ГлавнаяЗадача КАК ГлавнаяЗадача
ПОМЕСТИТЬ ВТ_ПодчиненныеЗадачи
ИЗ
ЗадачиАвтора КАК ЗадачиАвтора
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Задачи КАК Задачи
ПО ЗадачиАвтора.ГлавнаяЗадача = Задачи.Ссылка
СГРУППИРОВАТЬ ПО
ЗадачиАвтора.ГлавнаяЗадача
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЗадачаИсполнителяПредметы.Ссылка КАК Ссылка,
ЗадачаИсполнителяПредметы.НомерСтроки КАК НомерСтроки,
ЗадачаИсполнителяПредметы.РольПредмета КАК РольПредмета,
ЗадачаИсполнителяПредметы.ИмяПредмета КАК ИмяПредмета,
ЗадачаИсполнителяПредметы.Предмет КАК Предмет,
ЗадачаИсполнителяПредметы.ДоступноУдаление КАК ДоступноУдаление,
ЗадачаИсполнителяПредметы.ОбязательноеЗаполнение КАК ОбязательноеЗаполнение
ПОМЕСТИТЬ ВТ_ПредметыПоЗадачам
ИЗ
Задача.ЗадачаИсполнителя.Предметы КАК ЗадачаИсполнителяПредметы
ГДЕ
ЗадачаИсполнителяПредметы.Ссылка В
(ВЫБРАТЬ
ЗадачиСRLS.Ссылка
ИЗ
ЗадачиСRLS КАК ЗадачиСRLS)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_ПредметыПоЗадачам.НомерСтроки КАК НомерСтроки,
ВТ_ПредметыПоЗадачам.Предмет КАК Предмет,
ВТ_ПредметыПоЗадачам.Ссылка КАК Задача
ПОМЕСТИТЬ ВТ_ПредметыВнтуренниеДокументы
ИЗ
ВТ_ПредметыПоЗадачам КАК ВТ_ПредметыПоЗадачам
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВнутренниеДокументы КАК ВнутренниеДокументы
ПО (ВТ_ПредметыПоЗадачам.Предмет ССЫЛКА Справочник.ВнутренниеДокументы)
И ВТ_ПредметыПоЗадачам.Предмет = ВнутренниеДокументы.Ссылка
ГДЕ
НЕ ВнутренниеДокументы.Ссылка ЕСТЬ NULL
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
МИНИМУМ(ВТ_ПредметыВнтуренниеДокументы.НомерСтроки) КАК НомерСтроки,
ВТ_ПредметыВнтуренниеДокументы.Задача КАК Задача
ПОМЕСТИТЬ ВТ_НомерПредмета
ИЗ
ВТ_ПредметыВнтуренниеДокументы КАК ВТ_ПредметыВнтуренниеДокументы
СГРУППИРОВАТЬ ПО
ВТ_ПредметыВнтуренниеДокументы.Задача
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЗадачиСRLS.Ссылка КАК Задача,
ВложенныйЗапрос.Предмет КАК Предмет
ПОМЕСТИТЬ ВТ_Предмет
ИЗ
ЗадачиСRLS КАК ЗадачиСRLS
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ВТ_ПредметыПоЗадачам.Ссылка КАК Задача,
ВТ_ПредметыПоЗадачам.Предмет КАК Предмет
ИЗ
ВТ_ПредметыПоЗадачам КАК ВТ_ПредметыПоЗадачам
ГДЕ
(ВТ_ПредметыПоЗадачам.НомерСтроки, ВТ_ПредметыПоЗадачам.Ссылка) В
(ВЫБРАТЬ
ВТ_НомерПредмета.НомерСтроки,
ВТ_НомерПредмета.Задача
ИЗ
ВТ_НомерПредмета КАК ВТ_НомерПредмета)) КАК ВложенныйЗапрос
ПО ЗадачиСRLS.Ссылка = ВложенныйЗапрос.Задача
ГДЕ
НЕ ВложенныйЗапрос.Предмет ЕСТЬ NULL
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
ЗадачиСRLS.Ссылка КАК Ссылка,
ЗадачиСRLS.Дата КАК Дата,
ЗадачиСRLS.Наименование КАК Наименование,
ЗадачиСRLS.СрокИсполнения КАК СрокИсполнения,
ЗадачиСRLS.ПринятаКИсполнению КАК ПринятаКИсполнению,
ЗадачиСRLS.Выполнена КАК Выполнена,
ЗадачиСRLS.Автор КАК Автор,
ЗадачиСRLS.БизнесПроцесс КАК БизнесПроцесс,
ЗадачиСRLS.ТочкаМаршрута КАК ТочкаМаршрута,
ЗадачиСRLS.ПредметСтрокой КАК ПредметСтрокой,
ЗадачиСRLS.Проект КАК Проект,
ЗадачиСRLS.ТекущийИсполнитель КАК ТекущийИсполнитель,
ВЫБОР
КОГДА ЗадачиСRLS.Проект = ЗНАЧЕНИЕ(Справочник.Проекты.ПустаяСсылка)
ТОГДА &ИмяГруппыБезПроекта
ИНАЧЕ ЗадачиСRLS.Проект.Представление
КОНЕЦ КАК ПредставлениеПроекта,
ЗадачиСRLS.Исполнитель КАК Исполнитель,
ИСТИНА КАК Показывать,
ВЫБОР
КОГДА ЗадачиСRLS.СрокИсполнения = ДАТАВРЕМЯ(1, 1, 1)
ТОГДА ЛОЖЬ
КОГДА &ИспользоватьДатуИВремяВСрокахЗадач = ИСТИНА
ТОГДА ЗадачиСRLS.СрокИсполнения < &ТекущаяДата
КОГДА &ИспользоватьДатуИВремяВСрокахЗадач = ЛОЖЬ
ТОГДА КОНЕЦПЕРИОДА(ЗадачиСRLS.СрокИсполнения, ДЕНЬ) < &ТекущаяДата
КОНЕЦ КАК Просрочена,
ВЫБОР
КОГДА ЗадачиСRLS.Важность = ЗНАЧЕНИЕ(Перечисление.ВариантыВажностиЗадачи.Низкая)
ТОГДА 0
КОГДА ЗадачиСRLS.Важность = ЗНАЧЕНИЕ(Перечисление.ВариантыВажностиЗадачи.Высокая)
ТОГДА 2
ИНАЧЕ 1
КОНЕЦ КАК Важность,
ВЫБОР
КОГДА 1 В
(ВЫБРАТЬ
1 КАК Поле1
ИЗ
РегистрСведений.ДочерниеБизнесПроцессы КАК ДочерниеБизнесПроцессы
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеБизнесПроцессов КАК ДанныеБизнесПроцессов
ПО
ДочерниеБизнесПроцессы.ДочернийПроцесс = ДанныеБизнесПроцессов.БизнесПроцесс
ГДЕ
ДочерниеБизнесПроцессы.СвязующаяЗадача = ЗадачиСRLS.Ссылка
И ДанныеБизнесПроцессов.Завершен = ЛОЖЬ)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ КАК ЕстьАктивныеПроцессы,
ВЫБОР
КОГДА ЗадачиСRLS.ТекущийИсполнитель = &ТекущийПользователь
ТОГДА -1
КОГДА ЗадачиСRLS.ТекущийИсполнитель ССЫЛКА Справочник.ПолныеРоли
И ЗадачиСRLS.НастройкаДелегирования = ЗНАЧЕНИЕ(Справочник.ДелегированиеПрав.ПустаяСсылка)
ТОГДА 4
ИНАЧЕ 3
КОНЕЦ КАК Картинка,
ЕСТЬNULL(ФлагиОбъектов.Флаг, ЗНАЧЕНИЕ(Перечисление.ФлагиОбъектов.ПустаяСсылка)) КАК Флаг,
ВЫБОР
КОГДА ФлагиОбъектов.Флаг = ЗНАЧЕНИЕ(Перечисление.ФлагиОбъектов.Красный)
ТОГДА 1
КОГДА ФлагиОбъектов.Флаг = ЗНАЧЕНИЕ(Перечисление.ФлагиОбъектов.Синий)
ТОГДА 2
КОГДА ФлагиОбъектов.Флаг = ЗНАЧЕНИЕ(Перечисление.ФлагиОбъектов.Желтый)
ТОГДА 3
КОГДА ФлагиОбъектов.Флаг = ЗНАЧЕНИЕ(Перечисление.ФлагиОбъектов.Зеленый)
ТОГДА 4
КОГДА ФлагиОбъектов.Флаг = ЗНАЧЕНИЕ(Перечисление.ФлагиОбъектов.Оранжевый)
ТОГДА 5
КОГДА ФлагиОбъектов.Флаг = ЗНАЧЕНИЕ(Перечисление.ФлагиОбъектов.Лиловый)
ТОГДА 6
ИНАЧЕ 0
КОНЕЦ КАК НомерФлага,
ВЫБОР
КОГДА КешИнформацииОбОбъектах.СостояниеКонтроля = ЗНАЧЕНИЕ(Перечисление.СостоянияКонтроля.НаКонтроле)
ТОГДА ВЫБОР
КОГДА КешИнформацииОбОбъектах.СрокИсполнения = ДАТАВРЕМЯ(1, 1, 1)
ИЛИ КешИнформацииОбОбъектах.СрокИсполнения >= &ТекущаяДата
ТОГДА 1
ИНАЧЕ 3
КОНЕЦ
КОГДА КешИнформацииОбОбъектах.СостояниеКонтроля = ЗНАЧЕНИЕ(Перечисление.СостоянияКонтроля.СнятСКонтроля)
ТОГДА 4
КОГДА КешИнформацииОбОбъектах.СостояниеКонтроля = ЗНАЧЕНИЕ(Перечисление.СостоянияКонтроля.НаКонтролеНесколько)
ТОГДА ВЫБОР
КОГДА КешИнформацииОбОбъектах.СрокИсполнения = ДАТАВРЕМЯ(1, 1, 1)
ИЛИ КешИнформацииОбОбъектах.СрокИсполнения >= &ТекущаяДата
ТОГДА 5
КОГДА КешИнформацииОбОбъектах.СрокИсполненияОбщий = ДАТАВРЕМЯ(1, 1, 1)
ИЛИ КешИнформацииОбОбъектах.СрокИсполненияОбщий >= &ТекущаяДата
ТОГДА 8
ИНАЧЕ 6
КОНЕЦ
КОГДА КешИнформацииОбОбъектах.СостояниеКонтроля = ЗНАЧЕНИЕ(Перечисление.СостоянияКонтроля.СнятСКонтроляНесколько)
ТОГДА 7
КОГДА КешИнформацииОбОбъектах.СостояниеКонтроля = ЗНАЧЕНИЕ(Перечисление.СостоянияКонтроля.СмешанноНесколько)
ТОГДА ВЫБОР
КОГДА КешИнформацииОбОбъектах.СрокИсполнения = ДАТАВРЕМЯ(1, 1, 1)
ИЛИ КешИнформацииОбОбъектах.СрокИсполнения >= &ТекущаяДата
ТОГДА 9
ИНАЧЕ 10
КОНЕЦ
ИНАЧЕ 0
КОНЕЦ КАК СостояниеКонтроля,
ДанныеБизнесПроцессов.ГлавнаяЗадача КАК ГлавнаяЗадача,
ЗадачиСRLS.СостояниеВыполнения = ЗНАЧЕНИЕ(Перечисление.СостоянияЗадачДляВыполнения.ВыполнениеОтменено) КАК ОшибкаПриВыполненииЗадачи,
ЗадачиСRLS.СостояниеВыполнения КАК СостояниеВыполнения,
ВТ_Предмет.Предмет.ВидДокумента КАК ВидДокумента,
ВТ_Предмет.Предмет.Организация КАК Организация,
ВТ_Предмет.Предмет.Контрагент КАК Контрагент,
ВТ_Предмет.Предмет.Подразделение КАК Подразделение,
ВТ_Предмет.Предмет.Сумма КАК Сумма,
ВТ_Предмет.Предмет.Валюта КАК Валюта,
ЕСТЬNULL(ВТ_Предмет.Предмет.СрокИсполнения, ДАТАВРЕМЯ(1, 1, 1)) КАК СрокИсполненияДокумента,
ЕСТЬNULL(ВТ_Предмет.Предмет.ДатаСоздания, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаСозданияДокумента
ИЗ
ЗадачиСRLS КАК ЗадачиСRLS
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФлагиОбъектов КАК ФлагиОбъектов
ПО ЗадачиСRLS.Ссылка = ФлагиОбъектов.Объект
И (ФлагиОбъектов.Пользователь = &ТекущийПользователь)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КешИнформацииОбОбъектах КАК КешИнформацииОбОбъектах
ПО ЗадачиСRLS.Ссылка = КешИнформацииОбОбъектах.Объект
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеБизнесПроцессов КАК ДанныеБизнесПроцессов
ПО ЗадачиСRLS.БизнесПроцесс = ДанныеБизнесПроцессов.БизнесПроцесс
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Предмет КАК ВТ_Предмет
ПО ЗадачиСRLS.Ссылка = ВТ_Предмет.Задача
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПодчиненныеЗадачи КАК ВТ_ПодчиненныеЗадачи
ПО ЗадачиСRLS.Ссылка = ВТ_ПодчиненныеЗадачи.ГлавнаяЗадача
ГДЕ
(НЕ ЕСТЬNULL(ВТ_ПодчиненныеЗадачи.ЕстьПодчиненныеЗадачи, ЛОЖЬ)
И ВЫБОР
КОГДА ДанныеБизнесПроцессов.ГлавнаяЗадача <> ЗНАЧЕНИЕ(Задача.ЗадачаИсполнителя.ПустаяСсылка)
ТОГДА ДанныеБизнесПроцессов.ГлавнаяЗадача.Выполнена = ЛОЖЬ
ИНАЧЕ ИСТИНА
КОНЕЦ
И ВЫБОР
КОГДА НЕ ДанныеБизнесПроцессов.ГлавнаяЗадача В
(ВЫБРАТЬ
ВТ_ПодчиненныеЗадачи.ГлавнаяЗадача
ИЗ
ВТ_ПодчиненныеЗадачи КАК ВТ_ПодчиненныеЗадачи)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
ИЛИ &ЗадачиМнеПоказыватьНеАктуальные)
И (ЗадачиСRLS.ТекущийИсполнитель = &ТекущийПользователь
ИЛИ ЗадачиСRLS.ТекущийИсполнитель ССЫЛКА Справочник.ПолныеРоли
И ЗадачиСRLS.НастройкаДелегирования = ЗНАЧЕНИЕ(Справочник.ДелегированиеПрав.ПустаяСсылка)
ИЛИ &ЗадачиМнеПоказыватьДелегированные)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
КОЛИЧЕСТВО(*) КАК ЗадачиМнеВсего,
ЕСТЬNULL(СУММА(ВЫБОР
КОГДА ЗадачиСRLS.ПринятаКИсполнению = ЛОЖЬ
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ), 0) КАК ЗадачиМнеНовые,
ЕСТЬNULL(СУММА(ВЫБОР
КОГДА ЗадачиСRLS.СрокИсполнения = ДАТАВРЕМЯ(1, 1, 1)
ТОГДА 0
КОГДА &ИспользоватьДатуИВремяВСрокахЗадач = ИСТИНА
И ЗадачиСRLS.СрокИсполнения < &ТекущаяДата
ТОГДА 1
КОГДА &ИспользоватьДатуИВремяВСрокахЗадач = ЛОЖЬ
И КОНЕЦПЕРИОДА(ЗадачиСRLS.СрокИсполнения, ДЕНЬ) < &ТекущаяДата
ТОГДА 1
КОНЕЦ), 0) КАК ЗадачиМнеПросроченные
ИЗ
ЗадачиСRLS КАК ЗадачиСRLS
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПодчиненныеЗадачи КАК ВТ_ПодчиненныеЗадачи
ПО ЗадачиСRLS.Ссылка = ВТ_ПодчиненныеЗадачи.ГлавнаяЗадача
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеБизнесПроцессов КАК ДанныеБизнесПроцессов
ПО ЗадачиСRLS.БизнесПроцесс = ДанныеБизнесПроцессов.БизнесПроцесс
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Предмет КАК ВТ_Предмет
ПО ЗадачиСRLS.Ссылка = ВТ_Предмет.Задача
ГДЕ
(НЕ ЕСТЬNULL(ВТ_ПодчиненныеЗадачи.ЕстьПодчиненныеЗадачи, ЛОЖЬ)
И ВЫБОР
КОГДА ДанныеБизнесПроцессов.ГлавнаяЗадача <> ЗНАЧЕНИЕ(Задача.ЗадачаИсполнителя.ПустаяСсылка)
ТОГДА ДанныеБизнесПроцессов.ГлавнаяЗадача.Выполнена = ЛОЖЬ
ИНАЧЕ ИСТИНА
КОНЕЦ
И ВЫБОР
КОГДА НЕ ДанныеБизнесПроцессов.ГлавнаяЗадача В
(ВЫБРАТЬ
ВТ_ПодчиненныеЗадачи.ГлавнаяЗадача
ИЗ
ВТ_ПодчиненныеЗадачи КАК ВТ_ПодчиненныеЗадачи)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
ИЛИ &ЗадачиМнеПоказыватьНеАктуальные)
Показать
Консолью запросов выяснил, что проблема происходит в процессе первой выборки. Если в запросе оставить только создание временных таблиц и вторую выборку, то зависания не происходит.
Если дождаться, когда выполнение запроса зависнет и запустить выполнение такого же запроса в другом сеансе, то он тоже зависнет. Если в другом сеансе запустить запрос без первой выборки, то при висящем первом сеансе он выполняется моментально.
На мысль наводит страшный блок соединений и отборов в проблемной выборке. По рекомендациям 1С попробую проиндексировать соответствующие поля временных таблиц.
8.
Gilev.Vyacheslav
191724.02.21 19:06 Сейчас в теме
(7) при отсуствии данных в кэше по таблице и сканировании таблицы целиком надо стараться наложить как можно раньше более строгий отбор ( пользователь это хорошо, но по нему может быть очень много записей, а фильтр по списку вообще никогда хорошим не был)
то что вы текст нашли хорошо, но над смотреть план запроса
У Богачева есть видео, как с высокой вероятностью посмотреть, что делают пользователи в топе
На ютубе "Видео-кейс от Виктора Богачева. Как узнать, что делал зависший пользователь или фоновое задание 1С"
Опять же, надо понимать, что за СУБД, платформа. Если 8.2 без снепшота и запрос в транзакции, то включить снепшот в SSMS, если СУБД МС, конечно.
Если просто запрос, то выполнить его в консоли пару раз и оценить его выполнение на холодную и горячую. Так же, неплохо было бы план запроса посмотреть. Если проблема в запросе, а не в блокировках