Особенности использования и настройки PostgreSQL 10 для работы с базами данных 1С:Предприятие

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Переход на версию PostgreSQL 10 (и выше) для работы с 1С:Предприятие открывает новые возможности по оптимизации высоконагруженных систем, особенно тех, что выполняют функции хранилищ данных (DW) и аналитических систем (OLAP). Рассмотрим подробнее ключевые нововведения, разберем оптимальные настройки конфигурационного файла и проанализируем результаты тестов производительности.

Основные преимущества PostgreSQL 10 для 1С

Главными техническими новшествами, которые напрямую влияют на работу 1С, стали параллельный скан индексов и нативное партиционирование (секционирование) таблиц. Проанализируем, что это дает на практике:

  1. Нативное партиционирование: Позволяет разделять одну логически огромную таблицу (например, сотни гигабайт аналитики) на несколько физических частей. Планировщик запросов теперь умеет «отсекать» ненужные секции. Если ваш запрос касается данных только за определенный месяц, СУБД будет читать данные только из файлов этого месяца, а не перебирать всю таблицу.
  2. Параллельное выполнение запросов: В 10-й версии значительно расширены возможности распараллеливания операций. Теперь система может задействовать несколько ядер процессора для сканирования индексов, что существенно ускоряет построение тяжелых отчетов.
  3. Механизм расширений: Начиная с платформы 8.3.13, компания 1С перешла от патчинга ядра PostgreSQL к использованию расширений (например, online_analyze и plantuner). Это упрощает администрирование и позволяет использовать более свежие сборки СУБД.

Оптимальная настройка конфигурационного файла postgresql.conf

Для достижения максимальной производительности в связке с 1С, рассмотрим конкретные параметры, которые хорошо зарекомендовали себя в тестах на ОС Linux (CentOS). Проанализируем пример конфигурации для сервера с достаточным объемом оперативной памяти:


max_connections = 128
shared_buffers = 1GB
temp_buffers = 256MB
work_mem = 512MB
maintenance_work_mem = 256MB
max_worker_processes = 8
max_parallel_workers_per_gather = 4
synchronous_commit = off
full_page_writes = off
random_page_cost = 1.5
parallel_tuple_cost = 0.02
effective_cache_size = 10GB
max_locks_per_transaction = 150

# Настройки расширений 1С
online_analyze.threshold = 50
online_analyze.scale_factor = 0.1
online_analyze.enable = on
online_analyze.table_type = 'temporary'
plantuner.fix_empty_table = false

Разберем важные моменты этой конфигурации:

Анализ производительности: 9.6 против 10

На основе проведенных тестов (включая тесты Гилева и замеры выполнения реальных отчетов), можно сделать вывод, что PostgreSQL 10 дает прирост производительности около 10% по сравнению с версией 9.6 при идентичных настройках. Однако стоит обратить внимание на работу с временными таблицами. В некоторых бета-версиях наблюдалась просадка скорости их обработки, но в релизных сборках (начиная с 10.3-2.1C) ситуация стабилизировалась.

Рассмотрим результаты теста временных таблиц: в оптимизированных сборках количество операций может достигать 26 000 в один поток, что является отличным показателем для систем на базе Linux.

Нюансы сортировки и версионности

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

Важное правило: Если для бизнес-логики важен порядок строк (например, в печатных формах или движениях регистров), необходимо всегда явно указывать УПОРЯДОЧИТЬ ПО в запросе. Это не ошибка СУБД, а особенность работы многоверсионности (MVCC).

Выбор файловой системы и ОС

Проанализируем влияние системного окружения на работу СУБД:

  1. Файловая система: Несмотря на популярность ZFS, для нужд PostgreSQL в связке с 1С на Linux наиболее стабильные и предсказуемые результаты показывает XFS. Она лучше справляется с фрагментацией и обеспечивает высокую скорость при больших объемах данных.
  2. Настройки ядра Linux: Для устранения задержек рекомендуется отключать механизмы защиты от уязвимостей процессора (например, spectre_v2 и nopti), если сервер находится в защищенном контуре. Это может дать еще до 10% «чистой» производительности процессора.

Юридические и технические риски партиционирования

Хотя PostgreSQL 10 поддерживает нативное партиционирование, его ручное внедрение в структуру таблиц 1С (через ALTER TABLE непосредственно в СУБД) до недавнего времени считалось нарушением лицензионного соглашения. Кроме того, любая реструктуризация (изменение метаданных в конфигураторе) приведет к тому, что 1С пересоздаст таблицу «по-своему», и ваши ручные настройки партиционирования будут потеряны.

Рекомендация: Для полноценного использования секционирования рекомендуется использовать платформу 1С версии 8.3.24 и выше, где функционал секционирования таблиц реализован штатно на уровне объектов метаданных (регистров). В этом случае платформа сама управляет партициями на уровне PostgreSQL, что является легальным и стабильным решением.

Резюме

Использование PostgreSQL 10 для 1С оправдано при необходимости работы с большими объемами данных и сложной аналитикой. При правильной настройке параметров параллелизма и использовании расширения online_analyze, данная версия СУБД показывает стабильную работу и преимущество перед более старыми версиями. Однако для полноценного раскрытия потенциала нативного секционирования следует обновить и платформу 1С до актуальных релизов.

← На главную