В Postgres до придела растут временные файлы при закрытии месяца в ERP.

1. Sergus 28.02.20 09:21 Сейчас в теме
Добрый день!
Ситуация такая: имеем Postgres 10.3, 1С 8.3.15.1830, ERP2 2.4.11.65 и при закрытии месяца, регламентным заданием в ночь, создаются временные файлы до тех пор пока не закончится все свободное место (конкретно Гигов 150 примерно за час). Ранее была похожая ситуация при расчете документа увольнения и там виновником был запрос в процедуре СоздатьВТНачисленияСотрудниковПоПоказателямПерерасчетов в модуле РасчетЗарплатыРасширенный

ВЫБРАТЬ РАЗЛИЧНЫЕ
	СотрудникиПериоды.Период КАК Период,
	СотрудникиПериоды.Организация КАК Организация,
	СотрудникиПериоды.Сотрудник КАК Сотрудник,
	СотрудникиПериоды.Начисление КАК Начисление,
	Начисления.ЯвляетсяЛьготой КАК ЯвляетсяЛьготой,
	СотрудникиПериоды.ИзмененныеДанные КАК ИзмененныеДанные
ПОМЕСТИТЬ ВТНачисленияСотрудниковПоПоказателямПерерасчетов
ИЗ
	ВТИзмеренияДатыДляСрезаПлановыхНачислений КАК СотрудникиПериоды
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланВидовРасчета.Начисления КАК Начисления
		ПО СотрудникиПериоды.Начисление = Начисления.Ссылка
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПоказателиРасчетаЗарплаты КАК ПоказателиРасчетаЗарплаты
		ПО (ПоказателиРасчетаЗарплаты.Ссылка = СотрудникиПериоды.ИзмененныеДанные)
		ЛЕВОЕ СОЕДИНЕНИЕ ВТПлановыеНачисленияСрезПоследних КАК ПлановыеНачисления
		ПО СотрудникиПериоды.Период = ПлановыеНачисления.Период
			И СотрудникиПериоды.ГоловнаяОрганизация = ПлановыеНачисления.ГоловнаяОрганизация
			И СотрудникиПериоды.Сотрудник = ПлановыеНачисления.Сотрудник
			И СотрудникиПериоды.Начисление = ПлановыеНачисления.Начисление
			И (НЕ ПоказателиРасчетаЗарплаты.ПериодическийПоказательСотрудника
				ИЛИ СотрудникиПериоды.ДокументОснование = ПлановыеНачисления.ДокументОснование)
			И (ПлановыеНачисления.Используется)
ГДЕ
	(НЕ ПлановыеНачисления.Период ЕСТЬ NULL
			ИЛИ Начисления.СпособВыполненияНачисления = ЗНАЧЕНИЕ(Перечисление.СпособыВыполненияНачислений.ПоЗначениюПоказателяПриОкончательномРасчете))
Показать


тут Данную проблему обошли тем что перестали производить расчет в документе Увольнение делается теперь отдельными документами расчет и увольнение. Кто то сталкивался с подобным, есть идеи куда копать?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. ansh15 28.02.20 11:16 Сейчас в теме
(1)
имеем Postgres 10.3

С того момента вышло уже не менее десятка обновлений СУБД со значительным количеством улучшений, исправлений, а также оптимизацией выполнения запросов в различных случаях. Актуальная версия на сегодняшний день - 11.5-12.1С. Есть еще тестовая 11.5-17.1С.
16. a.doroshkevich 1521 29.02.20 18:38 Сейчас в теме
(1)в каком конкретно каталоге у Вас создаются эти файлы?
2. VmvLer 28.02.20 09:53 Сейчас в теме
проанализируйте в отладке почему временные файлы поедают диски.
вероятно...
1. так и должно быть если ваша ИБ это горячий юпитер, а не холодная луна.
2. косяки с удалением временных, понадеялись что они удаляться сами а вот и нет.

если варик 1, то только сидеть и плакать когда наступит эра стабильной работы больших данных в 1С.
если варик 2, то регистрируем грамотный результат анализа как ошибку на ИТС и сидим плачем
пока 1С не найдет жирного кролика для теста и того кто с удовольствием будет копаться в больших данных - ведь на песочной демке все работает и красиво.
если варик n, то...
3. DmitriyPerevalov 28.02.20 10:03 Сейчас в теме
Аппаратно.
1. Лучше бы сразу удвоить ОЗУ на сервере СУБД. А лучше провести анализ на самый большой объём выборки запроса и добавить ОЗУ до этого размера + запас (база же растёт).
2. Добавить дискового пространства (но лучше ОЗУ добавлять)

