Для клиент-серверного режима 1С необходимы два компонента: Сервер 1С:Предприятие (обрабатывает бизнес-логику) и СУБД (хранит данные). Мы выбрали PostgreSQL как СУБД — он бесплатен, хорошо оптимизирован для 1С и поддерживается фирмой «1С» официально.
Мы подготовили выделенный сервер (оба компонента на одной машине — для 45 пользователей это оптимально):
# Характеристики сервера
CPU: Intel Xeon E-2388G (8 ядер, 3.2 ГГц, turbo 5.1 ГГц)
RAM: 64 ГБ DDR4 ECC
Disk: 2× Samsung PM9A3 960GB NVMe (RAID 1)
OS: Ubuntu 22.04 LTS Server
Network: 1 Гбит/с (внутренняя сеть)
# Почему именно эти характеристики:
# - CPU: 1С однопоточна для запросов, важна частота ядра (>3 ГГц)
# - RAM: 64 ГБ — PostgreSQL shared_buffers + кеш 1С + ОС
# - NVMe: критично для PostgreSQL — random I/O
# - RAID 1: отказоустойчивость без потери производительности чтения
Для 1С используется специальная сборка PostgreSQL от компании «Postgres Professional» (или сборка «1С»), содержащая патчи для корректной работы с кириллицей и планировщиком запросов:
# Устанавливаем PostgreSQL 15 от Postgres Pro (сборка для 1С)
# Добавляем репозиторий Postgres Pro
sudo sh -c 'echo "deb https://repo.postgrespro.ru/pg1c-15/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/pg1c.list'
wget -qO - https://repo.postgrespro.ru/pg1c-15/keys/GPG-KEY-PG1C-15 | sudo apt-key add -
sudo apt update
sudo apt install -y postgrespro-1c-15 postgrespro-1c-15-contrib
# Проверяем версию
sudo -u postgres psql -c "SELECT version();"
# PostgreSQL 15.6 (Postgres Pro 1C 15.6.1)
# Инициализация кластера (если не создан автоматически)
sudo pg_createcluster 15 main --locale=ru_RU.UTF-8
# Проверяем, что локаль правильная
sudo -u postgres psql -c "SHOW lc_collate;"
# ru_RU.UTF-8
Теперь — ключевой момент: тюнинг PostgreSQL для 1С. Дефолтные настройки рассчитаны на маленькие базы:
# /etc/postgresql/15/main/postgresql.conf
# Тюнинг для 1С (45 пользователей, база 18 ГБ, 64 ГБ RAM)
# === Память ===
# shared_buffers: 25% от RAM, но для 1С часто оптимально 8-16 ГБ
shared_buffers = 16GB
# work_mem: RAM для сортировок и хеш-операций ПО ОДНОЙ ОПЕРАЦИИ
# 1С генерирует сложные запросы с множеством JOIN
# 45 пользователей × ~4 операции = 180 слотов
# 64GB - 16GB(shared) - 4GB(OS) = 44GB свободно
# 44GB / 180 ≈ 250MB, берём с запасом
work_mem = 256MB
# maintenance_work_mem: для VACUUM, CREATE INDEX
maintenance_work_mem = 2GB
# effective_cache_size: подсказка планировщику, сколько RAM доступно для кеширования
# shared_buffers + файловый кеш ОС ≈ 75% RAM
effective_cache_size = 48GB
# === WAL и транзакции ===
wal_buffers = 64MB
checkpoint_completion_target = 0.9
min_wal_size = 1GB
max_wal_size = 4GB
# === Планировщик запросов ===
# Критично для 1С! Дефолтные значения дают неоптимальные планы
random_page_cost = 1.1 # NVMe SSD, random ≈ sequential
effective_io_concurrency = 200 # NVMe поддерживает параллелизм
default_statistics_target = 200 # Более точная статистика для 1С
# === Соединения ===
max_connections = 200 # 45 пользователей × 3-4 соединения + запас
# === Параллелизм ===
max_worker_processes = 8
max_parallel_workers_per_gather = 4
max_parallel_workers = 8
# === Автовакуум (критично для 1С!) ===
autovacuum = on
autovacuum_max_workers = 4
autovacuum_naptime = 30s
autovacuum_vacuum_threshold = 50
autovacuum_analyze_threshold = 50
autovacuum_vacuum_scale_factor = 0.05
autovacuum_analyze_scale_factor = 0.02
autovacuum_vacuum_cost_delay = 10ms
# === Логирование ===
log_min_duration_statement = 3000 # Логируем запросы >3 сек
log_checkpoints = on
log_lock_waits = on
lock_timeout = 60000 # 60 сек таймаут на блокировку
# === Специфика 1С ===
escape_string_warning = off
standard_conforming_strings = off
# Эти параметры требуются сборкой 1С для корректной работы строк
# Применяем настройки
sudo systemctl restart postgresql
# Создаём пользователя и базу для 1С
sudo -u postgres psql << 'SQL'
CREATE USER usr1c WITH PASSWORD 'Str0ng1CP@ss!2026' CREATEDB;
CREATE DATABASE technoopt OWNER usr1c TEMPLATE template0 ENCODING 'UTF8' LC_COLLATE 'ru_RU.UTF-8' LC_CTYPE 'ru_RU.UTF-8';
GRANT ALL PRIVILEGES ON DATABASE technoopt TO usr1c;
SQL
# Настройка pg_hba.conf — доступ только из локальной сети
sudo bash -c 'cat >> /etc/postgresql/15/main/pg_hba.conf << EOF
# 1С Server
host technoopt usr1c 127.0.0.1/32 md5
host technoopt usr1c 10.0.1.0/24 md5
EOF'
sudo systemctl reload postgresql