Инсталиране и конфигуриране на PostgreSQL за 1C Enterprise - бележки по полето

Инсталиране на PostgreSQL 9.6

Ние ще инсталираме сборката от Postgres Professional. На страницата с версията за 1C:Enterprise ще намерим информация за инсталиране на нова версия на PostgreSQL на CentOS 7.

Свържете хранилищата и инсталирайте PostgreSQL 9.6:

Основна настройка на PostgreSQL

Инициализирайте сервизни бази данни с българска локализация:

Стартирайте услугата PostgreSQL и я добавете към стартирането:

Задаваме парола за потребителя на postgres, за да можем да се свържем със сървъра дистанционно:

хост всички всички 127.0.0.1/32 ident нахост всички всички 127.0.0.1/32 md5

хост всички всички 0.0.0.0/0 ident нахост всички всички 0.0.0.0/0 md5

Оптимизиране на настройките на PostgreSQL (postgresql.conf) за 1C:Enterprise

Ще има настройки за PostgreSQL, работещ във виртуална машина ESXi 6.5.

Ресурси, разпределени за VM:

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

диск за OS — 50 GB на LUN хардуер RAID1 от SAS HDD;

диск за базата данни - 170 GB на софтуерен RAID1 от SSD

диск за логове - 100 GB на софтуерен RAID1 от SSD

За да редактирате настройките, изпълнете командата:

autovacuum_max_работници = 4

autovacuum_max_workers = NCores/4..2, но не по-малко от 4

Броят на автовакуумните процеси. Общото правило е, че колкото повече заявки за писане, толкова повече процеси. В база данни само за четене е достатъчен един процес.

ssl=изключено

Деактивирайте криптирането. За защитените центрове за данни криптирането е безсмислено, но води до увеличаване на използването на процесора

споделени_буфери = 12GB

Количеството памет, разпределено от PgSQL за споделения кеш на страницата. Тази памет се споделя между всички процесиPgSQL. Самата операционна система кешира данните, така че няма нужда да разпределяте цялата налична RAM за кеша.

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) и добавяне на външни ключове. Количеството памет, разпределено за тези операции, трябва да бъде сравнимо с физическия размер на най-големия inode на диска.

effective_cache_size = 36GB

эффективен_кеш_размер = RAM - споделени_буфери

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

effective_io_concurrency = 5

Прогнозна стойност на едновременни заявки към дисковата система, които тя може да обслужи в даден момент. За един диск = 1, за RAID - 2 или повече.

случайна_цена_на_страница = 1,3

random_page_cost = 1,5-2,0 за RAID, 1,1-1,3 за SSD

автовакуум = включен

autovacuum_naptime = 20s

Времето за заспиване на процеса на автоматично вакуумиране. Твърде голямата стойност ще доведе до факта, че таблиците няма да имат време за вакуумиране и в резултат на това раздуването и размерът на таблиците и индексите ще растат. Малка стойност ще доведе до безполезно отопление.

bgwriter_delay = 20ms

Времето на заспиване между циклите на запис на диска на фоновия процес на запис. Този процес е отговорен за синхронизирането на страниците, разположени всподелени_буфери с диск. Твърде високата стойност за този параметър ще увеличи натоварването на процеса на контролната точка и процесите, обслужващи сесии (backend). Малка стойност ще доведе до пълно натоварване на едно от ядрата.

bgwriter_lru_multiplier = 4.0

bgwriter_lru_maxpages = 400

Параметри, които контролират интензивността на запис на фоновия процес на запис. В един цикъл bgwriter пише не повече от написаното в последния цикъл, умножено по bgwriter_lru_multiplier, но не повече от bgwriter_lru_maxpages.

synchronous_commit = изключен

Изключете синхронизирането с диска по време на ангажимента. Създава риск от загуба на последните няколко транзакции (в рамките на 0,5-1 секунди), но гарантира целостта на базата данни, гарантирано няма пропуски във веригата на комит. Но това значително подобрява производителността.

wal_keep_segments = 256

Максималният брой WAL сегменти между контролните точки. Твърде честите контролни точки водят до значително натоварване при запис върху дисковата подсистема. Всеки сегмент е с размер 16 MB

wal_buffers = 16 MB

Количеството споделена памет, което ще се използва за буфериране на WAL данни, които все още не са записани на диска. Стойността по подразбиране от -1 определя размер, равен на 1/32 (около 3%) от shared_buffers, но не по-малко от 64 KB и не повече от размера на един WAL сегмент (обикновено 16 MB). Тази стойност може да бъде зададена ръчно, ако автоматично избраната стойност е твърде малка или голяма, но всяко положително число под 32 KB ще се третира като 32 KB. Тази опция може да бъде зададена само при стартиране на сървъра.

Съдържанието на WAL буферите се записва на диска при всяко извършване на транзакция, така че е малко вероятно много големи стойности да генерират значителниполза. Въпреки това, стойност от поне няколко мегабайта може да подобри производителността на запис на натоварен сървър, когато много клиенти извършват транзакции наведнъж. Автоматичната настройка, която работи на стойността по подразбиране (-1), избира разумни стойности в повечето случаи.

default_statistics_target = 1000

Задава целево ограничение за статистика по подразбиране, което се прилага към колони, които нямат отделни ограничения, зададени с командата ALTER TABLE SET STATISTICS. Колкото по-голяма е зададената стойност, толкова по-дълго отнема ANALYZE, но толкова по-високо може да бъде качеството на оценките на планировчика. Стойността по подразбиране за този параметър е 100.

checkpoint_completion_target = 0,9

Степента на "размазване" на контролната точка. Скоростта на запис по време на контролна точка се регулира така, че времето на контролната точка да е равно на изминалото време от миналото, умножено по 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 = включен

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

row_security = изключено

Деактивиране на контрола на разрешенията за ниво на запис

enable_nestloop = изключено

Разрешава или забранява използванетоПланировчик на план за връзка с вложени цикли. Не е възможно напълно да се премахнат вложените цикли, но ако тази опция е изключена, планировчикът няма да използва този метод, ако други могат да бъдат приложени. По подразбиране тази настройка е включена.

Брави

max_locks_per_transaction = 256

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

Настройки за платформата 1C

standard_conforming_strings = изключено

Разрешете използването на знака \ за екраниране

escape_string_warning = изключено

Не предупреждавайте за използването на \ за екраниране

Настройка на сигурността

Нека направим сървъра PostgreSQL видим само за сървъра 1C: Enterprise, инсталиран на същата машина.

listen_addresses = 'localhost'

Съхранение на база данни

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

Прехвърляме регистрационните файлове към създадения RAID1 от 120GB SSD: