SlideShare a Scribd company logo
Call of Postgres:
Advanced Operations
Alexey Lesovsky
lesovsky@gmail.com
PostgreSQL:
теория
03
Устройство PostgreSQL03
dataegret.com
План03
dataegret.com
Postmaster и клиенты.
Postgres memory и ввод-вывод.
Write-Ahead Log и WAL writer.
MVCC и Autovacuum.
Checkpoint'ы и Bgwriter.
Потоковая репликация.
Stats collector и Logger.
Postmaster03
dataegret.com
* postmaster.c
* This program acts as a clearing house for requests to the
* POSTGRES system. Frontend programs send a startup message
* to the Postmaster and the postmaster uses the info in the
* message to setup a backend process.
Postmaster03
dataegret.com
Инициализирует shared buffers.
Работает в бесконечном цикле, где:
●
Принимает подключения, запускает клиентские процессы.
●
Отслеживает работу фоновых процессов.
●
Завершает всех при выключении.
Postmaster03
dataegret.com
Потенциальные проблемы:
●
Шквал клиентов.
Postmaster03
dataegret.com
Каждый клиент = отдельный процесс.
Много клиентов (n_clients > n_core * 10) – плохо.
Много активных клиентов (n_clients > n_core) – плохо.
Почему?
●
(относительно) Долгая инициализация бэкенда.
●
Нагрузка на планировщик ОС.
●
Конкуренция за (аппаратные) ресурсы.
Процессная модель03
dataegret.com
Postgres opens dedicated backend for each client’s connection.
Process 2
Process 1
.
Process 3
.
.
Port 5432
Process 4
.
.
.
.
.
.
.
.
.
Clients
..
.
.
.
.
.
.
.
.
.
.
Backend 4
Backend 3
Backend 2
Backend 1
Client
connections
Postgres
Backends
Postmaster03
dataegret.com
Общая рекомендация – использовать pgbouncer.
Предпочтительный режим – transaction.
Ограничения:
●
Prepared statements.
●
SET/RESET.
●
https://wiki.postgresql.org/wiki/PgBouncer#Feature_matrix_for_pooling_modes
Настройки планировщика ОС.
Pgbouncer03
dataegret.com
Pgbouncer keeps only active connections and reuses idle ones.
Process 2
Process 1
.
Process 3
.
.
Port 5432
Process 4
.
.
.
.
.
.
.
.
.
Clients
.
.
.
.
Backend 2
Backend 1
Idle
Postgres
Backends
Port 6432
Free Slot
Active
Pgbouncer
Client
connections
Server
connections
Postgres Memory и ввод-вывод03
dataegret.com
Преимущества:
●
Не тратится время на инициализацию бэкенда.
●
Рестарт PG без отключения клиентов.
●
Подмена PG без отключения клиентов.
Postgres Memory и ввод-вывод03
dataegret.com
Postmaster и клиенты.
Postgres memory и ввод-вывод.
Write-Ahead Log и WAL writer.
MVCC и Autovacuum.
Checkpoint'ы и Bgwriter.
Потоковая репликация.
Stats collector и Logger.
Postgres Memory и ввод-вывод03
dataegret.com
Локальная (local) память.
Общая (shared) память.
Postgres Memory и ввод-вывод03
dataegret.com
Локальная (local) память:
●
Temp buffers – буфер для временные таблицы.
●
Work mem – ORDER BY, DISTINCT, hash/merge JOIN.
●
Maintenance/Autovacuum work mem – VACUUM, REINDEX.
Выделяется при необходимости, не затрагивая shared память.
Postgres Memory и ввод-вывод03
dataegret.com
Общая (shared) память:
●
Buffer pool – обработка данных.
●
WAL buffer – буфер журналов транзакций.
●
Commit Log – статусы транзакций.
●
Прочие структуры – фоновые процессы, локи и пр.
Инициализируется при старте сервера.
Buffer Manager03
dataegret.com
Backends access data through the buffer manager.
Backend 2
Backend 1
Buffer Table
Buffer Manager
Buffer Pool
Storage
8K page
Postgres Memory и ввод-вывод03
dataegret.com
Рекомендации:
●
shared_buffers – 25% или 75% от объема RAM.
●
Использовать HugePages при shared_buffers > 32GB
●
До 9.2 – libhugetlbfs.
●
9.3 – исключение.
●
С 9.4 – встроенная поддержка (huge_pages).
●
Не стесняться поднимать maintenance/autovacuum_work_mem.
Write-Ahead Log03
dataegret.com
Postmaster и клиенты.
Postgres memory и ввод-вывод.
Write-Ahead Log и WAL writer.
MVCC и Autovacuum.
Checkpoint'ы и Bgwriter.
Потоковая репликация.
Stats collector и Logger.
Write-Ahead Log03
dataegret.com
Write-Ahead Log:
●
Страховка от потери данных в случае аварий.
●
Аварии связанные с hardware, OS, PostgreSQL.
●
Все изменения (почти) фиксируются в WAL.
Write-Ahead Log03
dataegret.com
Чуть-чуть очевидных вещей:
●
WAL пишется бэкендами, либо асинхронно WAL Writer'ом.
●
WAL в хранится в файлах-сегментах по 16MB каждый.
●
WAL хранится в каталоге pg_xlog/ или pg_wal/.
●
Рекомендуется держать на отдельном диске (например с ОС).
Write-Ahead Log03
dataegret.com
Потенциальные проблемы:
●
Расход места на диске.
●
Производительность на запись – долгие COMMIT'ы.
●
Потеря COMMIT'ов в случае аварии при асинхронной записи WAL.
Write-Ahead Log03
dataegret.com
Что есть покрутить?
●
wal_level – всегда или replica или logical.
●
synchronous_commit = ?
●
wal_writer_delay – окно потери транзакций.
●
wal_writer_flush_after.
Write-Ahead Log03
dataegret.com
Что есть покрутить? – продолжение.
●
full_page_writes – снижает риск повреждения данных.
●
wal_compression – снижает объем записи WAL ценой CPU usage.
●
wal_log_hints – требуется для pg_rewind.
Write-Ahead Log03
dataegret.com
test* table/index size, MB WAL size, MB WAL size, %
minimal 256/43 922 0
replica 256/43 922 0.01
logical 256/43 924 0.2
logical (compressed) 256/43 672 -27
* pgbench -i -s 20; update pgbench_accounts set abalance = 1000;
MVCC и Autovacuum03
dataegret.com
Postmaster и клиенты.
Postgres memory и ввод-вывод.
Write-Ahead Log и WAL writer.
MVCC и Autovacuum.
Checkpoint'ы и Bgwriter.
Потоковая репликация.
Stats collector и Logger.
MVCC и Autovacuum03
dataegret.com
MVCC (Multi-Version Concurrency Control):
●
Хорошая производительность при конкурентном доступе.
●
При высокой активности на чтение/запись.
●
Читатели не блокируют читателей, Писатели не блокируют писателей.
●
Почти...
MVCC и Autovacuum03
dataegret.com
transaction id timeline
xid 1000 snapshot
?
unfinished transaction
finished transaction
?
?
?
MVCC и Autovacuum03
dataegret.com
Created: 123
Deleted:
Created: 123
Deleted: 456
Created: 456
Deleted:
Created: 456
Deleted: 789
Вставка (INSERT) строки транзакцией №123
Обновление (UPDATE) строки транзакцией №456
Удаление (DELETE) строки транзакцией №789
MVCC и Autovacuum03
dataegret.com
Уровни изоляции транзакций.
Правила проверки видимости работают со служебными полями.
Побочный эффект от MVCC – наличие устаревших версий строк.
Задача вакуума – убирать устаревшие версии строк.
Autovacuum03
dataegret.com
AV Launcher AV Worker
Postmaster
Initialization
Shared memory
Initialization
Scan pg_class
Check relations
Do vacuum
Recheck relations
Process relations
Vacuum/Analyze/Wrap ?
Balance costs
Process 1 relation
Open relation
Perform checks
Set Xid limits
Open indexes
Prune HOT chains Freeze tuples
Remove idx entries
Vacuum heap
Vacuum pages
Update FSM, VM
Close indexes
Truncate relation
Update FSMUpdate pg_class
Close relation
Vacuum TOAST ?
Postgres Backend
FREEZE ?
1 2
1
2
1
1
1
2
yes
FULL ?
CLUSTER
yes
no
https://www.slideshare.net/alexeylesovsky/nine-circles-of-inferno-or-explaining-the-postgresql-vacuum
Autovacuum03
dataegret.com
Общий взгляд на autovacuum и ключевые моменты работы.
Подходы в настройке autovacuum.
Потенциальные проблемы.
Autovacuum – общий взгляд03
dataegret.com
Postmaster запускает и AV Launcher, и воркеров.
AV Launcher решает какую базу вакуумить.
Воркер запускается против базы и строит список таблиц для вакуума.
Autovacuum – ключевые моменты03
dataegret.com
Как выбирается таблица?
●
На основе reltuples, n_dead_tuples, changes_since_analyze.
●
thresh = base_thresh + scale_factor * reltuples
Autovacuum – ключевые моменты03
dataegret.com
Как регулируется нагрузка создаваемая вакуумом:
●
За обработку страницы начисляются очки.
●
При достижении лимита очков, вакуум ставится на паузу.
●
После паузы вакуум продолжается, набранные очки сбрасываются.
●
Лимит очков делится поровну на всех активных воркеров.
Autovacuum – ключевые моменты03
dataegret.com
Как регулируется нагрузка создаваемая вакуумом:
●
За обработку страницы начисляются очки.
●
При достижении лимита очков, вакуум ставится на паузу.
●
После паузы вакуум продолжается, набранные очки сбрасываются.
●
Лимит очков делится поровну на всех активных воркеров.
А что если покрутить величину паузы и размер лимита?
Autovacuum – ключевые моменты03
dataegret.com
Antiwraparound vacuum:
●
Предотвращает потерю данных.
●
Довольно тяжелый до версии 9.6.
Anti-wraparound vacuum03
dataegret.com
Anti-wraparound vacuum03
dataegret.com
recentXid – текущая транзакция.
vacuum_freeze_min_age – строки с
возрастом старше должны быть
заморожены.
vacuum_freeze_table_age – полное
сканирование, если достигнут возраст.
autovacuum_freeze_max_age – возраст
принудительного запуска wraparound-
вакуума.
Autovacuum03
dataegret.com
Принципы настройки:
●
Дефолтные настройки.
●
Агрессивный/ленивый вакуум.
●
Индивидуальные настройки таблиц.
Autovacuum03
dataegret.com
Агрессивный вакуум, подход через cost-параметры:
autovacuum_vacuum_cost_delay = 10ms – по-умолчанию 20ms
vacuum_cost_page_hit = 1 – по-умолчанию 1
vacuum_cost_page_miss = 2 – по-умолчанию 10
vacuum_cost_page_dirty = 5 – по-умолчанию 20
autovacuum_vacuum_cost_limit = 1000 – по-умолчанию -1
Предполагаемая нагрузка: 80MB/s чтение, 16MB/s запись.
Autovacuum03
dataegret.com
Агрессивный вакуум, подход через threshold:
autovacuum_max_workers = 10 – по-умолчанию 3
autovacuum_naptime = 1s – по-умолчанию 1min
autovacuum_vacuum_threshold = 50 – по-умолчанию 50
autovacuum_analyze_threshold = 50 – по-умолчанию 50
autovacuum_vacuum_scale_factor = 0.05 – по-умолчанию 0.2
autovacuum_analyze_scale_factor = 0.05 – по-умолчанию 0.1
Вакуумить чаще и меньшими порциями.
Autovacuum03
dataegret.com
Потенциальные проблемы:
●
Нагрузка на storage – пересмотреть cost_delay, cost_limit.
●
Большой объем генерируемого WAL (+лаг репликации).
●
Затяжной вакуум (особенно при дефолтах) + bloat таблиц.
●
Риск wraparound, аварийное выключение.
Autovacuum03
dataegret.com
Мониторинг:
●
pg_stat_progress_vacuum (c 9.6).
●
pg_stat_activity.
●
Логи (log_autovacuum_min_duration).
●
Iotop, pidstat.
План03
dataegret.com
Postmaster и клиенты.
Postgres memory и ввод-вывод.
Write-Ahead Log и WAL writer.
MVCC и Autovacuum.
Checkpoint'ы и Bgwriter.
Потоковая репликация.
Stats collector и Logger.
Checkpoint'ы и Bgwriter03
dataegret.com
Dirty pages
Shared buffers
Write-out
Permanent storage
Backend 1
Backend 2
Checkpoint'ы и Bgwriter03
dataegret.com
Checkpointer process – cоздает контрольные точки:
●
Сбрасывает «грязные» страницы в момент создания КТ.
●
Обновляет pg_control после КТ.
Background Writer – сбрасывает «грязные» страницы постоянно.
Checkpoint'ы и Bgwriter03
dataegret.com
Особенности чекпоинтов:
●
Выполняются с интервалом.
●
Выполняются при выключении постгреса – важно при рестарте.
●
Риск нагрузки на storage.
Checkpoint'ы и Bgwriter03
dataegret.com
Конфигурирование чекпоинтов:
●
Что легче – записать 64GB в 5 минут или 60 минут?
●
Главная мысль – разумно растянуть чекпоинт по времени:
●
max_wal_size = ⅒ от размера инстанса – по-умолчанию 1GB
●
checkpoint_timeout = 1h – по-умолчанию 5min
●
checkpoint_completion_target = 0.9 – по-умолчанию 0.5
●
full_page_writes – быть или не быть? – по-умолчанию «on»
Checkpoint'ы и Bgwriter03
dataegret.com
Конфигурирование Bgwriter:
●
Главная мысль – максимум агрессивности:
●
bgwriter_delay = 10ms – по-умолчанию 200ms
●
bgwriter_lru_maxpages = 1000 – по-умолчанию 100
●
bgwriter_lru_multiplier = 10.0 – по-умолчанию 2.0
Checkpoint'ы и Bgwriter03
dataegret.com
Особенности эксплуатации:
●
Достаточно настроить один раз.
●
Мониторинг – pg_stat_bgwriter, постгресовый лог.
План03
dataegret.com
Postmaster и клиенты.
Postgres memory и ввод-вывод.
Write-Ahead Log и WAL writer.
MVCC и Autovacuum.
Checkpoint'ы и Bgwriter.
Потоковая репликация.
Stats collector и Logger.
Потоковая репликация03
dataegret.com
Потоковая репликация:
●
Работает за счет передачи и воспроизведения WAL.
●
Есть и физическая (с 9.0) и логическая (с 10.0).
●
Легко настраивается, простая и надежная.
Ограничения и недостатки:
●
Работает в 1 поток.
Потоковая репликация03
dataegret.com
Мастер Реплика
5. Получение стартовой позиции
6. Проверка наличия журнала
7. Запуск WAL sender, отправка журнала
11. Обновление статистики
1. Проверка источника XLOG
2. Запуск WAL receiver
3. Вычисление стартовой позиции
4. Подключение к мастеру, отправка
позиции
8. Запись журнала на диск
9. Обновление «отметки»
10. Отправка статистики
11. Воспроизведение журнала
Начальная фаза
Цикл репликации
Потоковая репликация03
dataegret.com
Какие бывают проблемы:
●
Лаг репликации:
●
Network/Storage/CPU/Stuck consumer.
●
Конфликты репликации.
●
Bloat таблиц/индексов.
Потоковая репликация03
dataegret.com
Особенности настройки:
●
max_wal_senders – по-умолчанию 0
●
wal_keep_segments – по-умолчанию 0
●
wal_sender_timeout – по-умолчанию 60s
●
wal_receiver_timeout – по-умолчанию 60s
●
track_commit_timestamp = on – по-умолчанию «off»
●
hot_standby = on – по-умолчанию «off»
●
hot_standby_feedback – по-умолчанию «off»
●
max_standby_streaming_delay – по-умолчанию 30s
Потоковая репликация03
dataegret.com
Особенности эксплуатации:
●
Мониторинг: pg_stat_replication, pg_replication_slots, функции().
●
pg_xlogdump – анализ WAL журнала.
●
Top, Iostat, Nicstat.
План03
dataegret.com
Postmaster и клиенты.
Postgres memory и ввод-вывод.
Write-Ahead Log и WAL writer.
MVCC и Autovacuum.
Checkpoint'ы и Bgwriter.
Потоковая репликация.
Stats collector и Logger.
Stats collector и Logging03
dataegret.com
Трекинг событий:
●
DEBUG, INFO, NOTICE, WARNING, ERROR, LOG, FATAL, PANIC.
Мониторинг активности:
●
Системные функции и представления.
●
Extension'ы.
Stats collector и Logging03
dataegret.com
Статистика и логирование:
●
track_commit_timestamp = on
●
log_checkpoints = on
●
log_line_prefix = '%m %p %u@%d from %h [vxid:%v txid:%x] [%i] '
●
log_lock_waits = on
●
log_temp_files = 0
●
log_min_duration_statement = 1000
Stats collector и Logging03
dataegret.com
Статистика и логирование – продолжение:
●
track_counts = on
●
track_activities = on
●
track_io_timing = on
●
track_functions = pl
●
track_activity_query_size = 8192
●
log_autovacuum_min_duration = 10000
Вопросы?
dataegret.com lesovsky@gmail.com

