Postgresql в связке с 1с

Настройка PostgreSQL 11.5 и 1C: Предприятие 8.3.16 на Windows Server 2008R2

Под «Окнами» «Слона» водили… Когда файловая БД 1С вырастает и начинает тормозить, встает вопрос по переводу базы на SQL, безусловно, лидеры и самые используемые при настройке SQL баз на 1С это ПО Microsoft SQL Server и PostgerSQL, (прочие IBM DB2 и Oracle Datebase), но жирный плюс в сторону PostgerSQL, что она условно бесплатная, в отличие от цены на MSSQL.

PostgerSQL заточен под Linux и в своей среде он будет работать лучше и быстрее (как рыба в воде), но есть и адаптированный под Windows, требующий чуть больших настроек для оптимизации, чем просто «далее-далее-далее» в MSSQL. Хотя на небольших БД на первых этапах хватает и стандартной настройки задаваемой при установке.

Тесты о работе и производительности на разных системах разных продуктов MS SQL, PostgerSQL, под Linux, Windows легко можно найти в интернете, тут же мы рассмотрим простую установку и базовую настройку для работы 1С 8 на PostgerSQL 11.5 под Windows Server 2008 R2.

Постановка задачи:

1С Предприятие 8.3.16.1063, 1С БД Бухгалтерия 3.0.75.58 – размер файла ~15 Гб.

Сервер: i5-9400, ОЗУ DDR4 16 Гб, SSD 256, ОС Windows Server 2008R2 x64

Скачать дистрибутив PostgerSQL можно с сайта 1С «users.v8.1c.ru», либо с офф сайта «www.postgresql.org».

Установка и настройка PostgreSQL:

1. Подготовка:

Перед установкой и настройкой рекомендуется отключить протокол IPv6, иначе это может затруднить дальнейшую настройку.

Postgresql в связке с 1с

Также необходимо установить Microsoft Visual C++ 2015 (на сайте 1С он идет в комплекте)

Postgresql в связке с 1с

Также заранее рекомендуется включить службу «Вторичный вход в систему», иначе при установке будет ошибка.

Postgresql в связке с 1с

2. Процесс установки

Postgresql в связке с 1сPostgresql в связке с 1с

Далее указываем путь установки программы (его не меняем) и путь, где будут располагаться БД (его рекомендуется сменить, чтобы БД хранились не на системном диске)

Postgresql в связке с 1сPostgresql в связке с 1с

Если вы не запустили службу «Вторичный вход в систему» то у вас будет ошибка, ее можно включить на этапе установки и продолжить:

Postgresql в связке с 1с Postgresql в связке с 1с

Postgresql в связке с 1с Postgresql в связке с 1с

После установки запускаем консоль администратора «Пуск-PostgreSQL 11.5-7.1C(x64)-pgAdmin 4»

Postgresql в связке с 1с

Postgresql в связке с 1с

Postgresql в связке с 1с

На этом установка PostgreSQL закончена.

3. Установка 1С сервера:

Теперь переходим к установке файлов сервера «1С:Предприятия» и запуску соответствующей службы. Для установки требуется дистрибутив технологической платформы «1С:Предприятия». Скачать необходимые дистрибутивы можно скачать в закрытом разделе на сайте 1С)

Запуститься помощник установки системы «1С:Предприятия». На первой странице жмем «Далее».

На следующей странице необходимо выбрать те компоненты, которые будут устанавливаться, нам требуются компоненты:

  • Сервер 1С:Предприятия — компоненты сервера «1С:Предприятия»
  • Администрирование сервера 1С:Предприятия 8 — дополнительные компоненты для администрирования кластера серверов «1С:Предприятия»

Сделав выбор жмем «Далее».

Если сервер «1С:Предприятия» устанавливается как служба Windows рекомендуется сразу создать отдельного пользователя, из под которого будет запускаться служба «Агент сервера 1С Предприятия», либо можно выбрать существующего пользователя для запуска сервера. Для создание нового пользователя необходимо:

  • Выбираем флаг «Установить сервер 1С:Предприятие как сервис Windows (рекомендуется)»;
  • Выбираем «Создать пользователя USR1CV8» и задаем его пароль (пароль должен отвечать политики паролей Windows).

Также пользователю обязательно следует дать необходимые права на каталог служебных файлов сервера (по умолчанию C:Program Files1cv8srvinfo для 64-х разрядного и C:Program Files (x86)1cv8srvinfo для 32-х разрядного сервера). Созданный автоматически пользователь USR1CV8 будет обладать всеми перечисленными правами.

Заполнив соответствующие параметры, жмем «Далее».

Далее идет установка всех необходимых файлов и служб. После чего следует убедиться что появилась и запущена соответствующая служба.

На этом установка Сервера 1С Предприятия закончена.

4. Создание 1С БД для PostgreSQL

После установки 1С Сервера запускаем «Администрирование серверов 1С Предприятия x86-64», переходим в список «Информационные базы» и создаем новую БД. Заполняем основные поля:

  • Имя — имя БД на сервере 1с
  • Сервер баз данные — имя сервера где будет располагаться БД 1С SQL
  • Тип СУБД — выбор на какой платформе у вас будет работать ваша база (MSSQL, PostgeSQL, IBM DB2, Oracle DateBase)
  • База данных — имя базы которое будет создано в SQL
  • Пользователь и пароль БД — пользователь в SQL
  • Создавать базу данных в случае ее отсутствия — Создает БД в SQL если ее нет.

Postgresql в связке с 1с

Если вы не отключили протокол IPv6 то у вас при создании будет ошибка:

Postgresql в связке с 1с

Postgresql в связке с 1с

можно отключить протокол IPv6 и продолжить создание, либо можно указать IP адрес сервера без отключение протокол IPv6:

Postgresql в связке с 1с

Postgresql в связке с 1с

Все на этом этапе БД готова, в принципе ее можно подключать загружать в SQL и работать. Но рекомендуется сделать настройку самого Postgre сервера для оптимизации и более стабильной работы базы 1С на PostgreSQL. Делается это в 1 файле расположенном в каталоге с базами (путь который вы указывали при установке для баз по умолчанию C:Program FilesPostgreSQL11.5-7.1Cdata). Файл postgresql.conf

5. Настройка PostgreSQL под 1С 8

ВАЖНО!!! Перед любыми изменения в этом файле обязательно сделайте его копию, в противном случаем если какой то параметр указан не верно у вас не запустится служба PostgreeSQL:

Читайте также:  Как получить растяжение связок колена

Перед тем как вносить изменения в файл postgresql.conf необходимо остановить службу

Postgresql в связке с 1с 

Изменение параметров в postgresql.conf:

  • shared_buffers — Количество памяти, выделенной PgSQL для совместного кеша страниц. Эта память разделяется между всеми процессами PgSQL. Делим доступную ОЗУ на 4. В нашем случае это 4 Gb.
  • effective_cache_size — Оценка размера кэша файловой системы. Считается так: ОЗУ — shared_buffers. В нашем случае это 16Gb — 4Gb = 12Gb. Но рекомендуется указать этот параметр ниже, где-то 8-10Gb.
  • max_connections = 10 # максимальное число клиентских подключений, которые могут подсоединяться к базе данных одновременно.
  • random_page_cost = 1.5 — 2.0 для RAID, 1.1 — 1.3 для SSD. Стоимость чтения рандомной страницы. Чем меньше seek time дисковой системы тем меньше (но > 1.0) должен быть этот параметр. Излишне большое значение параметра увеличивает склонность PgSQL к выбору планов с сканированием всей таблицы.
  • temp_buffers = 512Mb. Максимальное количество страниц для временных таблиц. То есть это верхний лимит размера временных таблиц в каждой сессии (рекомендуемый размер 1/20 RAM).
  • wal_sync_method = open_datasync.  метод, который используется для принудительной записи данных на диск. open_datasync – запись данных методом open() с параметром O_DSYNC, fdatasync – вызов метода fdatasync() после каждого commit, fsync_writethrough – вызывать fsync() после каждого commit игнорирую паралельные процессы, fsync – вызов fsync() после каждого commit, open_sync – запись данных методом open() с параметром O_SYNC. Наилучший по тесту для Windows считается open_datasync(для Линукс = fdatasync)
  • work_mem — Считается так: ОЗУ / 32..64 — в нашем случае получается 512mb. Лимит памяти для обработки одного запроса. Эта память индивидуальна для каждой сессии. Теоретически, максимально потребная память равна max_connections * work_mem.
  • bgwriter_delay — 20ms. Время сна между циклами записи на диск фонового процесса записи. Данный процесс ответственен за синхронизацию страниц, расположенных в shared_buffers с диском. Слишком большое значение этого параметра приведет к возрастанию нагрузки на  checkpoint процесс и процессы, обслуживающие сессии (backend). Малое значение приведет к полной загрузке одного из ядер.
  • synchronous_commit — offОПАСНО! Выключение синхронизации с диском в момент коммита. Создает риск потери последних нескольких транзакций (в течении 0.5-1 секунды), но гарантирует целостность базы данных, в цепочке коммитов гарантированно отсутствуют пропуски. Но значительно увеличивает производительность.

Другие настройки более тонкие для работы PostgreSQL можно посмотреть в этой статье (для нашего размера базы этого будет достаточно): //infostart.ru/public/554213/

Вся документация по настройке так же есть на сайте 1С (its.1c.ru) а разделе «Методическая поддержка для разработчиков и администраторов 1С:Предприятия 8»

После чего запускаем службу PostgreSQL и можно работать. 

Так же иногда по какой то причине после загрузки в PostgreSQL в базе отключается «Полнотекстовый поиск», поэтому после настройки рекомендуется проверить и включить если выключено и обновить индексы (все функции-стандартные-управление полнотекстовым поиском).

Postgresql в связке с 1с

Во вложении дистрибутив postgresql_11.5_7.1C_x64 с сайта 1С и файл настроек postgresql.conf.

Как делать резервирование на PostgreSQL можно почитать тут: //infostart.ru/public/1187165/

Источник

Предприятием. Часть 2 :: Методическая поддержка для разработчиков и администраторов 1С:Предприятия 8

12.05.2018

Общие положения

В документе описывается настройка PostgreSQL версий 9.2-9.4 на максимальную производительность для платформы 1С. Предполагается, что сервер, используемый для PostgreSQL является достаточно производительным и имеет приблизительно:

  • 4 — 512  Gb RAM
  • 2 — 256 CPU cores
  • RAID 0-1 или SSD

Данный документ подразумевает хотя бы поверхностное знакомство с архитектурой PgSQL. Приведенные в документе параметры являются приблизительными и стартовыми для тонкой настройки.

Настройки сервера для PostgreSQL

  • Рекомендуется отключать HyperThreading. Для программ типа систем управления базами данных от него скорее вред чем польза.
  • Также рекомендуется отключать Energy Saving, поскольку в противном случае могут непредсказуемо вырастать задержки ответов БД.
  • Надо запретить своппинг разделяемой памяти SYSV/posix (FreeBSD: kern.ipc.shm_use_phys=1)

Обозначения

  • RAM — объем оперативной памяти сервера. Если сервер используется не только для PostgreSQL, то надо уменьшить эту величину на объем занятой памяти.
  • NCores — суммарное число ядер на всех CPU сервера
  • max_connections — максимальное число коннектов (или сессий) к PgSQL. Задается в конфигурационном файле.
  • WAL — Write Ahead Log, опережающий лог действий с таблицами и индексами. Основная задача — целостность и отказоустойчивость  базы данных при одновременном росте производительности.
  • checkpoint — точка восстановления база данных. Все WAL данные, записанные до checkpoint становятся не нужны.
  • X..Y — диапазон значений от X до Y включительно

Параметры производительности

shared_buffers = RAM/4

Количество памяти, выделенной PgSQL для совместного кеша страниц. Эта память разделяется между всеми процессами PgSQL.

temp_buffers = 256MB

Максимальное количество страниц для временных таблиц. Т.е. это верхний лимит размера временных таблиц в каждой сессии.

work_mem = RAM/32..64 или 32MB..128MB

