Доброе утро всем. Столкнулся с проблемой в запросах. Конфигурация с 8.2 перекочевала на 8.3, запускаем, вроде все работает, но в один прекрасный момент начинает жутко тормозить (процессор на 100%, все ждут пока завершится 1 запрос). Ковыряния в логах, конфигах и кодах показало следующий результат:
Со стороны PostgreSQL жутко тормозит такой запрос:
DELETE FROM _CRgActP435
WHERE EXISTS(
SELECT 1
FROM (SELECT 1 AS SDBL_DUMMY) SDBL_DUAL
INNER JOIN (SELECT
T4._RecorderTRef AS RecorderTRef,
T4._RecorderRRef AS RecorderRRef,
T4._LineNo AS LineNo_
FROM _CRgActP435 T4
INNER JOIN tt5 T5
ON T4._RecorderTRef = T5._RecorderTRef AND T4._RecorderRRef = T5._RecorderRRef AND T4._LineNo = T5._LineNo LIMIT 100000) T3
ON _CRgActP435._RecorderTRef = T3.RecorderTRef AND _CRgActP435._RecorderRRef = T3.RecorderRRef AND _CRgActP435._LineNo = T3.LineNo_
WHERE _CRgActP435._RecorderTRef = T3.RecorderTRef AND _CRgActP435._RecorderRRef = T3.RecorderRRef AND _CRgActP435._LineNo = T3.LineNo_);
Что в 1С (согласно средства профилирования) отражается как такой вот код, конкретно - строка "НаборЗаписей.Записать(Истина, Ложь);":
Функция УчестьВытеснениеРасчетов(Конт, тбСостав) Экспорт
НаборЗаписей = РегистрыРасчета.РасчетЗарплаты.СоздатьНаборЗаписей();
НаборЗаписей.Загрузить(тбСостав);
// Получим дополнительные записи, имеющие признак сторно, которые необходимо добавить
// в текущий набор для того, чтобы в результате сохранения получился максимальный
// фактический период действия
Конт.Записать();
НаборЗаписей.Отбор.Регистратор.Значение = Конт.Ссылка;
НаборЗаписей.Записать(Истина, Ложь);
ТаблицаСторноЗаписей = НаборЗаписей.ПолучитьДополнение();
Для каждого Строка Из ТаблицаСторноЗаписей Цикл
// Сторно-запись движений
Движение = НаборЗаписей.Добавить();
// Свойства
Движение.ПериодРегистрации = Строка.ПериодРегистрацииСторно;
Движение.ПериодДействияНачало = Строка.ПериодДействияНачалоСторно;
Движение.ПериодДействияКонец = Строка.ПериодДействияКонецСторно;
Движение.БазовыйПериодНачало = Строка.БазовыйПериодНачало;
Движение.БазовыйПериодКонец = Строка.БазовыйПериодКонец;
Движение.ВидРасчета = Строка.ВидРасчета;
Движение.Сторно = Истина;
// Измерения
Движение.ФизЛицо = Строка.ФизЛицо;
Движение.Приказ = Строка.Приказ;
Движение.РУ = Строка.РУ;
// Ресурсы
// Реквизиты
Движение.ГрафикРаботы = Строка.ГрафикРаботы;
Движение.Ставка = Строка.Ставка;
Движение.ВидУчетаВремени = Строка.ВидУчетаВремени;
Движение.Подразделение = Строка.Подразделение;
Движение.Должность = Строка.Должность;
Движение.ЗанимаемыхСтавок = Строка.ЗанимаемыхСтавок;
Движение.НормаДнейЗаМесяц = Строка.НормаДнейЗаМесяц;
Движение.НормаЧасовЗаМесяц = Строка.НормаЧасовЗаМесяц;
Движение.СпособОтраженияВБухучете = Строка.СпособОтраженияВБухучете;
Движение.ЗаменаФизЛицо = Строка.ЗаменаФизЛицо;
Движение.ЗаменаВидРасчета = Строка.ЗаменаВидРасчета;
Движение.ЗаменаПриказ = Строка.ЗаменаПриказ;
Движение.ЗаменаЗанимаемыхСтавок = Строка.ЗаменаЗанимаемыхСтавок;
Движение.БазаРасчета = Строка.БазаРасчета;
Движение.БазаРасчетаВсего = Строка.БазаРасчетаВсего;
Движение.ДополнительныеДанные = Строка.ДополнительныеДанные;
Движение.ДокументОснование = Строка.ДокументОснование;
Движение.ПериодРасчетаСреднегоЗаработкаНачало = Строка.ПериодРасчетаСреднегоЗаработкаНачало;
Движение.ПериодРасчетаСреднегоЗаработкаКонец = Строка.ПериодРасчетаСреднегоЗаработкаКонец;
Движение.ПорогПоВзносам = Строка.ПорогПоВзносам;
Движение.ПериодНачалаРасчетаСредней = Строка.ПериодНачалаРасчетаСредней;
КонецЦикла;
НаборЗаписей.Записать(Истина, Ложь);
Возврат НаборЗаписей;
КонецФункции
Тестовые компьютеры:
Сервер, где установлена PostgreSQL - два ксеона по 4 ядра 2.5 ГГц, 16 гиг оперативки, ssd 240 гб, система ubuntu server 14.04 amd64
Сервер, где установлен 1С - два ксеона по 4 ядра 2.5 ГГц, 8 гиг оперативки, RAID0 HDD 2 штуки, система debian7 server x86 (так же пробовал amd64)
Клиент, где запускается 1с - целерон 2 ядра 2.8 ГГц, 4 гига оперативки, система ubuntu 14.04 x86 (так же пробовал amd64)
Конфиг [необходимо зарегистрироваться для просмотра ссылки]
С такими параметрами, самое простое - заполнение документа "начисление зарплаты" по 1 сотруднику - выполняется 471 секунду! Этот же запрос на PostgreSQL 9.1 и 1С 8.2 под тем же линуксом выполнялс почти мгновенно (до 1 секунды).
Текущие версии:
1С - 8.3.5.1231
PostgreSQL - 9.2.4
Помогите разобраться хотя бы куда копать.