More Related Content

PDF
Call of Postgres: Advanced Operations (part 1)
PDF
Call of Postgres: Advanced Operations (part 5)
PDF
Call of Postgres: Advanced Operations (part 2)
PDF
Call of Postgres: Advanced Operations (part 4)
PDF
PostgreSQL Vacuum: Nine Circles of Hell
PDF
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
PDF
Реализация восстановления после аварий / Сергей Бурладян (Avito)
PDF
Отладка и устранение проблем в PostgreSQL Streaming Replication.
Call of Postgres: Advanced Operations (part 1)
Call of Postgres: Advanced Operations (part 5)
Call of Postgres: Advanced Operations (part 2)
Call of Postgres: Advanced Operations (part 4)
PostgreSQL Vacuum: Nine Circles of Hell
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Отладка и устранение проблем в PostgreSQL Streaming Replication.

What's hot (19)

PDF
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
PDF
PostgreSQL Streaming Replication
PDF
Streaming replication in practice
PPTX
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
PDF
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
PDF
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
PPTX
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
PDF
Современная операционная система: что надо знать разработчику / Александр Кри...
PDF
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
PDF
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
PDF
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
PDF
Механика DDoS (Александр Крижановский)
PDF
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
PDF
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
PPTX
Mysql vs postgresql
PDF
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
PPTX
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
ODP
Константин Осипов (Mail.Ru)
PDF
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
PostgreSQL Streaming Replication
Streaming replication in practice
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Современная операционная система: что надо знать разработчику / Александр Кри...
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Механика DDoS (Александр Крижановский)
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Mysql vs postgresql
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
Константин Осипов (Mail.Ru)
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Ad

Similar to Call of Postgres: Advanced Operations (part 3) (20)

PDF
Multimaster2
PDF
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro
PDF
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
PDF
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
PDF
High Load 2009 Imdg Presentation
PPTX
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
PPTX
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
PDF
Организация процесса регулярной обработки больших объемов данных
PDF
Другая виртуализация
PDF
Семь тысяч Rps, один go
PDF
linux and freebsd monitoring
PDF
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
PDF
WapStart: Как показывать 200 миллионов баннеров ежедневно и быть готовым пока...
PDF
Как показывать 200 миллионов баннеров ежедневно и быть готовым показать милли...
PDF
SkyTools помощь в вопросах масштабирования (Артем Носов)
PPTX
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
PPTX
2014.12.23 Александр Андреев, Parallels
PDF
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...
PPTX
Monitoring-driven эксплуатация (rootconf2015)
PPTX
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Multimaster2
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
High Load 2009 Imdg Presentation
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
Организация процесса регулярной обработки больших объемов данных
Другая виртуализация
Семь тысяч Rps, один go
linux and freebsd monitoring
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
WapStart: Как показывать 200 миллионов баннеров ежедневно и быть готовым пока...
Как показывать 200 миллионов баннеров ежедневно и быть готовым показать милли...
SkyTools помощь в вопросах масштабирования (Артем Носов)
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
2014.12.23 Александр Андреев, Parallels
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...
Monitoring-driven эксплуатация (rootconf2015)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Ad

More from Alexey Lesovsky (15)

PDF
Troubleshooting PostgreSQL with pgCenter
PDF
GitLab PostgresMortem: Lessons Learned
PDF
Troubleshooting PostgreSQL Streaming Replication
PDF
Tuning Linux for Databases.
PDF
Managing PostgreSQL with PgCenter
PDF
Nine Circles of Inferno or Explaining the PostgreSQL Vacuum
PDF
Deep dive into PostgreSQL statistics.
PDF
Streaming replication in practice
PDF
PostgreSQL Streaming Replication Cheatsheet
PDF
Deep dive into PostgreSQL statistics.
PDF
Deep dive into PostgreSQL statistics.
PDF
Pgcenter overview
PDF
Highload 2014. PostgreSQL: ups, DevOps.
PDF
PostgreSQL Troubleshoot On-line, (RITfest 2015 meetup at Moscow, Russia).
PDF
Linux tuning for PostgreSQL at Secon 2015
Troubleshooting PostgreSQL with pgCenter
GitLab PostgresMortem: Lessons Learned
Troubleshooting PostgreSQL Streaming Replication
Tuning Linux for Databases.
Managing PostgreSQL with PgCenter
Nine Circles of Inferno or Explaining the PostgreSQL Vacuum
Deep dive into PostgreSQL statistics.
Streaming replication in practice
PostgreSQL Streaming Replication Cheatsheet
Deep dive into PostgreSQL statistics.
Deep dive into PostgreSQL statistics.
Pgcenter overview
Highload 2014. PostgreSQL: ups, DevOps.
PostgreSQL Troubleshoot On-line, (RITfest 2015 meetup at Moscow, Russia).
Linux tuning for PostgreSQL at Secon 2015

Call of Postgres: Advanced Operations (part 3)

  • 1. Call of Postgres: Advanced Operations Alexey Lesovsky lesovsky@gmail.com
  • 4. План03 dataegret.com Postmaster и клиенты. Postgres memory и ввод-вывод. Write-Ahead Log и WAL writer. MVCC и Autovacuum. Checkpoint'ы и Bgwriter. Потоковая репликация. Stats collector и Logger.
  • 5. Postmaster03 dataegret.com * postmaster.c * This program acts as a clearing house for requests to the * POSTGRES system. Frontend programs send a startup message * to the Postmaster and the postmaster uses the info in the * message to setup a backend process.
  • 6. Postmaster03 dataegret.com Инициализирует shared buffers. Работает в бесконечном цикле, где: ● Принимает подключения, запускает клиентские процессы. ● Отслеживает работу фоновых процессов. ● Завершает всех при выключении.
  • 8. Postmaster03 dataegret.com Каждый клиент = отдельный процесс. Много клиентов (n_clients > n_core * 10) – плохо. Много активных клиентов (n_clients > n_core) – плохо. Почему? ● (относительно) Долгая инициализация бэкенда. ● Нагрузка на планировщик ОС. ● Конкуренция за (аппаратные) ресурсы.
  • 9. Процессная модель03 dataegret.com Postgres opens dedicated backend for each client’s connection. Process 2 Process 1 . Process 3 . . Port 5432 Process 4 . . . . . . . . . Clients .. . . . . . . . . . . Backend 4 Backend 3 Backend 2 Backend 1 Client connections Postgres Backends
  • 10. Postmaster03 dataegret.com Общая рекомендация – использовать pgbouncer. Предпочтительный режим – transaction. Ограничения: ● Prepared statements. ● SET/RESET. ● https://wiki.postgresql.org/wiki/PgBouncer#Feature_matrix_for_pooling_modes Настройки планировщика ОС.
  • 11. Pgbouncer03 dataegret.com Pgbouncer keeps only active connections and reuses idle ones. Process 2 Process 1 . Process 3 . . Port 5432 Process 4 . . . . . . . . . Clients . . . . Backend 2 Backend 1 Idle Postgres Backends Port 6432 Free Slot Active Pgbouncer Client connections Server connections
  • 12. Postgres Memory и ввод-вывод03 dataegret.com Преимущества: ● Не тратится время на инициализацию бэкенда. ● Рестарт PG без отключения клиентов. ● Подмена PG без отключения клиентов.
  • 13. Postgres Memory и ввод-вывод03 dataegret.com Postmaster и клиенты. Postgres memory и ввод-вывод. Write-Ahead Log и WAL writer. MVCC и Autovacuum. Checkpoint'ы и Bgwriter. Потоковая репликация. Stats collector и Logger.
  • 14. Postgres Memory и ввод-вывод03 dataegret.com Локальная (local) память. Общая (shared) память.
  • 15. Postgres Memory и ввод-вывод03 dataegret.com Локальная (local) память: ● Temp buffers – буфер для временные таблицы. ● Work mem – ORDER BY, DISTINCT, hash/merge JOIN. ● Maintenance/Autovacuum work mem – VACUUM, REINDEX. Выделяется при необходимости, не затрагивая shared память.
  • 16. Postgres Memory и ввод-вывод03 dataegret.com Общая (shared) память: ● Buffer pool – обработка данных. ● WAL buffer – буфер журналов транзакций. ● Commit Log – статусы транзакций. ● Прочие структуры – фоновые процессы, локи и пр. Инициализируется при старте сервера.
  • 17. Buffer Manager03 dataegret.com Backends access data through the buffer manager. Backend 2 Backend 1 Buffer Table Buffer Manager Buffer Pool Storage 8K page
  • 18. Postgres Memory и ввод-вывод03 dataegret.com Рекомендации: ● shared_buffers – 25% или 75% от объема RAM. ● Использовать HugePages при shared_buffers > 32GB ● До 9.2 – libhugetlbfs. ● 9.3 – исключение. ● С 9.4 – встроенная поддержка (huge_pages). ● Не стесняться поднимать maintenance/autovacuum_work_mem.
  • 19. Write-Ahead Log03 dataegret.com Postmaster и клиенты. Postgres memory и ввод-вывод. Write-Ahead Log и WAL writer. MVCC и Autovacuum. Checkpoint'ы и Bgwriter. Потоковая репликация. Stats collector и Logger.
  • 20. Write-Ahead Log03 dataegret.com Write-Ahead Log: ● Страховка от потери данных в случае аварий. ● Аварии связанные с hardware, OS, PostgreSQL. ● Все изменения (почти) фиксируются в WAL.
  • 21. Write-Ahead Log03 dataegret.com Чуть-чуть очевидных вещей: ● WAL пишется бэкендами, либо асинхронно WAL Writer'ом. ● WAL в хранится в файлах-сегментах по 16MB каждый. ● WAL хранится в каталоге pg_xlog/ или pg_wal/. ● Рекомендуется держать на отдельном диске (например с ОС).
  • 22. Write-Ahead Log03 dataegret.com Потенциальные проблемы: ● Расход места на диске. ● Производительность на запись – долгие COMMIT'ы. ● Потеря COMMIT'ов в случае аварии при асинхронной записи WAL.
  • 23. Write-Ahead Log03 dataegret.com Что есть покрутить? ● wal_level – всегда или replica или logical. ● synchronous_commit = ? ● wal_writer_delay – окно потери транзакций. ● wal_writer_flush_after.
  • 24. Write-Ahead Log03 dataegret.com Что есть покрутить? – продолжение. ● full_page_writes – снижает риск повреждения данных. ● wal_compression – снижает объем записи WAL ценой CPU usage. ● wal_log_hints – требуется для pg_rewind.
  • 25. Write-Ahead Log03 dataegret.com test* table/index size, MB WAL size, MB WAL size, % minimal 256/43 922 0 replica 256/43 922 0.01 logical 256/43 924 0.2 logical (compressed) 256/43 672 -27 * pgbench -i -s 20; update pgbench_accounts set abalance = 1000;
  • 26. MVCC и Autovacuum03 dataegret.com Postmaster и клиенты. Postgres memory и ввод-вывод. Write-Ahead Log и WAL writer. MVCC и Autovacuum. Checkpoint'ы и Bgwriter. Потоковая репликация. Stats collector и Logger.
  • 27. MVCC и Autovacuum03 dataegret.com MVCC (Multi-Version Concurrency Control): ● Хорошая производительность при конкурентном доступе. ● При высокой активности на чтение/запись. ● Читатели не блокируют читателей, Писатели не блокируют писателей. ● Почти...
  • 28. MVCC и Autovacuum03 dataegret.com transaction id timeline xid 1000 snapshot ? unfinished transaction finished transaction ? ? ?
  • 29. MVCC и Autovacuum03 dataegret.com Created: 123 Deleted: Created: 123 Deleted: 456 Created: 456 Deleted: Created: 456 Deleted: 789 Вставка (INSERT) строки транзакцией №123 Обновление (UPDATE) строки транзакцией №456 Удаление (DELETE) строки транзакцией №789
  • 30. MVCC и Autovacuum03 dataegret.com Уровни изоляции транзакций. Правила проверки видимости работают со служебными полями. Побочный эффект от MVCC – наличие устаревших версий строк. Задача вакуума – убирать устаревшие версии строк.
  • 31. Autovacuum03 dataegret.com AV Launcher AV Worker Postmaster Initialization Shared memory Initialization Scan pg_class Check relations Do vacuum Recheck relations Process relations Vacuum/Analyze/Wrap ? Balance costs Process 1 relation Open relation Perform checks Set Xid limits Open indexes Prune HOT chains Freeze tuples Remove idx entries Vacuum heap Vacuum pages Update FSM, VM Close indexes Truncate relation Update FSMUpdate pg_class Close relation Vacuum TOAST ? Postgres Backend FREEZE ? 1 2 1 2 1 1 1 2 yes FULL ? CLUSTER yes no https://www.slideshare.net/alexeylesovsky/nine-circles-of-inferno-or-explaining-the-postgresql-vacuum
  • 32. Autovacuum03 dataegret.com Общий взгляд на autovacuum и ключевые моменты работы. Подходы в настройке autovacuum. Потенциальные проблемы.
  • 33. Autovacuum – общий взгляд03 dataegret.com Postmaster запускает и AV Launcher, и воркеров. AV Launcher решает какую базу вакуумить. Воркер запускается против базы и строит список таблиц для вакуума.
  • 34. Autovacuum – ключевые моменты03 dataegret.com Как выбирается таблица? ● На основе reltuples, n_dead_tuples, changes_since_analyze. ● thresh = base_thresh + scale_factor * reltuples
  • 35. Autovacuum – ключевые моменты03 dataegret.com Как регулируется нагрузка создаваемая вакуумом: ● За обработку страницы начисляются очки. ● При достижении лимита очков, вакуум ставится на паузу. ● После паузы вакуум продолжается, набранные очки сбрасываются. ● Лимит очков делится поровну на всех активных воркеров.
  • 36. Autovacuum – ключевые моменты03 dataegret.com Как регулируется нагрузка создаваемая вакуумом: ● За обработку страницы начисляются очки. ● При достижении лимита очков, вакуум ставится на паузу. ● После паузы вакуум продолжается, набранные очки сбрасываются. ● Лимит очков делится поровну на всех активных воркеров. А что если покрутить величину паузы и размер лимита?
  • 37. Autovacuum – ключевые моменты03 dataegret.com Antiwraparound vacuum: ● Предотвращает потерю данных. ● Довольно тяжелый до версии 9.6.
  • 39. Anti-wraparound vacuum03 dataegret.com recentXid – текущая транзакция. vacuum_freeze_min_age – строки с возрастом старше должны быть заморожены. vacuum_freeze_table_age – полное сканирование, если достигнут возраст. autovacuum_freeze_max_age – возраст принудительного запуска wraparound- вакуума.
  • 41. Autovacuum03 dataegret.com Агрессивный вакуум, подход через cost-параметры: autovacuum_vacuum_cost_delay = 10ms – по-умолчанию 20ms vacuum_cost_page_hit = 1 – по-умолчанию 1 vacuum_cost_page_miss = 2 – по-умолчанию 10 vacuum_cost_page_dirty = 5 – по-умолчанию 20 autovacuum_vacuum_cost_limit = 1000 – по-умолчанию -1 Предполагаемая нагрузка: 80MB/s чтение, 16MB/s запись.
  • 42. Autovacuum03 dataegret.com Агрессивный вакуум, подход через threshold: autovacuum_max_workers = 10 – по-умолчанию 3 autovacuum_naptime = 1s – по-умолчанию 1min autovacuum_vacuum_threshold = 50 – по-умолчанию 50 autovacuum_analyze_threshold = 50 – по-умолчанию 50 autovacuum_vacuum_scale_factor = 0.05 – по-умолчанию 0.2 autovacuum_analyze_scale_factor = 0.05 – по-умолчанию 0.1 Вакуумить чаще и меньшими порциями.
  • 43. Autovacuum03 dataegret.com Потенциальные проблемы: ● Нагрузка на storage – пересмотреть cost_delay, cost_limit. ● Большой объем генерируемого WAL (+лаг репликации). ● Затяжной вакуум (особенно при дефолтах) + bloat таблиц. ● Риск wraparound, аварийное выключение.
  • 45. План03 dataegret.com Postmaster и клиенты. Postgres memory и ввод-вывод. Write-Ahead Log и WAL writer. MVCC и Autovacuum. Checkpoint'ы и Bgwriter. Потоковая репликация. Stats collector и Logger.
  • 46. Checkpoint'ы и Bgwriter03 dataegret.com Dirty pages Shared buffers Write-out Permanent storage Backend 1 Backend 2
  • 47. Checkpoint'ы и Bgwriter03 dataegret.com Checkpointer process – cоздает контрольные точки: ● Сбрасывает «грязные» страницы в момент создания КТ. ● Обновляет pg_control после КТ. Background Writer – сбрасывает «грязные» страницы постоянно.
  • 48. Checkpoint'ы и Bgwriter03 dataegret.com Особенности чекпоинтов: ● Выполняются с интервалом. ● Выполняются при выключении постгреса – важно при рестарте. ● Риск нагрузки на storage.
  • 49. Checkpoint'ы и Bgwriter03 dataegret.com Конфигурирование чекпоинтов: ● Что легче – записать 64GB в 5 минут или 60 минут? ● Главная мысль – разумно растянуть чекпоинт по времени: ● max_wal_size = ⅒ от размера инстанса – по-умолчанию 1GB ● checkpoint_timeout = 1h – по-умолчанию 5min ● checkpoint_completion_target = 0.9 – по-умолчанию 0.5 ● full_page_writes – быть или не быть? – по-умолчанию «on»
  • 50. Checkpoint'ы и Bgwriter03 dataegret.com Конфигурирование Bgwriter: ● Главная мысль – максимум агрессивности: ● bgwriter_delay = 10ms – по-умолчанию 200ms ● bgwriter_lru_maxpages = 1000 – по-умолчанию 100 ● bgwriter_lru_multiplier = 10.0 – по-умолчанию 2.0
  • 51. Checkpoint'ы и Bgwriter03 dataegret.com Особенности эксплуатации: ● Достаточно настроить один раз. ● Мониторинг – pg_stat_bgwriter, постгресовый лог.
  • 52. План03 dataegret.com Postmaster и клиенты. Postgres memory и ввод-вывод. Write-Ahead Log и WAL writer. MVCC и Autovacuum. Checkpoint'ы и Bgwriter. Потоковая репликация. Stats collector и Logger.
  • 53. Потоковая репликация03 dataegret.com Потоковая репликация: ● Работает за счет передачи и воспроизведения WAL. ● Есть и физическая (с 9.0) и логическая (с 10.0). ● Легко настраивается, простая и надежная. Ограничения и недостатки: ● Работает в 1 поток.
  • 54. Потоковая репликация03 dataegret.com Мастер Реплика 5. Получение стартовой позиции 6. Проверка наличия журнала 7. Запуск WAL sender, отправка журнала 11. Обновление статистики 1. Проверка источника XLOG 2. Запуск WAL receiver 3. Вычисление стартовой позиции 4. Подключение к мастеру, отправка позиции 8. Запись журнала на диск 9. Обновление «отметки» 10. Отправка статистики 11. Воспроизведение журнала Начальная фаза Цикл репликации
  • 55. Потоковая репликация03 dataegret.com Какие бывают проблемы: ● Лаг репликации: ● Network/Storage/CPU/Stuck consumer. ● Конфликты репликации. ● Bloat таблиц/индексов.
  • 56. Потоковая репликация03 dataegret.com Особенности настройки: ● max_wal_senders – по-умолчанию 0 ● wal_keep_segments – по-умолчанию 0 ● wal_sender_timeout – по-умолчанию 60s ● wal_receiver_timeout – по-умолчанию 60s ● track_commit_timestamp = on – по-умолчанию «off» ● hot_standby = on – по-умолчанию «off» ● hot_standby_feedback – по-умолчанию «off» ● max_standby_streaming_delay – по-умолчанию 30s
  • 57. Потоковая репликация03 dataegret.com Особенности эксплуатации: ● Мониторинг: pg_stat_replication, pg_replication_slots, функции(). ● pg_xlogdump – анализ WAL журнала. ● Top, Iostat, Nicstat.
  • 58. План03 dataegret.com Postmaster и клиенты. Postgres memory и ввод-вывод. Write-Ahead Log и WAL writer. MVCC и Autovacuum. Checkpoint'ы и Bgwriter. Потоковая репликация. Stats collector и Logger.
  • 59. Stats collector и Logging03 dataegret.com Трекинг событий: ● DEBUG, INFO, NOTICE, WARNING, ERROR, LOG, FATAL, PANIC. Мониторинг активности: ● Системные функции и представления. ● Extension'ы.
  • 60. Stats collector и Logging03 dataegret.com Статистика и логирование: ● track_commit_timestamp = on ● log_checkpoints = on ● log_line_prefix = '%m %p %u@%d from %h [vxid:%v txid:%x] [%i] ' ● log_lock_waits = on ● log_temp_files = 0 ● log_min_duration_statement = 1000
  • 61. Stats collector и Logging03 dataegret.com Статистика и логирование – продолжение: ● track_counts = on ● track_activities = on ● track_io_timing = on ● track_functions = pl ● track_activity_query_size = 8192 ● log_autovacuum_min_duration = 10000