Переход на версию PostgreSQL 10 (и выше) для работы с 1С:Предприятие открывает новые возможности по оптимизации высоконагруженных систем, особенно тех, что выполняют функции хранилищ данных (DW) и аналитических систем (OLAP). Рассмотрим подробнее ключевые нововведения, разберем оптимальные настройки конфигурационного файла и проанализируем результаты тестов производительности.
Главными техническими новшествами, которые напрямую влияют на работу 1С, стали параллельный скан индексов и нативное партиционирование (секционирование) таблиц. Проанализируем, что это дает на практике:
online_analyze и plantuner). Это упрощает администрирование и позволяет использовать более свежие сборки СУБД.Для достижения максимальной производительности в связке с 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
Разберем важные моменты этой конфигурации:
autovacuum не всегда успевает собирать статистику. online_analyze делает это немедленно после изменения данных во временных таблицах, что предотвращает выбор планировщиком неэффективных планов запросов.На основе проведенных тестов (включая тесты Гилева и замеры выполнения реальных отчетов), можно сделать вывод, что PostgreSQL 10 дает прирост производительности около 10% по сравнению с версией 9.6 при идентичных настройках. Однако стоит обратить внимание на работу с временными таблицами. В некоторых бета-версиях наблюдалась просадка скорости их обработки, но в релизных сборках (начиная с 10.3-2.1C) ситуация стабилизировалась.
Рассмотрим результаты теста временных таблиц: в оптимизированных сборках количество операций может достигать 26 000 в один поток, что является отличным показателем для систем на базе Linux.
При переходе с MS SQL на PostgreSQL программисты 1С часто сталкиваются с «неправильным» порядком строк в запросах или отчетах. Разберем причину этой ситуации. PostgreSQL является версионной СУБД, и физический порядок строк в таблице может меняться после каждого обновления или очистки (VACUUM). В MS SQL данные часто возвращаются в порядке их добавления (если не указано иное), но в PostgreSQL на это полагаться нельзя.
Важное правило: Если для бизнес-логики важен порядок строк (например, в печатных формах или движениях регистров), необходимо всегда явно указывать УПОРЯДОЧИТЬ ПО в запросе. Это не ошибка СУБД, а особенность работы многоверсионности (MVCC).
Проанализируем влияние системного окружения на работу СУБД:
spectre_v2 и nopti), если сервер находится в защищенном контуре. Это может дать еще до 10% «чистой» производительности процессора.Хотя PostgreSQL 10 поддерживает нативное партиционирование, его ручное внедрение в структуру таблиц 1С (через ALTER TABLE непосредственно в СУБД) до недавнего времени считалось нарушением лицензионного соглашения. Кроме того, любая реструктуризация (изменение метаданных в конфигураторе) приведет к тому, что 1С пересоздаст таблицу «по-своему», и ваши ручные настройки партиционирования будут потеряны.
Рекомендация: Для полноценного использования секционирования рекомендуется использовать платформу 1С версии 8.3.24 и выше, где функционал секционирования таблиц реализован штатно на уровне объектов метаданных (регистров). В этом случае платформа сама управляет партициями на уровне PostgreSQL, что является легальным и стабильным решением.
Использование PostgreSQL 10 для 1С оправдано при необходимости работы с большими объемами данных и сложной аналитикой. При правильной настройке параметров параллелизма и использовании расширения online_analyze, данная версия СУБД показывает стабильную работу и преимущество перед более старыми версиями. Однако для полноценного раскрытия потенциала нативного секционирования следует обновить и платформу 1С до актуальных релизов.