При развертывании крупных баз данных 1С:Предприятие из резервных копий формата .dt системные администраторы часто сталкиваются с аппаратными и программными ограничениями. Одной из наиболее показательных является ошибка СУБД Microsoft SQL Server: "there is insufficient memory in resource pool ‘default’ to run this query" (код ошибки 701). Эта проблема возникает не на стороне сервера приложений 1С, а непосредственно в СУБД, сигнализируя об острой нехватке оперативной памяти во время импорта данных.
Рассмотрим природу этой проблемы. Файл .dt представляет собой сильно сжатый архив. Файл объемом около 4 ГБ в распакованном виде внутри СУБД может занимать от 30 до 50 ГБ и более. В процессе загрузки СУБД выполняет ресурсоемкие операции: массовую вставку записей (Bulk Insert) и одновременное построение индексов таблиц. Если серверу СУБД не хватает выделенной оперативной памяти для обработки кэша транзакций или индексации, процесс аварийно прерывается.
В этой статье мы подробно разберем по шагам, как оптимизировать настройки СУБД MS SQL Server, обойти ограничения разрядности клиента 1С и успешно загрузить базу данных любого размера.
Прежде чем приступать к изменению конфигурационных файлов и параметров памяти, нам необходимо выяснить, какая именно редакция Microsoft SQL Server установлена на сервере. Это критически важно по следующим причинам:
.dt превышает этот объем, загрузка гарантированно завершится ошибкой превышения лимитов.Если в вашей системе развернута редакция Express, для загрузки базы размером более 10 ГБ вам потребуется выполнить переход на редакцию Standard или Enterprise.
По умолчанию MS SQL Server настроен таким образом, чтобы потреблять практически всю доступную оперативную память на сервере. Если сервер приложений 1С и СУБД установлены на одном физическом сервере или в одной виртуальной машине, возникает жесткий конфликт за ресурсы между процессами rphost сервера 1С и процессом sqlservr.exe.
Чтобы стабилизировать систему и выделить гарантированный объем памяти для выполнения операций импорта, ограничим аппетиты SQL Server:
В редакциях Enterprise по умолчанию могут действовать внутренние ограничения на выделение памяти под один тяжелый запрос в пуле ресурсов default. Во время массового импорта данных из файла выгрузки 1С формирует огромные пакеты данных, которые могут блокироваться внутренними политиками регулятора ресурсов.
Разберем, как временно увеличить максимальный процент памяти для стандартного пула ресурсов. Для этого выполним следующий SQL-скрипт в окне создания запросов SSMS:
ALTER RESOURCE POOL "default" WITH (MAX_MEMORY_PERCENT = 90);
ALTER RESOURCE GOVERNOR RECONFIGURE;
Данная команда позволяет пулу по умолчанию использовать до 90% всей выделенной для SQL Server оперативной памяти при выполнении сложных транзакций, что нивелирует ошибку недостатка ресурсов в пуле.
Во время развертывания базы данных из .dt СУБД активно использует системную базу данных tempdb для хранения промежуточных результатов, сортировки данных и построения индексов. Неправильная конфигурация этой базы часто становится узким местом.
Выясним ключевые параметры настройки tempdb, которые помогут ускорить загрузку и предотвратить сбои:
tempdb (mdf и ldf) расположены на быстром SSD или NVMe накопителе. Скорость дисковых операций напрямую влияет на потребление памяти при транзакциях.tempdb — например, по 256 МБ или 512 МБ.В практической деятельности часто возникает ситуация, когда на рабочих местах пользователей используется 32-битный клиент 1С (например, из-за несовместимости старых драйверов торгового оборудования, таких как принтеры чеков или сканеры штрихкодов, с 64-битной платформой). Однако запуск процесса загрузки тяжелого .dt файла через 32-битный Конфигуратор является грубой ошибкой.
Любой 32-битный процесс в операционной системе Windows имеет жесткое ограничение на адресацию виртуальной памяти — не более 2 ГБ (в редких случаях до 3 ГБ при использовании специальных ключей операционной системы). При разборе файла .dt Конфигуратор считывает большие объемы метаданных и кэширует их в своей локальной памяти. Превысив порог в 2 ГБ, 32-битный процесс аварийно завершается, попутно отправляя на сервер некорректно завершенные пакеты данных, что также провоцирует ошибки СУБД.
Применим эффективную и безопасную схему обхода этого ограничения:
Перед началом импорта тяжелых данных рекомендуется выполнить профилактические работы на стороне кластера серверов 1С:
rphost и освободить фрагментированную оперативную память сервера приложений.Если все вышеперечисленные шаги выполнены, но загрузка по-прежнему падает с ошибкой памяти примерно на одном и том же проценте выполнения, высока вероятность того, что сам исходный файл .dt содержит внутренние логические повреждения метаданных.
Проанализируем алгоритм исправления поврежденного архива выгрузки:
.dt в эту файловую базу. Ограничения файлового формата на размер таблиц (не более 4 ГБ на таблицу) касаются только физического размещения таблиц данных, при этом структура конфигурации и небольшие базы данных могут успешно развернуться локально..dt.Совместное применение методов оптимизации памяти MS SQL Server, правильное распределение пулов ресурсов и временное использование 64-битной платформы Конфигуратора гарантируют успешное развертывание даже критически больших баз данных в клиент-серверном варианте работы.