Программно.
1. Анализировать запросы и удалять временные таблицы, когда они уже не нужны.
2. Анализировать запросы и накладывать дополнительные ограничения, чтобы итоговые выборки были меньше по количеству записей = объёму.
3. Анализировать закрытие и вынести те блоки, которые можно выполнить отдельно заранее.
4. Sergus 28.02.20 10:41 Сейчас в теме
Дополнение. Забыл уточнить, база вся весит 15 гигов, с Увольнением повторялось и на файловой версии, закрытие месяца на файловой не тестировал. на сервере сейчас 80 Гигабайт ОЗУ, половину съедает 1С в рабочее время, Posgres по памяти: shared_buffers = 9GB, temp_buffers = 512MB, work_mem = 256MB, maintenance_work_mem = 1GB
5. VmvLer 28.02.20 11:08 Сейчас в теме
(4) бд невелика, но 80гг ОП для прод-ерп маловато.
закрытие месяца очень любит кушать память и падает когда она близка к пределам.
7. Sergus 28.02.20 11:30 Сейчас в теме
До обновления Postgres планирую добраться в выходные, но меня это мало обнадеживает в связи с тем что аналогичная ситуация в документе Увольнение повторилась и на файловой версии.
8. starik-2005 3098 28.02.20 11:39 Сейчас в теме
1. Временные файлы создаются где? Была какая-то замута с платформой в связи с перемещением контекста через временное хранилище, которое раньше чистилось, а теперь перестало, но для "старых" алгоритмов народ постоянно кладет в хранилище измененные данные при переключении контекста , надеясь, что 1С сама почистит за ним, ан нет...
2. ОСь какая?
9. Sergus 28.02.20 12:06 Сейчас в теме
(8) Сервер на WinServer 2016, временные файлы создаются в каталоге базы, в логе полно записей наподобие :
INS ERT INTO pg_temp.tt139 (_Q_000_F_000TRef, _Q_000_F_000RRef, _Q_000_F_001, _Q_000_F_002RRef, _Q_000_F_003RRef, _Q_000_F_004, _Q_000_F_005, _Q_000_F_006_TYPE, _Q_000_F_006_RTRef, _Q_000_F_006_RRRef) SEL ECT DISTINCT
T1.RecorderTRef,
T1.RecorderRRef,
T1.LineNo_,
T1.Fld65221RRef,
T1.CalcKindRRef,
T1.APDateFrom_,
T1.APDateTill_,
T1.Fld65247_TYPE,
T1.Fld65247_RTRef,
T1.Fld65247_RRRef
FR OM (SEL ECT
T2._RecorderTRef AS RecorderTRef,
T2._RecorderRRef AS RecorderRRef,
T2._LineNo AS LineNo_,
T2._Fld65221RRef AS Fld65221RRef,
T2._CalcKindRRef AS CalcKindRRef,
CASE WHEN T3._APDateFrom IS NULL THEN T2._APDateFrom ELSE T3._APDateFrom END AS APDateFrom_,
CASE WHEN T3._APDateTill IS NULL THEN T2._APDateTill ELSE T3._APDateTill END AS APDateTill_,
T2._Fld65247_TYPE AS Fld65247_TYPE,
T2._Fld65247_RTRef AS Fld65247_RTRef,
T2._Fld65247_RRRef AS Fld65247_RRRef
FROM _CRg65220 T2
LEFT OUTER JOIN _CRgActP65254 T3
ON (T2._RecorderTRef = T3._RecorderTRef AND T2._RecorderRRef = T3._RecorderRRef AND T2._LineNo = T3._LineNo) AND (T3._Fld2331 = CAST(0 AS NUMERIC))
WH ERE ((T2._Fld2331 = CAST(0 AS NUMERIC))) AND ((T3._APDateFrom <> '0001-01-01 00:00:00'::timestamp OR T3._APDateFrom IS NULL) AND (T2._Fld65221RRef, T2._ActionPeriod) IN
(SELECT
T4._Q_000_F_005RRef AS Q_001_F_000RRef,
T4._Q_000_F_001 AS Q_001_F_001_
FR OM pg_temp.tt137 T4) AND T2._CalcKindRRef IN
(SELE CT
T5._Q_000_F_000RRef AS Q_001_F_000RRef
FR OM pg_temp.tt138 T5) AND (T2._Fld65224_TYPE = '\\001'::bytea AND T2._Fld65224_RTRef = '\\000\\000\\000\\000'::bytea AND T2._Fld65224_RRRef = '\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\00­0\\000\\000\\000\\000'::bytea))) T1

после очередного запроса уже сообщается что нет свободного места. Получается что Postgres честно отрабатывает то что ему шлет 1С, пока не упирается в физические приделы.
10. starik-2005 3098 28.02.20 12:56 Сейчас в теме
(9)
в логе полно записей наподобие :
В принципе похоже на файлы технологического журнала. Смотрите, есть ли файл logcfg.xml в каталогах базы, платформы или где еще...
21. ansh15 05.03.20 11:01 Сейчас в теме
(9)
T3._APDateFrom <> '0001-01-01 00:00:00'::timestamp

Почему-то кажется, что эта дата какая-то "нехорошая" для этого запроса.
22. starik-2005 3098 05.03.20 18:25 Сейчас в теме
(21) Обычная пустая дата. В Постгресе нет тех ограничений, которые есть в MS SQL, в котором для разрешения пустых дат есть смещение этих дат (там пустая дата - это "2001-01-01", и все даты смещены на 2к лет, т.е. 4020-й год - это 2020й).
23. ansh15 06.03.20 10:18 Сейчас в теме
(22)
Обычная пустая дата

На PostgreSQL 11.5-12.1C, в ЗКГУ 3.1.10.309, наличие "обычной пустой даты" в данных сотрудника(дата начала действия документа) стало приводить к ошибке СУБД при выполнении рег. задания "обновление индекса ППД"(точный текст ошибки не помню).
На более ранних версиях СУБД и конфигурации "никогда такого не было".
Полечилось установкой даты. Так что, как знать...
24. starik-2005 3098 06.03.20 11:40 Сейчас в теме
(23) индекс ППД, имхо, не в СУБД хранится, а в отдельных файлах 1С. То, что на пустую дату ругается, вполне могло быть следствием ошибки платформы, когда неуглядели разработчики и подшаманили чтото с индексами своими.
11. Sergus 28.02.20 15:14 Сейчас в теме
Конечно файл ТЖ есть, а этот лог от Postgres, и судя по логу во временные таблицы перегружаются данные движения по регистру бухучата (всех таблиц), собственно как только он дошел до регистра ЗаработанныеПраваНаОтпуск то уже данные от него не выгрузились во временную таблицу, закончилось место.
12. starik-2005 3098 28.02.20 16:16 Сейчас в теме
(11) тогда вопросы:
1. В каталоге какой базы? В каталоге кластера? Короче, нужно понять, что за каталог.
2. Смысла создавать файлы с запросами у постгреса никакого нет, если не было установлено какое-либо расширение для этого (может быть кто-то смотрел, какие запросы выполняет сервер - каакой-нить "эксперт", который забыл потом это отключить). Смотрите тут: http://www.dtulyakov.ru/postgresql_log.html
13. Sergus 28.02.20 16:28 Сейчас в теме
в каталоге базы Pjstgres, смотрю тут это все только я.
14. starik-2005 3098 28.02.20 16:32 Сейчас в теме
18. Sergus 02.03.20 16:14 Сейчас в теме
(14) Логи уже настроены, только не все подряд. Углубился в логи и сопоставив их с метаданными 1С получается что 1С создает кучу временных таблиц, последние пару дней происходит "сжирание" оперативки.
19. starik-2005 3098 02.03.20 16:17 Сейчас в теме
(18)
1С создает кучу временных таблиц
1С всегда "создает кучу временных таблиц". Так юных падаванов учат программировать на 1С - это неизбежное зло, которое лучше варианта, когда эти юные падаваны будут делать это все на подзапросах без фильтрации.

Если логи - указанные файлы - создаются в каталоге кластера Postgres, то чтобы они перестали создаваться, стоит прибить эту настройку. Или это неочевидно?
20. Sergus 03.03.20 13:55 Сейчас в теме
(19) А что не за такие настройки, если ограничивать временные файлы то просто будет откидываться транзакция которой не повезло и на ней закончилось дозволенное место.
15. AlexO 136 29.02.20 17:07 Сейчас в теме
Поглядите, может, это особенность работы Postgres и 1С? Они намного хуже дружат друг с другом, чем MS SQL и 1С.
Помню, Postgres и таблицы крашил 1С-у, и неверно запросы исполнял в базе. Ну что поделать - бесплатный же....
17. starik-2005 3098 02.03.20 11:37 Сейчас в теме
(15)
Postgres и таблицы крашил 1С-у, и неверно запросы исполнял в базе.
У меня так даже платный MS SQL делал. Коментарии бы почитали для начала...
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот