На чём хранить данные 1С: файл, MS SQL или PostgreSQL
Содержание
Для небольшой базы на 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
- Ограничьте память. В свойствах сервера задайте
max server memory. Иначе SQL Server заберёт почти всю оперативную память, а рабочим процессам 1С и ОС ничего не останется. Если 1С и СУБД на одной машине с 32 ГБ, разумно отдать SQL около 20 ГБ. - Отключите параллелизм запросов. Параметр
max degree of parallelismставят в 1 — для нагрузки 1С это стандартная рекомендация: много коротких запросов, параллельные планы им только мешают. - Разнесите файлы. Данные, журнал транзакций и
tempdb— на разные быстрые диски, если есть такая возможность. Дляtempdbсоздайте несколько файлов одинакового размера. - Выберите модель восстановления.
Simple— если хватает ежедневной полной копии.Full— если нужна точка восстановления на любую минуту, но тогда обязательно настраивайте копирование журнала, иначе он разрастётся на весь диск. - Настройте план обслуживания: обновление статистик ежедневно, перестроение или реорганизация индексов раз в неделю.
Пример ручного обновления статистик для базы 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:
- Выгоните пользователей из файловой базы и откройте её в Конфигураторе.
- Сделайте выгрузку:
Администрирование → Выгрузить информационную базу, сохраните файл.dt. - Создайте базу на сервере 1С через консоль администрирования серверов или кнопкой «Добавить» в окне запуска (вариант «Создание новой информационной базы» → «На сервере 1С:Предприятия»). Укажите кластер, имя базы, тип СУБД, сервер СУБД, пользователя и отметьте создание базы данных, если её ещё нет.
- Откройте новую пустую базу в Конфигураторе и загрузите файл:
Администрирование → Загрузить информационную базу. - Проверьте вход пользователей, обмены и регламентные задания. Регламентные задания в новой базе по умолчанию могут быть заблокированы — включите их, если это рабочая база, а не копия.
Не удаляйте файловую базу, пока не проверили новую на реальной работе хотя бы день.
Переезд с 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 сверьтесь с требованиями вашей версии платформы.
Частые вопросы
Можно ли в файловой базе работать через интернет?
Нужна ли лицензия сервера 1С, если СУБД бесплатная?
Можно ли поставить сервер 1С и СУБД на одну машину?
Почему после переезда на сервер некоторые отчёты стали медленнее?
Сколько места займёт база после переноса в SQL?
1Cv8.1CD: добавляются индексы СУБД и журнал транзакций. Закладывайте на диске как минимум двойной запас к текущему размеру.