![]() |
|
ЗУП 2.5 Медленная запись в ГрафикиРаботыПоВидамВремени | ☑ | ||
---|---|---|---|---|
0
Homer
11.02.21
✎
11:44
|
SQL. Базы идентичные. 8.3.17.1851
Создаем и проводим табель (орг1). В табеле 10 строк. В регистр ГрафикиРаботыПоВидамВремени осуществляется ~1200 перезаписей. Время записи 60 сек. (если очищать регистр то 40 сек). На том же сервере и SQL Есть еще одна база (Орг2). Аналогичная операция занимает 6 сек. Смотрю общее кол записей в регистре ГрафикиРаботыПоВидамВремени. Орг1: 1 мил записей – 60 сек перезапись Орг2: 4 мил записей – 6 сек перезапись. При проведении документа в Орг1 вижу в консоли 1с что идет большой захват базы данных. (в 10 раз больше чем в Орг2) Запись не линейна т.е. если в табеле 100 строк то запись уже может длится 1,5 часа. Пытаюсь оптимизировать код. Результат 0 // Процедура удаляет все записи из регистра за ПериодРегистрации, // если документ последний в этом периоде, в разрезе сотрудников Процедура УдалитьЗаписиЗаПериодДокумента() Запрос = Новый Запрос; МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("Документ", Ссылка); Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ГрафикиРаботы.Сотрудник КАК ГрафикРаботы, | ГрафикиРаботы.Ссылка.ПериодРегистрации КАК Месяц |ПОМЕСТИТЬ ВТСотрудникоМесяц |ИЗ | Документ.ТабельУчетаРабочегоВремениОрганизации.ОтработанноеВремя КАК ГрафикиРаботы |ГДЕ | ГрафикиРаботы.Ссылка = &Документ"; Запрос.Выполнить(); Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ |СотрудникоМесяц.ГрафикРаботы КАК Сотрудник, |СотрудникоМесяц.Месяц КАК Месяц, |ВЫБОР | КОГДА ВведенныеДокументы.ГрафикРаботы ЕСТЬ NULL | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ |КОНЕЦ КАК УдалятьЗаписиЗаПериод | |ИЗ | ВТСотрудникоМесяц КАК СотрудникоМесяц |ЛЕВОЕ СОЕДИНЕНИЕ | (ВЫБРАТЬ | СотрудникоМесяц.ГрафикРаботы, | СотрудникоМесяц.Месяц | ИЗ | ВТСотрудникоМесяц КАК СотрудникоМесяц | ВНУТРЕННЕЕ СОЕДИНЕНИЕ | РегистрСведений.ГрафикиРаботыПоВидамВремени КАК ГрафикиРаботы | ПО | ГрафикиРаботы.ГрафикРаботы = СотрудникоМесяц.ГрафикРаботы | И НЕ ГрафикиРаботы.План | И ГрафикиРаботы.Месяц = СотрудникоМесяц.Месяц | И ГрафикиРаботы.Документ <> &Документ | И ГрафикиРаботы.Документ <> ЗНАЧЕНИЕ(Документ.СдельныйНаряд.ПустаяСсылка) | И ГрафикиРаботы.Документ <> ЗНАЧЕНИЕ(Документ.ТабельУчетаРабочегоВремениОрганизации.ПустаяСсылка) | И ГрафикиРаботы.Документ <> НЕОПРЕДЕЛЕНО | )КАК ВведенныеДокументы |ПО | ВведенныеДокументы.ГрафикРаботы = СотрудникоМесяц.ГрафикРаботы | И ВведенныеДокументы.Месяц = СотрудникоМесяц.Месяц"; мВыборкаЗапроса = Запрос.Выполнить().Выгрузить(); МенеджерВременныхТаблиц.Закрыть(); Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить(); ЭлементБлокировки.Область = "РегистрСведений.ГрафикиРаботыПоВидамВремени"; ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; ЭлементБлокировки.ИсточникДанных = мВыборкаЗапроса; ЭлементБлокировки.УстановитьЗначение("План", Ложь); ЭлементБлокировки.ИспользоватьИзИсточникаДанных("ГрафикРаботы", "ГрафикРаботы"); ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Месяц", "Месяц"); Блокировка.Заблокировать(); НаборЗаписей = РегистрыСведений.ГрафикиРаботыПоВидамВремени.СоздатьНаборЗаписей(); НачатьТранзакцию(); Для Каждого ВыборкаЗапроса ИЗ мВыборкаЗапроса Цикл НаборЗаписей.Отбор.План.Установить(Ложь); НаборЗаписей.Отбор.ГрафикРаботы.Установить(ВыборкаЗапроса.Сотрудник); НаборЗаписей.Отбор.Месяц.Установить(ВыборкаЗапроса.Месяц); Если ВыборкаЗапроса.УдалятьЗаписиЗаПериод Тогда НаборЗаписей.Очистить(); НаборЗаписей.Записать(); Иначе НаборЗаписей.Прочитать(); Для Каждого Запись Из НаборЗаписей Цикл Если (Запись.Документ = Ссылка) Тогда Запись.ОсновноеЗначениеПолное = 0; Запись.ДополнительноеЗначениеПолное = 0; Запись.Документ = Документы.ТабельУчетаРабочегоВремениОрганизации.ПустаяСсылка(); КонецЕсли; КонецЦикла; НаборЗаписей.Записать(); КонецЕсли; КонецЦикла; ЗафиксироватьТранзакцию(); КонецПроцедуры // УдалитьЗаписиЗаПериодДокумента() |
|||
1
Homer
11.02.21
✎
12:12
|
||||
2
mistеr
11.02.21
✎
12:34
|
(0) Статистику пересоберите.
|
|||
3
mistеr
11.02.21
✎
12:35
|
Дизайн всей этой хрени, конечно, то еще УГ.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |