Ошибка загрузки большого архива 1Cv8.dt в PostgresSQL на платформе 1С 8.3.19
1С для платформы 8.3.19 ускорили загрузку dt-файлов за счет разбивки на несколько фоновых заданий. В итоге словили ошибку блокировки при загрузке в СУБД PostgresSQL большого 1cv8.dt-файла размером 25 Gb «ERROR: canceling statement due to lock timeout». Напишу, как в итоге загрузили этот dt-файл.
- Описание
- Подробнее
Описание
Проблемная ситуация (предыстория):
Получили новый железный сервер: СУБД PostgreSql-13.4-6.1C x64 + Сервер 1С 8.3.19.1467 х64. Нужно было перенести базы со старого сервера (там была СУБД MS SQL + 1C 8.3.16.1876). Базы переносили через dt-файлы. При загрузке dt-файлов небольшого размера до 3 Gb проблем не проявилось. Но когда решили переносить базу 1С:УПП, у которой dt-файл был размером 25 Gb, то не смогли его загрузить. По логу PostgresSQL стали анализировать ошибки. Меняли конфигурационные файлы Postgres’а, где пробовали отлючать/включать/изменять всё что знали (знаем не всё) или нашли на профессиональных форумам. Перезапускали сервис postgres’a, пробовали загрузку снова и снова, но всё равно натыкались на ошибку:
Ошибка загрузки информационной базы. В информационную базу загружены не все данные
по причине:
Конфликт блокировок при выполнении транзакции:
55P03: ERROR: canceling statement due to lock timeout
CONTEXT: COPY _accrgat21396, line 7000
При загрузке то таблиц субконто, то таблиц с бухгалтерскими итогами, на разных строках вылетала ошибка и загрузка dt-файла прерывалась.
Примечание: Большую часть решений по ошибкам в логах и настройках Postgres’а вы сможете найти на форумах и тут на Инфостарте (все действия, которые мы делали я тут не привожу подробно, т.к. статья не руководство по настройке и установке, а разбор конкретной проблемы с платформой 1С 8.3.19).
В итоге большее время заняли 2 ошибки:
- LOG: Could not rename temporary statistics file "pg_stat_tmp/global.tmp" to "pg_stat_tmp/global.stat": Permission denied — как оказалось, являлась ошибкой установленного релиза PostgreSql-13.4-6.1C_x64, которая потребовала переустановки другого релиза PostgresPro_13.5.1_64bit_Setup. Переустановили, ошибка ушла, сама она описана на форумах, решается либо патчами либо установкой подходящего релиза PostgresPro.
< 2022-01-27 21:53:59.443 MSK >LOG: starting PostgreSQL 13.4, compiled by Visual C++ build 1800, 64-bit
< 2022-01-27 21:53:59.445 MSK >LOG: listening on IPv4 address "0.0.0.0", port 5432
< 2022-01-27 21:53:59.575 MSK >LOG: database system was shut down at 2022-01-27 21:53:50 MSK
< 2022-01-27 21:53:59.594 MSK >LOG: database system is ready to accept connections
< 2022-01-27 22:04:14.761 MSK >LOG: could not rename temporary statistics file "pg_stat_tmp/global.tmp" to "pg_stat_tmp/global.stat": Permission denied
- ERROR: canceling statement due to lock timeout — основная ошибка блокировки, которую многократными манипуляциями с переконфигурированием Postgres’а нам не удавалось решить.
< 2022-01-28 18:41:29.405 MSK >СООБЩЕНИЕ: запускается PostgreSQL 13.5, compiled by Visual C++ build 1925, 64-bit
< 2022-01-28 18:41:29.408 MSK >СООБЩЕНИЕ: для приёма подключений по адресу IPv4 "0.0.0.0" открыт порт 5432
< 2022-01-28 18:41:29.561 MSK >СООБЩЕНИЕ: система БД была выключена: 2022-01-28 18:41:24 MSK
< 2022-01-28 18:41:29.581 MSK >СООБЩЕНИЕ: система БД готова принимать подключения
< 2022-01-28 18:54:48.036 MSK >ERROR: canceling statement due to lock timeout
< 2022-01-28 18:54:48.036 MSK >CONTEXT: COPY _accrg1375, line 1000
Стали копать в 1С:Платформу….
прочитали, что в новых особенностях платформы 8.3.19 есть:
Ускорена загрузка из .dt-файла в клиент-серверном варианте информационной базы за счет использования для загрузки нескольких фоновых заданий. Для получения существенного ускорения желательно, чтобы кластер серверов и СУБД располагались на одном компьютере или чтобы кластер серверов и СУБД были связаны каналом с высокой пропускной способностью (1 Гбайт/с и выше).
угумс…. в несколько фоновых заданиях…. это вероятно, может блокировать ресурсы, а если мы попробуем в одном… как это сделать… а вот:
Для команды пакетного запуска конфигуратора /RestoreIB реализован параметр -JobsCount, позволяющий управлять количеством используемых фоновых заданий.
Запустили конфигурацию с нужным ключом, для загрузки принудительно в одном потоке
/RestoreIB "C:\MK_HOLD_12_01_2022.dt" -JobsCount 1
Успех!!! dt-файл 25 Gb развернулся в базу 300 Gb …. А товарищ, резюмировал: "Опять привет от 1С, перемудрили"…
Коллеги, надеюсь, эта статья обратит ваше внимание на новую особенность регулирования потоков загрузки dt-файлов 1С в нескольких потоках, где-то это может и вам пригодиться.