Лимит памяти для обработки одного запроса. Эта память индивидуальна для каждой сессии. Теоретически, максимально потребная память равна max_connections * work_mem, на практике такого не встречается потому что большая  часть сессий почти всегда висит в ожидании. Это рекомендательное значение используется оптимайзером: он пытается предугадать размер необходимой памяти для запроса, и, если это значение больше work_mem, то указывает экзекьютору сразу создать временную таблицу. work_mem не является в полном смысле лимитом: оптимайзер может и промахнуться, и запрос займёт больше памяти, возможно в разы. Это значение можно уменьшать, следя за количеством создаваемых временных файлов: 

Читайте также:  Глагол связка be в отрицательных предложениях

select maintenance_work_mem = RAM/16..32 или work_mem * 4 или 256MB..4GB

Лимит памяти для обслуживающих задач, например вакуум, автовакуум или создания индексов.

effective_cache_size = RAM — shared_buffers

Оценка размера кеша файловой системы. Увеличение параметра увеличивает склонность системы выбирать IndexScan планы. И это хорошо.

effective_io_concurrency = 2

Оценочное значение одновременных запросов к дисковой системе, которые она может обслужить единовременно. Для одиночного диска = 1, для RAID — 2 или больше.

random_page_cost = 1.5-2.0 для RAID, 1.1-1.3 для SSD

Стоимость чтения рандомной страницы (по-умолчанию 4). Чем меньше seek time дисковой системы тем меньше (но > 1.0) должен быть этот параметр. Излишне большое значение параметра увеличивает склонность PgSQL к выбору планов с сканированием всей таблицы (PgSQL считает, что дешевле последовательно читать всю таблицу, чем рандомно индекс). И это плохо.

autovacuum = on

Включение автовакуума. Не выключайте его!

autovacuum_max_workers = NCores/4..2 но не меньше 4

Количество процессов автовакуума. Общее правило — чем больше write-запросов, тем больше процессов. На read-only базе данных достаточно одного процесса.

autovacuum_naptime = 20s

Время сна процесса автовакуума. Слишком большая величина будет приводить к тому, что таблицы не будут успевать вакуумиться и, как следствие, вырастет bloat и размер таблиц и индексов. Малая величина приведет к бесполезному нагреванию.

bgwriter_delay = 20ms

Время сна между циклами записи на диск фонового процесса записи. Данный процесс ответственен за синхронизацию страниц, расположенных в shared_buffers с диском. Слишком большое значение этого параметра приведет к возрастанию нагрузки на  checkpoint процесс и процессы, обслуживающие сессии (backend). Малое значение приведет к полной загрузке одного из ядер.

bgwriter_lru_multiplier = 4.0bgwriter_lru_maxpages = 400

Параметры, управляющие интенсивностью записи фонового процесса записи. За один цикл bgwriter записывает не больше, чем было записано в прошлый цикл, умноженное на bgwriter_lru_multiplier, но не больше чемbgwriter_lru_maxpages.

synchronous_commit = off

Выключение синхронизации с диском в момент коммита. Создает риск потери последних нескольких транзакций (в течении 0.5-1 секунды), но гарантирует целостность базы данных, в цепочке коммитов гарантированно отсутствуют пропуски. Но значительно увеличивает производительность.

checkpoint_segments = 32..256 < 9.5

Максимальное количество сегментов WAL между checkpoint. Слишком частые checkpoint  приводят к значительной нагрузке на дисковую подсистему по записи. Каждый сегмент имеет размер 16MB.

checkpoint_completion_target = 0.5..0.9

Степень «размазывания» checkpoint’a. Скорость записи во время checkpoint’а регулируется так, что бы время checkpoint’а было равно времени, прошедшему с прошлого, умноженному на checkpoint_completion_target.

min_wal_size = 512MB .. 4G         > =9.5
max_wal_size = 2 * min_wal_size    > =9.5

Минимальное и максимальный объем WAL файлов. Аналогично checkpoint_segments.

ssl = off

Выключение шифрования. Для защищенных ЦОД-ов шифрование бессмысленно, но приводит к увеличению загрузки CPU.

fsync = on

Выключение параметра приводит к росту производительности, но появляется значительный риск потери всех данных при внезапном выключении питания. Внимание: если RAID имеет кеш и находиться в режиме write-back, проверьте наличие и функциональность батарейки кеша RAID контроллера! Иначе данные записанные в кеш RAID могут быть потеряны при выключении питания, и, как следствие, PgSQL не гарантирует целостность данных.

commit_delay = 1000commit_siblings = 5

Групповой коммит нескольких транзакций. Имеет смысл включать, если темп транзакций превосходит 1000 TPS. Иначе эффекта не имеет.

temp_tablespaces = ‘NAME_OF_TABLESPACE’

Дисковое пространство для временных таблиц/индексов. Помещение временных таблиц/индексов на отдельные диски может увеличить производительность. Предварительно надо создать tablespace командой CREATE TABLESPACE. Если характеристики дисков отличаются от основных дисков, то следует в команде указать соответствующий random_page_cost. См. статью.

row_security = off               >= 9.5

Отключение контроля разрешения уровня записи.

max_files_per_process = 1000 (default)

Максимальное количество открытых файлов на один процесс PostreSQL. Один файл это как минимум либо индекс либо таблица, но таблица/может состоять из нескольких файлов. Если PostgreSQL упирается в этот лимит, он начинает открывать/закрывать файлы, что может сказываться на производительности. Диагностировать проблему под Linux можно с помощью команды lsof.

Параметры для платформы 1С:Предприятия

standard_conforming_strings = off

Разрешить использовать символ для экранирования.

escape_string_warning = off

Не выдавать предупреждение о использовании символа для экранирования.

max_locks_per_transaction = 256

Максимальное число блокировок индексов/таблиц в одной транзакции.

max_connections = 500..1000

Количество одновременных коннектов/сессий.

Параметры для PgBadger

Приводится согласно документации

При большой нагрузке может влиять на производительность по причине большого потока записи на диск. Лучше вынести на отдельный шпиндель.

log_min_duration_statement = 0
log_line_prefix = ‘%t [%p]: [%l-1] ‘ или ‘%t [%p]: [%l-1] user=%u,db=%d,client=%h ‘
log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on
log_temp_files = 0
log_autovacuum_min_duration = 0
lc_messages=’C’
log_duration = on
log_statement = all
log_destination = stderr

Примечание. Здесь пока никак не рассматриваются вопросы ротации логов и использования самого PgBadger’a.

Параметры дополнительных модулей

plantuner

Исходники git clone 

Документация

plantuner.fix_empty_table = ‘on’

Исправляет чрезмерную пессимистичность оптимизатора посгтреса на пустых, недавно созданных таблицах.

online_analyze

Исходники git clone

Документация

online_analyze.table_type = ‘temporary’

Автоматически анализировать временные таблицы при их изменении. Фоновый analyze может заметно отставать, и, как результат, планер ошибается.

online_analyze.verbose = ‘off’

Отключение излишней болтливости автоматического analyze.

Источник

PostgreSQL + 1С Сервер + Windows Server 2012 R2

Ниже проиллюстрирую установку связки PostgreSQL и 1С Сервер на платформе Windows Server 2012 R2, а также в итоге у нас должен получиться доступ как локальный, так и удаленный к кластеру серверов.

Начнем с того, что дистрибутив PostgreSQL нужно брать ИТС-ный, ибо че-то там не так, если качать с официальных страниц СУБД.

Читайте также:  Последствия разрыва крестообразной связки

*Буду стараться делать так, сначала будет идти скриншот, ниже описание.

У меня на руках postgresql-9.1.2-1.1C(x64) так что нажимаю на установщике .exe

Ничегошеньки не менял, ибо логи установки, которые предлагают мне сохранить в текущей директории, мне не нужны, и русский язык СУБД меня устраивал.

И здесь оставил все по умолчанию, ибо сам не знаю толком, какая опция и за что отвечает, все и так заработает без проблем.

Здесь зададим пользователю postgres, под которым будет запускаться СУБД (если данного пользователя нет в системе, он будет автоматически создан) пароль, сложный, сложный, все остальные параметры заполнились самостоятельно и трогать их не вижу смысла.

Как видим из описания о пользователе, postgres пользователю также нужно задать пароль, что и сделаем.

Кодировку лучше изменить на UTF-8, почему? А я не знаю, уже и забыл преимущества данной кодировки, умные люди в комментариях опишут, почему лучше та или иная кодировка

Поддерживать подсоединения с любых IP, а не только с localhost – означает, мол, будет возможность подключаться к серверу извне в локальной сети

