tg-me.com/database_info/1479
Last Update:
Мини-гайд по трём ключевым сущностям PostgreSQL: соединения, буфер и WAL
1. Соединения (Connections)
PostgreSQL по умолчанию позволяет одновременно до 100 соединений (max_connections
).
🔹 Проблема: слишком много прямых соединений создают нагрузку на память и CPU.
🔹 Решение: используйте пуллинг через PgBouncer или Pgpool-II.
[databases]
mydb = host=127.0.0.1 port=5432 dbname=mydb
[pgbouncer]
listen_addr = 0.0.0.0
listen_port = 6432
pool_mode = transaction
max_client_conn = 500
default_pool_size = 20
🔹 Совет: на проде стремитесь держать
max_connections
< 200 и масштабируйте через пуллер.2. Буфер (Shared Buffers & Work Mem)
PostgreSQL активно использует память для кэширования страниц и сортировок.
🔹
shared_buffers
– основной буфер кэша:
shared_buffers = 4GB # ≈25% от RAM на выделенном сервере
🔹
work_mem
– память на сортировку/слияние одного потока:
work_mem = 64MB # для сложных запросов с сортировками и хэш-джоинами
maintenance_work_mem = 512MB # для VACUUM/CREATE INDEX
🔹 Best practice:
🔹 Установите
shared_buffers
≈ 25% RAM.🔹 Настройте
work_mem
исходя из числа параллельных операций, не превышайте общий объём памяти.3. WAL (Write-Ahead Log)
WAL обеспечивает надёжность и репликацию.
🔹
wal_level
– детальность логирования:
wal_level = replica # для потоковой репликации
🔹
checkpoint_timeout
и max_wal_size
:
checkpoint_timeout = 10min
max_wal_size = 1GB
🔹 Архивация WAL для резервных копий:
archive_mode = on
archive_command = 'cp %p /mnt/backup/wal/%f'
🔹 Рекомендации:
🔹 Увеличьте
max_wal_size
, если у вас большие всплески нагрузки.🔹 Настройте сжатие WAL (pg_wal) для экономии места.
💡 Сохрани, чтобы не забыть!
А как вы оптимизируете соединения, буфер и WAL в своих проектах?
#db
👉 @database_info
BY Базы данных (Data Base)

Share with your friend now:
tg-me.com/database_info/1479