На чём хранить данные 1С: файл, MS SQL или PostgreSQL

· 10 мин

Содержание

Для небольшой базы на 3–5 пользователей хватает файлового режима: всё лежит в одном файле 1Cv8.1CD, отдельная СУБД не нужна. Если пользователей больше десяти, база перевалила за десятки гигабайт или нужна стабильная работа по сети, выбирают клиент-серверный вариант: сервер 1С плюс MS SQL Server или PostgreSQL. IBM Db2 и Oracle платформа 1С:Предприятие 8.3 тоже поддерживает, но на практике их ставят редко.

Дальше по делу: как 1С хранит данные, чем отличаются СУБД, какие параметры крутить в первую очередь и как переехать с файла на сервер, не потеряв ни одной проводки.

Как платформа 1С хранит данные в базе

Конфигурация 1С не работает с таблицами СУБД напрямую. Справочники, документы и регистры, которые видит разработчик, платформа сама превращает в таблицы со служебными именами вроде _Reference25 или _AccumRg1234. Запросы на встроенном языке 1С платформа переводит в SQL того диалекта, который понимает выбранная СУБД.

Отсюда три следствия, которые полезно держать в голове:

  • 🔁 Одна конфигурация работает на любой поддерживаемой СУБД. Бухгалтерия, ЗУП или УТ не переписываются под PostgreSQL — меняется только «склад», где лежат данные.
  • 🚫 Править таблицы прямо в СУБД нельзя. Изменения в обход платформы ломают ссылочную целостность и итоги регистров. Чтение для анализа — допустимо, запись — нет.
  • 📦 Переносимый формат — выгрузка .dt. Она не зависит от СУБД, поэтому через неё базу перевозят из файла в SQL и обратно.

Важный момент про структуру: платформа хранит не только данные, но и саму конфигурацию в таблицах базы (Config, ConfigSave). Поэтому резервная копия средствами СУБД содержит всё целиком — и данные, и метаданные.

Файловый режим: встроенная СУБД 1С

В файловом варианте роль СУБД выполняет сама платформа. Каталог базы содержит файл 1Cv8.1CD и служебные файлы. Клиент открывает этот файл по сети через общую папку, и каждый компьютер сам читает и пишет данные.

Плюсы:

  • ✅ нулевая стоимость: не нужна лицензия на сервер 1С и на СУБД;
  • ✅ развернуть за пять минут — скопировал каталог, добавил базу в список;
  • ✅ копия — это просто копия каталога при закрытой базе.

Минусы:

  • ⚠️ при росте числа пользователей растут конфликты блокировок: файл блокируется крупными кусками, отсюда «ожидание на блокировке» при одновременном проведении;
  • ⚠️ вся работа идёт по сети, поэтому на медленной сети или по VPN база ощутимо тормозит;
  • ⚠️ обрыв связи или выключение компьютера во время записи может повредить файл.

Ориентир по нагрузке — до 5–10 одновременных пользователей при хорошей локальной сети и SSD на машине с базой. Дальше файловый режим становится узким местом, даже если «железо» мощное.

Если файловая база работает на одном компьютере, а остальные подключаются по сети, держите 1Cv8.1CD на SSD и не кладите его в папку, которую синхронизирует облачный диск. Синхронизация открытого файла — частая причина его повреждения.

Восстановить повреждённый файл помогают два инструмента: Администрирование → Тестирование и исправление в Конфигураторе и утилита chdbfl.exe из каталога bin платформы. Обоим нужен монопольный доступ, поэтому запускайте их, когда все пользователи вышли из базы.

Клиент-серверный вариант: MS SQL, PostgreSQL, Db2 и Oracle

В клиент-серверном режиме появляются два компонента: сервер 1С:Предприятия (кластер с рабочими процессами) и сервер СУБД. Клиент обращается к агенту сервера 1С (порт 1540), тот передаёт его менеджеру кластера (1541) и рабочему процессу из диапазона портов, заданного в свойствах рабочего сервера (по умолчанию 1560–1591). Рабочий процесс уже сам ходит в СУБД.

Тяжёлые вычисления выполняются на сервере, по сети к клиенту идут только результаты. Блокировки становятся точечными, на уровне записей, и десятки пользователей проводят документы одновременно.

Microsoft SQL Server

Самый распространённый вариант в компаниях, где уже есть инфраструктура Windows. Платформа хорошо оптимизирована под MS SQL, специалистов по связке много.

  • лицензия SQL Server покупается отдельно, по ядрам или по серверу с клиентскими лицензиями;
  • бесплатная редакция Express подходит для пробы или маленькой базы, но ограничена 10 ГБ на одну базу данных и урезанным использованием памяти и процессора;
  • после ухода Microsoft с российского рынка новые лицензии купить сложнее, и многие при обновлении инфраструктуры переходят на PostgreSQL.

PostgreSQL

Бесплатная СУБД, работает и на Linux, и на Windows. Для 1С нужна не «ванильная» сборка с сайта PostgreSQL, а версия с доработками под платформу: её поставляет фирма 1С вместе с дистрибутивами, а также отечественные производители (например, Postgres Pro в специальной сборке для 1С). В обычной сборке не хватает типа данных и расширений, которые использует платформа.

  • нет затрат на лицензию СУБД;
  • хорошо работает на Linux, что позволяет уйти от Windows Server целиком;
  • требует внимания к настройке: «из коробки» параметры рассчитаны на слабую машину, и без донастройки PostgreSQL работает заметно медленнее MS SQL.

IBM Db2 и Oracle Database

Платформа поддерживает обе СУБД, но в реальных внедрениях они встречаются редко: дорогие лицензии, мало специалистов, которые знают и 1С, и эти СУБД. Имеет смысл, только если компания уже эксплуатирует Db2 или Oracle и хочет держать 1С в той же инфраструктуре.

Сравнение СУБД для 1С по ресурсам и стоимости

Сводная картина, чтобы выбрать без долгих споров:

ВариантПользователей (ориентир)Лицензия СУБДОС сервераСложность сопровождения
Файловая базадо 5–10не нужналюбаяминимальная
MS SQL Expressдо 10–15, база до 10 ГБбесплатноWindowsнизкая
MS SQL Standardдесятки–сотниплатнаяWindows, Linuxсредняя
PostgreSQL для 1Сдесятки–сотнибесплатноLinux, Windowsсредняя, нужна настройка
Db2 / Oracleсотни и большеплатная, дорогаяLinux, Windowsвысокая

Для клиент-серверного варианта в любом случае нужна лицензия на сервер 1С:Предприятия — она не зависит от выбранной СУБД. Плюс клиентские лицензии на пользователей, как и в файловом режиме.

По «железу» разумный старт для базы Бухгалтерии на 20–30 пользователей выглядит так: 8 ядер, 32 ГБ оперативной памяти, база данных и журнал транзакций на NVMe SSD. Сервер 1С и СУБД можно держать на одной машине — при такой нагрузке это даже быстрее, чем гонять данные между двумя серверами по сети.

Сравнивать производительность конфигураций удобно тестом Гилёва (TPC-1C): он даёт условную оценку в «попугаях», по которой видно, где узкое место — процессор, диск или СУБД. Гоняйте его до и после изменения настроек.

Какой вариант хранения подходит вашей базе?

Настройка сервера СУБД под нагрузку 1С

Большая часть жалоб «1С на SQL тормозит» решается настройкой памяти и регулярным обслуживанием. Ниже — параметры, которые меняют в первую очередь.

MS SQL Server

  1. Ограничьте память. В свойствах сервера задайте max server memory. Иначе SQL Server заберёт почти всю оперативную память, а рабочим процессам 1С и ОС ничего не останется. Если 1С и СУБД на одной машине с 32 ГБ, разумно отдать SQL около 20 ГБ.
  2. Отключите параллелизм запросов. Параметр max degree of parallelism ставят в 1 — для нагрузки 1С это стандартная рекомендация: много коротких запросов, параллельные планы им только мешают.
  3. Разнесите файлы. Данные, журнал транзакций и tempdb — на разные быстрые диски, если есть такая возможность. Для tempdb создайте несколько файлов одинакового размера.
  4. Выберите модель восстановления. Simple — если хватает ежедневной полной копии. Full — если нужна точка восстановления на любую минуту, но тогда обязательно настраивайте копирование журнала, иначе он разрастётся на весь диск.
  5. Настройте план обслуживания: обновление статистик ежедневно, перестроение или реорганизация индексов раз в неделю.

Пример ручного обновления статистик для базы buh:

USE buh;
EXEC sp_updatestats;

PostgreSQL

Основные параметры задаются в postgresql.conf. Ориентиры для сервера с 32 ГБ памяти, где работает только СУБД:

shared_buffers = 8GB              # около 25% памяти
effective_cache_size = 22GB       # сколько памяти ОС может отдать под кэш
work_mem = 64MB                   # на одну операцию сортировки
maintenance_work_mem = 1GB        # для VACUUM и создания индексов
max_connections = 500             # с запасом под рабочие процессы 1С
max_locks_per_transaction = 256
standard_conforming_strings = off
escape_string_warning = off

Последние два параметра нужны платформе 1С для корректной работы со строками — в рекомендованных конфигурациях под 1С они выключены. Если сервер 1С стоит на этой же машине, уменьшите shared_buffers и effective_cache_size, оставив память рабочим процессам 1С.

Не отключайте autovacuum: без него таблицы пухнут от «мёртвых» строк, а статистика устаревает. Для больших баз полезно раз в неделю запускать вручную:

vacuumdb --all --analyze --jobs=4 -U postgres

Перезапуск службы PostgreSQL или SQL Server обрывает все сеансы 1С: несохранённые документы у пользователей пропадут. Меняйте параметры, которые требуют перезапуска, вечером или в выходные, предупредив пользователей.

Со стороны 1С

Проверьте, что конфигурация работает в режиме управляемых блокировок — типовые конфигурации последних редакций так и устроены. В автоматическом режиме блокировок СУБД блокирует данные крупнее, и конфликты между пользователями случаются чаще. Режим виден в свойствах корня конфигурации, свойство «Режим управления блокировкой данных».

Перенос базы между СУБД и резервные копии

Переезд с файловой базы на сервер

Порядок одинаковый и для MS SQL, и для PostgreSQL:

  1. Выгоните пользователей из файловой базы и откройте её в Конфигураторе.
  2. Сделайте выгрузку: Администрирование → Выгрузить информационную базу, сохраните файл .dt.
  3. Создайте базу на сервере 1С через консоль администрирования серверов или кнопкой «Добавить» в окне запуска (вариант «Создание новой информационной базы» → «На сервере 1С:Предприятия»). Укажите кластер, имя базы, тип СУБД, сервер СУБД, пользователя и отметьте создание базы данных, если её ещё нет.
  4. Откройте новую пустую базу в Конфигураторе и загрузите файл: Администрирование → Загрузить информационную базу.
  5. Проверьте вход пользователей, обмены и регламентные задания. Регламентные задания в новой базе по умолчанию могут быть заблокированы — включите их, если это рабочая база, а не копия.

Не удаляйте файловую базу, пока не проверили новую на реальной работе хотя бы день.

Переезд с MS SQL на PostgreSQL делается так же — через .dt. Копировать таблицы средствами СУБД между разными СУБД нельзя: форматы хранения отличаются.

Резервные копии

Варианты различаются скоростью и требованиями к доступу:

СпособНужен монопольный доступСкоростьКогда применять
Выгрузка .dtдамедленно на больших базахпереезд, архив перед обновлением
Копия каталога файловой базыбаза должна быть закрытабыстрофайловый режим
BACKUP DATABASE в MS SQLнетбыстроежедневная копия на сервере
pg_dump в PostgreSQLнетбыстроежедневная копия на сервере

Пример копии MS SQL и PostgreSQL:

BACKUP DATABASE buh TO DISK = 'D:\Backup\buh.bak' WITH COMPRESSION, INIT;
pg_dump -U postgres -Fc -f /backup/buh.dump buh

Копия средствами СУБД восстанавливается только в ту же СУБД. Если хотите иметь копию «на все случаи», раз в неделю дополнительно делайте выгрузку .dt.

Копия, которую ни разу не восстанавливали, — это надежда, а не копия. Раз в месяц разворачивайте её в тестовую базу и открывайте в 1С.

Частые ошибки при выборе и настройке СУБД

  • ❌ Ставят обычный PostgreSQL с официального сайта. База не создаётся или падает на первых операциях. Нужна сборка для 1С.
  • ❌ Не ограничивают память MS SQL. Через пару дней работы сервер начинает активно использовать файл подкачки, 1С тормозит у всех.
  • ❌ Модель восстановления Full без копирования журнала. Журнал транзакций вырастает до размера диска, и база встаёт.
  • ❌ Переводят базу на сервер ради скорости при двух пользователях. Быстрее не станет, а сопровождение и лицензии добавятся.
  • ❌ Не проверяют версии. Платформа поддерживает конкретные версии СУБД; перед обновлением PostgreSQL или SQL Server сверьтесь с требованиями вашей версии платформы.

Частые вопросы

Можно ли в файловой базе работать через интернет?
Через общую папку по VPN — технически да, но медленно и с риском повредить файл. Лучше опубликовать базу на веб-сервере или подключаться к компьютеру с базой по RDP.
Нужна ли лицензия сервера 1С, если СУБД бесплатная?
Да. Лицензия сервера 1С:Предприятия нужна для любого клиент-серверного варианта, бесплатность PostgreSQL на неё не влияет.
Можно ли поставить сервер 1С и СУБД на одну машину?
Можно и часто нужно: для баз на несколько десятков пользователей это быстрее, чем два сервера. Главное — правильно поделить оперативную память между ними.
Почему после переезда на сервер некоторые отчёты стали медленнее?
Чаще всего из-за устаревших статистик и неоптимальной настройки памяти в СУБД. Обновите статистики и проверьте параметры памяти, прежде чем искать проблему в конфигурации.
Сколько места займёт база после переноса в SQL?
Обычно больше, чем файл 1Cv8.1CD: добавляются индексы СУБД и журнал транзакций. Закладывайте на диске как минимум двойной запас к текущему размеру.