Уведомление смиренно прочитали и запомнили, что нужно и куда нужно зайти после установки, продолжаем …

После нажатия «Ок» может обрадовать нас сообщение вот такого содержания

Тут как бы все понятно, жмем WIN+R вводим services.msc находим службу «Вторичный вход в систему» и запускаем ее + ставим автозапуск службы, далее опять повторяем нажатие «Далее», где видим 

Это что-то такое мудрёное, что для нашей задачи навряд ли понадобится, пропускаем смело, оставляем все как есть

Какие там модули, мы устанавливать без модулей еще не научились, поэтому что было по умолчанию, то и оставляем.

Ждем окончания установки…

Нам эти фишки ни к чему, снимаем галку, жмем «Завершить»

Управление СУБД осуществляется утилитой pgAdmin III, которую можно найти в списке программ Пуск, но имейте в виду, что нужно ее обновить, ибо после запуска pgAdmin III и последующего подключения к БД получаем картинку

Обновление я качнул с официального ресурса https://www.pgadmin.org/ все обновилось без проблем. Имейте в виду, нужно перед обновление утилиты остановить, а потом запустить СУБД.

Приступим к установке 1С сервера

У меня мега 1C_8.3.7.1633 версия, так что поехали 

Здесь ничего нового, устанавливаем компоненты сервера и, чтобы администрировать им, устанавливаем компоненты администрирования

Здесь я только ввел пароль для пользователя postgres, который будет являться администратором для нашего кластера серверов

Всякие там драйвера защиты и т.д., при установке я не устанавливал, ибо не наш случай, у нас задача ознакомительная.

  • ! Для управление кластером серверов 1С используем Администрирование серверов 1С Предприятия
  • ! Для управления СУБД используем pgAdmin III

Давайте теперь попробуем создать новую, пустую базу данных посредством программы запуска информационных баз 1С — 1cestart.exe

Опишем, что где:

Кластер серверов 1С Предприятие = 192.168.1.111 это айпишник компьютера, на котором установлен сервера 1С, в нашем случаи это наш основной пк

Имя информационной базы в кластере = пишем, что хотим, если БД с таким именем не будет, создастся автоматически

Защищенное соединение = не трогаем, пока без этого обойдемся

Тип СУБ = коль установили Postgresql, тогда и выбираем данную СУБД из списка

Сервер базы данных = айпишний, тот же айпишник компьютера, на котором установлена СУБД

Имя базы данных = как назовем, так и будет называться наша БД в списке СУБД

Пользователь базы данных = да, наш пользователь из СУБД, помните, это postgres

Пароль пользователя = пароль выше упомянутого пользователя

Создать базу данных в случаи ее отсутствия = Да, ставим галку

Все иные параметры типа Язык и ниже галка о блокировке заданий не изменяем, не нужно пока это, если вы читаете данный текст.

Результат на экран

А теперь попробуем по локальной сети подключиться к нашей базе данных.

И получаем 

А может и 

А это ничто иное, как блокировка портов брандмауэром, а именно 1541, 1560 портов, который нужно разрешить 

И получаем запущенный сеанс

А теперь продемонстрирую удаленное подключение, из интернета к нашей базе

Предварительно, настраиваем на сервере 1С форвардинг портов на роутере, типа

Соответственно, напомню, эти же порты должны быть открыты брандмауэром

Далее, на удаленном компьютере (назовем его клиент), открываем файл hosts, что находится по пути в проводнике %WinDir%System32DriversEtc и добавляем запись

77.121.199.91 ws

Где циферки — это айпи адрес внешний нашего сервера, а буковки это название нашего сервера, к которому подключаемся

А также на клиенте нужно открыть файл nethasp.ini, который находится по пути C:Program Files (x86)1cv8conf, найти параметр NH_SERVER_ADDR, который нужно разкомментировать + вместо <Addr1> вписать внешний айпишник нашего сервера, в итоге вышло

А далее, на том же удаленном компьютере добавляем запись для подключения к информационной базе, указываем наш алиас, который задали в файле hosts + порт кластера серверов ну и наименование нашей БД с кластера

Все, в моем случаи успешно произошло подключение, радуюсь 

Источник