МихаНическая Wiki!

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
субд:postgresql:настройка_postgresql_для_использования_с_1с [2022/07/07 04:15]
mihanik
субд:postgresql:настройка_postgresql_для_использования_с_1с [2025/06/26 16:24] (текущий)
mihanik [UPD]
Строка 15: Строка 15:
 Опирался на [[https://its.1c.ru/db/metod8dev#content:5866:hdoc|эту рекомендацию]]. Опирался на [[https://its.1c.ru/db/metod8dev#content:5866:hdoc|эту рекомендацию]].
  
-Для вычислений используются 2 параметра:+Для вычислений используется 2 параметра:
  
   * количество ОЗУ, которое вы готовы отдать PostgreSQL;   * количество ОЗУ, которое вы готовы отдать PostgreSQL;
   * количество ядер процессора, которые вы готовы отдать PostgreSQL;   * количество ядер процессора, которые вы готовы отдать PostgreSQL;
  
-|Параметр|Значение|+Ссылка на файл с расчётами ниже. 
 + 
 +{{ :субд:postgresql:postgresql.ods |}} 
 + 
 +Замечания. 
 + 
 +Предположим, что у вас есть сервер, на котором "крутятся" 1С и PostgreSQL. 
 + 
 +Рассуждаем так. 
 +  * одно ядро процессора и 4 Гб ОЗУ отдаём под нужды ОС. 
 +  * Половину оставшихся ядер и половину оставшейся оперативки отдаём под нужды PostgreSQL. 
 + 
 +====== UPD ====== 
 + 
 +**26.06.2025** 
 + 
 +Для автоматизирования настройки набросал небольшой скрипт для Linux 
 + 
 +<code bash PG-Tune.sh> 
 +#!/bin/bash 
 + 
 +# Задаём путь к файлу с настройками 
 +PGConf=~/postgresql.conf 
 +#PGConf=/var/lib/pgpro/1c-14/data/postgresql.conf 
 + 
 +# Задаём размер ОЗУ в мегабайтах, который отводится для PostgreSQL. 
 + 
 +MyMem=32768 
 + 
 +# Задаём количество ядер процессора, которые отводятся для PostgreSQL. 
 + 
 +MyCPU=6 
 + 
 +
 +echo '#------------------------------------------------------------------------------' 
 +echo '# CUSTOMIZED BY MIHANIK OPTIONS' 
 +echo '#------------------------------------------------------------------------------' 
 + 
 +echo "listen_addresses ='*'" 
 + 
 +#Отключение контроля на уровне записей. 
 +echo "row_security = off" 
 + 
 +# Выключение шифрования, которое может приводить к увеличению загрузки CPU. 
 +echo "ssl = off" 
 + 
 +# Количество памяти, выделенной PostgreSQL для совместного кеша страниц. 
 +# Эта память разделяется между всеми процессами PostgreSQL. 
 +echo "shared_buffers = $(($MyMem / 4))MB" 
 + 
 +# Количество памяти, выделенной PostgreSQL для совместного кеша страниц. 
 +# Эта память разделяется между всеми процессами PostgreSQL. 
 +echo "temp_buffers = 256MB" 
 + 
 +# Лимит памяти для обработки одного запроса. 
 +# work_mem = RAM/32..64 или 32MB..128MB 
 +echo "work_mem = $(($MyMem / 24))MB" 
 + 
 +# maintenance_work_mem = RAM/16..32 или work_mem * 4 или 256MB..4GB 
 +echo "maintenance_work_mem = $(($MyMem / 6))MB" 
 + 
 +# Сброс буферов на диск (выполнение PostgerSQL системных вызовов fsync()). 
 +#  Выключение параметра приводит к росту производительности, но появляется 
 +# значительный риск потери всех данных при внезапном выключении питания. 
 +echo "fsync = on" 
 + 
 +# Выключение синхронной записи в WAL момент коммита транзакции. 
 +#  Создает риск потери последних нескольких транзакций (в течении 0.5-1" секунды), 
 +# но гарантирует целостность базы данных. Может значительно увеличить производительность. 
 +echo "synchronous_commit = off" 
 + 
 +# Минимальное и максимальный объем WAL файлов. 
 +# Аналогично checkpoint_segments. 
 +echo "min_wal_size = $(($MyMem / 8))MB" 
 +echo "max_wal_size = $(($MyMem / 4))MB" 
 + 
 +# Групповой коммит нескольких транзакций. 
 +# Имеет смысл включать, если интенсивность транзакций превосходит 1000 TPS. 
 +echo "commit_delay = 1000" 
 +echo "commit_siblings = 5" 
 + 
 +# Время сна между циклами записи на диск фонового процесса записи. 
 +echo "bgwriter_delay = 20ms" 
 + 
 +# Параметры, управляющие интенсивностью записи фонового процесса записи. 
 +# За один цикл bgwriter записывает не больше, чем было записано в прошлый цикл, умноженное на bgwriter_lru_multiplier, но не больше чем bgwriter_lru_maxpages. 
 +echo "bgwriter_lru_multiplier = 4.0" 
 +echo "bgwriter_lru_maxpages = 400" 
 + 
 +# Включение автовакуума. 
 +echo "autovacuum = on" 
 + 
 +# Количество процессов автовакуума. 
 +# Общее правило - чем больше запросов на запись выполняется в системе  
 +# (такие системы называются OLTP), тем больше процессов. 
 +# autovacuum_max_workers =" CPU "cores/4..2 но не меньше 4 
 +if [ $((MyCPU /4 )) -lt 4 ]; 
 +then 
 +echo "autovacuum_max_workers = 4" 
 +else 
 +echo "autovacuum_max_workers = $(($MyCPU / 4))" 
 +fi 
 + 
 +# Время сна процесса автовакуума. Слишком большая величина будет приводить к тому, что таблицы не будут успевать «чиститься», 
 +#  что приведет у роста размера и снижению производительности работы. Малая величина приведет к бесполезной нагрузке. 
 +echo "autovacuum_naptime = 20s" 
 + 
 +# Значение по умолчанию – 8000, его не нужно уменьшать. 
 +echo "max_files_per_process = 8000" 
 + 
 +# effective_cache_size =" RAM - "shared_buffers 
 +# Оценка планировщика запроса о размере дискового кеша, доступного для одного запроса. 
 +echo "effective_cache_size = $(($MyMem - $(($MyMem / 4)) ))MB" 
 + 
 +# random_page_cost = 1.5-2.0 для RAID, 1.1-1.3 для SSD 
 +# Стоимость чтения рандомной страницы, на которую будет опираться оптимизатор (по-умолчанию 4).  
 +echo "random_page_cost = 1.2" 
 + 
 +# Задаёт максимальное число элементов в списке FROM, до которого планировщик будет объединять вложенные запросы с внешним запросом. 
 +# При меньших значениях сокращается время планирования, но план запроса может стать менее эффективным. 
 +echo "from_collapse_limit= 20" 
 + 
 +# Задаёт максимальное количество элементов в списке FROM, до достижения которого планировщик будет сносить в него явные конструкции JOIN (за исключением FULL JOIN). 
 +# При меньших значениях сокращается время планирования, но план запроса может стать менее эффективным. 
 +echo "join_collapse_limit = 20" 
 + 
 +# GEQO - генетический оптимизатор запросов PоstgreSQL, который осуществляет планирование запросов, применяя эвристический поиск вместо полного перебора отношений. 
 +echo "geqo = on" 
 + 
 +# Задаёт минимальное число элементов во FROM, при котором для планирования запроса будет привлечён генетический оптимизатор. 
 +echo "geqo_threshold = 12" 
 + 
 +# Оценочное значение одновременных запросов к дисковой системе, которые она может обслужить единовременно. 
 +echo "effective_io_concurrency = 2" 
 + 
 +# Разрешить использовать символ \ для экранирования. 
 +echo "standard_conforming_strings = off" 
 + 
 +#Не выдавать предупреждение о использовании символа \ для экранирования. 
 +echo "escape_string_warning = off" 
 + 
 +# Максимальное число блокировок индексов/таблиц в одной транзакции. 
 +# Для высоконагруженных систем с большими конфигурациями с большим числом таблиц рекомендуется устанавливать значение больше, например, 1000. 
 +echo "max_locks_per_transaction = 1000" 
 + 
 +# Количество одновременных соединений. 
 +# Для высоконагруженных систем с большим числом одновременных пользователей рекомендуется устанавливать значение больше, например, 2000. 
 +echo "max_connections = 1000" 
 + 
 +# В общем случае мы не рекомендуем использовать синхронное автообновление статистики, однако его можно включить, если есть основания полагать, 
 +# что фоновое обновление не дает нужного результата / оптимизатор часто ошибается в оценке количества строк. 
 +echo "online_analyze.enable = off" 
 + 
 +) >>  $PGConf 
 +</code>
  
 [[#top|Наверх ]] [[#top|Наверх ]]
  
  
субд/postgresql/настройка_postgresql_для_использования_с_1с.1657167329.txt.gz · Последнее изменение: 2022/07/07 04:15 — mihanik
Яндекс.Метрика