4

Базовый расчет конфигурационных параметров управления памятью для обслуживания СУБД PostgreSQL

Взято с основного технического канала Postgres DBA

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

Чтобы избежать ситуации - "что-то с памятью моей стало".

Задача

Подготовить базовую формулу расчета для базовой настройки конфигурационных параметров управления памятью для обслуживания СУБД :

shared_buffers

Задаёт объём памяти, который будет использовать сервер баз данных для буферов в разделяемой памяти.

Если вы используете выделенный сервер с объёмом ОЗУ 1 ГБ и более, разумным начальным значением shared_buffers будет 25% от объёма памяти. Существуют варианты нагрузки, при которых эффективны будут и ещё большие значения shared_buffers, но так как Postgres Pro использует и кеш операционной системы, выделять для shared_buffers более 40% ОЗУ вряд ли будет полезно.

maintenance_work_mem

Задаёт максимальный объём памяти для операций обслуживания БД, в частности VACUUM, CREATE INDEX и ALTER TABLE ADD FOREIGN KEY.

autovacuum_work_mem

Задаёт максимальный объём памяти, который будет использовать каждый рабочий процесс автоочистки.

shared_buffers

40% от размера RAM.

PG_HAZEL : Влияние на производительность и характерные ожидания СУБД увеличения shared_buffers c 25 до 50% от размера RAM.

maintenance_work_mem

10% от размера RAM

Как рассчитать значение maintenance_work_mem для заданного количества мертвых строк

autovacuum_work_mem

1. Настроить параметра autovacuum для больших таблиц (~ более 1M строк)

autovacuum_vacuum_scale_factor = 0

autovacuum_analyze_scale_factor = 0

autovacuum_vacuum_insert_scale_factor = 0

autovacuum_vacuum_threshhold = 100000

autovacuum_analyze_threshhold = 100000

autovacuum_vacuum_insert_threshold = 100000

2. Установить autovacuum_max_workers

autovacuum_max_workers = 10

Тонкая настройка параметров autovacuum/autoanalyze(naptime, cost_delay) - будет рассмотрена позднее.

3. Установить значение autovacuum_work_mem

autovacuum_work_mem = 100000 * 6 * 1.2 ~ 1MB

Как рассчитать значение maintenance_work_mem для заданного количества мертвых строк

Базовый расчет памяти для обслуживания СУБД

shared_buffers + maintenance_work_mem + (autovacuum_work_mem * autovacuum_max_workers )

Пример :

RAM = 2GB

autovacuum_max_workers = 4

shared_buffers + maintenance_work_mem + (autovacuum_work_mem * autovacuum_max_workers ) = 1020 MB (~49%RAM).

Postgres DBA

63 поста14 подписчиков

Правила сообщества

Пока действуют стандартные правила Пикабу.