Установка та налаштування PostgreSQL для 1С Підприємство - Нотатки на полях

Установка PostgreSQL 9.6

Встановлюватимемо збірку від компанії Postgres Professional. На сторінці з версією для 1С:Підприємство знайдемо інформацію про встановлення на CentOS 7 свіжої версії PostgreSQL.

Підключимо репозиторії та встановимо PostgreSQL 9.6:

Базове налаштування PostgreSQL

Ініціалізуємо службові бази даних з українською локалізацією:

Запускаємо службу PostgreSQL і додаємо його в автозавантаження:

Задаємо пароль користувачу postgres, щоб була можливість підключатися до сервера віддалено:

host all all 127.0.0.1/32 ident наhost all all 127.0.0.1/32 md5

host all all 0.0.0.0/0 ident наhost all all 0.0.0.0/0 md5

Оптимізація налаштувань PostgreSQL (postgresql.conf) для 1С:Підприємство

Тут будуть налаштування для PostgreSQL, що працює у віртуальній машині ESXi 6.5.

Ресурси виділені для ВМ:

процесор - 8 vCPU;

диск для ОС - 50 GB на LUN апаратному RAID1 із SAS HDD;

диск для БД - 170 GB на програмному RAID1 з SSD

диск для логів – 100 GB на програмному RAID1 із SSD

Для редагування налаштувань виконаємо команду:

autovacuum_max_workers = 4

autovacuum_max_workers = NCores/4..2 але не менше 4

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

ssl = off

Вимкнення шифрування. Для захищених ЦОД'ів шифрування безглуздо, але призводить до збільшення завантаження CPU

shared_buffers = 12GB

Кількість пам'яті, виділеної PgSQL для спільного кешу сторінок. Ця пам'ять поділяється між усіма процесамиPgSQL. Операційна система сама кешує дані, тому немає необхідності відводити під кеш усю готівкову оперативну пам'ять.

temp_buffers = 256MB

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

work_mem = 64MB

work_mem = RAM/32..64 або 32MB..128MB

maintenance_work_mem = 2GB

maintenance_work_mem = RAM/16..32 або work_mem * 4 або 256MB..4GB

Ліміт пам'яті для обслуговуючих завдань, наприклад зі збору статистики (ANALYZE), складання сміття (VACUUM), створення індексів (CREATE INDEX) та додавання зовнішніх ключів. Розмір пам'яті, що виділяється під ці операції, повинен бути порівняний з фізичним розміром найбільшого індексу на диску.

effective_cache_size = 36GB

effective_cache_size = RAM - shared_buffers

Оцінка розміру кеша файлової системи. Збільшення параметра збільшує схильність системи вибирати плани IndexScan. І це добре.

effective_io_concurrency = 5

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

random_page_cost = 1.3

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

autovacuum = on

autovacuum_naptime = 20s

Час сну процесу автовакуум. Занадто велика величина призводитиме до того, що таблиці не встигатимуть вакуумуватися і, як наслідок, зросте bloat і розмір таблиць та індексів. Мінімальна величина призведе до марного нагрівання.

bgwriter_delay = 20ms

Час сну між циклами запису на диску фонового процесу запису. Цей процес відповідальний за синхронізацію сторінок, розташованих уshared_buffers із диском. Занадто велике значення цього параметра призведе до зростання навантаження на checkpoint процес та процеси, що обслуговують сесії (backend). Мале значення призведе до повного завантаження одного з ядер.

bgwriter_lru_multiplier = 4.0

bgwriter_lru_maxpages = 400

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

synchronous_commit = off

Вимкнення синхронізації з диском на момент комміту. Створює ризик втрати останніх кількох транзакцій (протягом 0.5-1 секунди), але гарантує цілісність бази даних, у ланцюжку коммітів гарантовано відсутні перепустки. Але значно збільшує продуктивність.

wal_keep_segments = 256

Максимальна кількість сегментів WAL між checkpoint. Занадто часті checkpoint призводять до значного навантаження на дискову підсистему запису. Кожен сегмент має розмір 16MB

wal_buffers = 16 MB

Обсяг пам'яті, що розділяється, який буде використовуватися для буферизації даних WAL, ще не записаних на диск. Значення за умовчанням, що дорівнює -1, задає розмір, що дорівнює 1/32 (близько 3%) від shared_buffers, але не менше, ніж 64 КБ і не більше, ніж розмір одного сегмента WAL (зазвичай 16 МБ). Це значення можна задати вручну, якщо вибирається автоматично занадто мало або велике, але при цьому будь-яке позитивне число менше 32 КБ сприйматиметься як 32 КБ. Цей параметр можна встановити лише при запуску сервера.

Вміст буферів WAL записується на диск при фіксуванні кожної транзакції, тому дуже великі значення навряд чи принесуть значнукористь. Однак значення як мінімум у кілька мегабайт може збільшити швидкодію при записі на навантаженому сервері, коли багато клієнтів фіксують транзакції. Автонастройка, що діє за значенням за замовчуванням (-1), у більшості випадків вибирає розумні значення.

default_statistics_target = 1000

Встановлює цільове обмеження стандартної статистики, що поширюється на стовпці, для яких командою ALTER TABLE SET STATISTICS не задані окремі обмеження. Чим більше значення, тим більше часу потрібно для виконання ANALYZE, але тим вище може бути якість оцінок планувальника. Значення за промовчанням — 100.

checkpoint_completion_target = 0.9

Ступінь "розмазування" checkpoint'a. Швидкість запису під час checkpoint'а регулюється так, щоб час checkpoint'а дорівнював часу, що минув з минулого, помноженому на checkpoint_completion_ target.

min_wal_size = 4Gmax_wal_size = 8G

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

Мінімальний та максимальний обсяг WAL файлів. Аналогічно checkpoint_segments

fsync = on

Вимкнення параметра призводить до зростання продуктивності, але з'являється значний ризик втрати всіх даних при раптовому вимкненні живлення. Увага: якщо RAID має кеш і перебувати в режимі write-back, перевірте наявність та функціональність батареї кеша RAID контролера! Інакше дані, записані в кеш RAID можуть бути втрачені при вимкненні живлення, і, як наслідок, PgSQL не гарантує цілісність даних.

row_security = off

Вимкнення контролю дозволу рівня запису

enable_nestloop = off

Включає або вимикає використанняпланувальником планів з'єднання із вкладеними циклами. Повністю виключити вкладені цикли неможливо, але при вимкненні цього параметра планувальник не використовуватиме цей метод, якщо можна застосувати інші. За промовчанням цей параметр має значення on.

Блокування

max_locks_per_transaction = 256

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

Налаштування під платформу 1С

standard_conforming_strings = off

Дозволити використовувати символ \ для екранування

escape_string_warning = off

Не видавати попередження про використання символу \ для екранування

Налаштування безпеки

Зробимо так, щоб сервер PostgreSQL був видно тільки для сервера 1С: Підприємство, встановлене на цій же машині.

listen_addresses = 'localhost'

Зберігання бази даних

PostgreSQL, як і майже будь-яка СУБД, критична до дискової підсистеми, тому для підвищення швидкодії СУБД розмістимо систему PostgreSQL, логи і самі бази на різні диски.

Переносимо логи на створений RAID1 із 120GB SSD: