SlideShare a Scribd company logo
www.postgrespro.ru
Беспроблемная
эксплуатация
PostgreSQL
Васильев Дмитрий
Задача доклада
● отказоустойчивость
● производительность
● балансировка
Часть №1
Целостность данных
Беспроблемная эксплуатация PostgreSQL
Инструменты
● pg_dump
● replication
● checksums
● backup && PITR
pg_dump
Снимок состояния данных
● Не возвращает в прежнее состояние
● Кроссплатформенность
● Большое время и сложность восстановления
репликация
● в PostgreSQL работает практически идеально
● не поможет от логической ошибки
● не является бэкапом (см пункт выше)
● не стоит бояться синхронной
checksums
Записанные и прочитанные данные могут содержать искажения:
● любой софт, в том числе и firmware содержит баги
● могут отключать только пользователи zfs, btrfs :)
● mdadm может сказать только что пора восстанавливать бакап
pg_basebackup && PITR
● восстановление быстрое, но не кроссплатформенное
● приемлемая нагрузка при снятии бэкапа (rsync)
● бэкап необходимо проверять (см пункт выше)
● доставка логов и PITR. REDO
Часть №2
Производительность
Беспроблемная эксплуатация PostgreSQL
Производительность
● Анализируйте происходящее!
● Логи запросов для статистического анализа (pgbadger)
● Снимайте метрики с системы и с PostgreSQL (OKMeter.IO, mamonsu, ...)
● Мы поговорим о внутреннем устройстве
Обработка запроса
update t
set y = y + 1 where x = 1
BACKEND
PARSER
PLANNER
EXECUTER
user=# d+ t
Table "user.t"
Column | Type
--------+---------+
x | integer |
y | integer |
Indexes:
"t_pkey" PRIMARY KEY, btree (x)
-[ RECORD 1 ]-------+---------
relid | 24639
schemaname | user
relname | t
seq_scan | 1
seq_tup_read | 0
idx_scan | 0
idx_tup_fetch | 0
n_tup_ins | 0
n_tup_upd | 0
n_tup_del | 0
n_tup_hot_upd | 0
n_live_tup | 0
n_dead_tup | 0
n_mod_since_analyze | 0
last_vacuum |
last_autovacuum |
last_analyze |
last_autoanalyze |
vacuum_count | 0
autovacuum_count | 0
analyze_count | 0
autoanalyze_count | 0
-[ RECORD 1 ]-+-------
relid | 24639
indexrelid | 24642
schemaname | user
relname | t
indexrelname | t_pkey
idx_scan | 0
idx_tup_read | 0
idx_tup_fetch | 0
| t_xmin | t_xmax | x | y |
---------+---------+---+---+
| 1 | 2 | 1 | 1 |
---------+---------+---+---+
| 2 | 0 | 1 | 2 |
---------+---------+---+---+
Update on t
-> Index Scan using t_pkey on t
-> Index Cond: (x = 1)
Управление памятью
DISK STORAGE
OS CACHE
(hint: effective_cache)
SHARED BUFFERS
BACKEND (work_mem, temp_buffers)
BACKEND (work_mem, temp_buffers)
BACKEND (work_mem, temp_buffers)OS DIRTY
R/W PAGE
Write Ahead Log
Оптимальный размер Shared Buffers
pg_buffercache
-[ RECORD 1 ]----+------
bufferid | 331
relfilenode | 2654
reltablespace | 1663
reldatabase | 16432
relforknumber | 0
relblocknumber | 1
isdirty | f
usagecount | 5
pinning_backends | 0
● зависит от вашего железа
● зависит от типа нагрузки
● использовать pg_buffercache в бою
нельзя
● мы сделали правильную версию,
скоро будет
Ручки для управления памятью бакэнда
● work_mem
● maintenance_work_mem
● temp_buffers
Vacuum
● Зачем
● Почему
● Как
Vacuum
-[ RECORD 1 ]----+-------------------------
datid | 16384
datname | database
pid | 10190
usesysid | 16431
usename | user
application_name | psql
client_addr |
client_hostname |
client_port | -1
backend_start | 2016-04-22 22:47:50
xact_start |
query_start | 2016-04-22 22:48:12
state_change | 2016-04-22 22:48:12
waiting | f
state | idle
backend_xid | 4
backend_xmin | 4
query | update t set y = y + 1
+--------+---------+---+---+
| t_xmin | t_xmax | x | y |
---------+---------+---+---+
| 1 | 2 | 1 | 1 |
---------+---------+---+---+
| 2 | 0 | 1 | 2 |
+--------+---------+---+---+
| 3 | 5 | 2 | 4 |
+--------+---------+---+---+
Vacuum ускоряет
Page
TupleTupleHeader
PageHeader
TupleHeader:
XMIN_COMMITTED
XMIN_ABORTED
XMAX_COMMITTED
XMAX_ABORTED
PageHeader:
pd_lsn, pd_checksum,
pd_flags:
PD_HAS_FREE_LINES
PD_PAGE_FULL
PD_ALL_VISIBLE
Беспроблемная эксплуатация PostgreSQL
Bloat: агрессивный вакуум
● autovacuum_max_workers
● autovacuum_naptime
● autovacuum_vacuum_scale_factor
● autovacuum_work_mem
Bloat: плохой код
● statement_timeout
● PgBouncer: server_idle_timeout
● pg_stat_activity && pg_cancel_backend()
● snapshot too old (~ 9.6)
Bloat: инструменты
● vacuum
● pg_repack
● pgcompacttable
Wraparound
● xmin, xmax являются 32 битным int
● счетчик переполняется:
2 недели на скорости 3k tp/s ~ 2^32
● current_xid должен только расти!
Freeze && Vacuum && Wraparound
Заморозкой всех строк,
созданных ОЧЕНЬ старыми
транзакциями занимается
vacuum
Wraparound
● FrozenXid (9.4)
● HEAP_XMIN_FROZEN (9.5)
● VM_ALL_FROZEN (9.6)
Часть №3
Балансировка клиентов
Балансировка клиентов
● PgBouncer
● PgPool-II
● Nginx (TCP)
● Haproxy
PgBouncer
PgBouncer
modes:
● session
● transaction
● statement
PostgreSQL
Client
Client
Client
Client
Client
SlaveSlave
Master
Write
Read
Query
PgPool: silver bullet ?
TCP Balancing
PgBouncer
PostgreSQL
Client
Client
Client
Client
Client
RW
RW
RW
RW
RW
HaProxy
PostgreSQL
http-check
http-check
TCP Balancing
PostgreSQL
(slave)
Client
Client
Client
Client
Client
RO
RO
RO
RO
RO
NGINX
or
HaProxy
PostgreSQL
(slave)
PostgreSQL
(slave)
www.postgrespro.ru
Спасибо за внимание!
www.postgrespro.ru
Вопросы?

More Related Content

ODP
PDF
PostgreSQL on sas/ssd/nvme/nvdimm
PDF
Советы для начинающих разработчиков PostgreSQL
PDF
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
PPTX
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
PDF
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
PPTX
Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...
PDF
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
PostgreSQL on sas/ssd/nvme/nvdimm
Советы для начинающих разработчиков PostgreSQL
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...

What's hot (20)

PDF
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
PDF
Отладка и устранение проблем в PostgreSQL Streaming Replication.
PPTX
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
PDF
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
PDF
Расширения для PostgreSQL
PPTX
обзор архитектуры и подсистем деплоя и мониторинга
PDF
pgconf.ru 2015.avito postgresql recovery
PDF
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PPTX
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
PDF
Streaming replication in practice
PDF
RootConf 2015
PDF
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
PDF
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
PDF
Механика DDoS (Александр Крижановский)
PDF
Алексей Фомкин, Практическое применение Web Workers
PDF
Максим Дунин, Nginx, Inc.
PDF
Олег Бартунов и Иван Панченко
PDF
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
PDF
Highload 2014. PostgreSQL: ups, DevOps.
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
Отладка и устранение проблем в PostgreSQL Streaming Replication.
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
Расширения для PostgreSQL
обзор архитектуры и подсистем деплоя и мониторинга
pgconf.ru 2015.avito postgresql recovery
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Streaming replication in practice
RootConf 2015
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Механика DDoS (Александр Крижановский)
Алексей Фомкин, Практическое применение Web Workers
Максим Дунин, Nginx, Inc.
Олег Бартунов и Иван Панченко
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Highload 2014. PostgreSQL: ups, DevOps.
Ad

Similar to Беспроблемная эксплуатация PostgreSQL (20)

PDF
PostgreSQL Streaming Replication
PDF
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
PDF
Реализация восстановления после аварий / Сергей Бурладян (Avito)
PDF
Hacking PostgreSQL. Обзор архитектуры.
PDF
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
PDF
От Make к Ansible
PDF
2014.10.15 Сергей Бурладян, Avito.ru
PDF
Percona XtraBackup: экспертные возможности (Алексей Копытов)
PDF
Call of Postgres: Advanced Operations (part 2)
PDF
Multimaster2
PDF
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro
PDF
C++ весна 2014 лекция 2
PPTX
Контроль качества и сопровождение программ в реальном времени
PDF
Romanova techforum bash
PDF
Опыт использования Spark, Основано на реальных событиях
PDF
Zherdev icinga 20120423
PDF
Kubasov 1 7_deploy
PDF
linux and freebsd monitoring
PDF
Обработка спйсмоданных: возможности оптимизации ИТ-инфраструктуры
PPTX
Антон Наумович - Контроль качества и сопровождение в реальном времени
PostgreSQL Streaming Replication
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Hacking PostgreSQL. Обзор архитектуры.
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
От Make к Ansible
2014.10.15 Сергей Бурладян, Avito.ru
Percona XtraBackup: экспертные возможности (Алексей Копытов)
Call of Postgres: Advanced Operations (part 2)
Multimaster2
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro
C++ весна 2014 лекция 2
Контроль качества и сопровождение программ в реальном времени
Romanova techforum bash
Опыт использования Spark, Основано на реальных событиях
Zherdev icinga 20120423
Kubasov 1 7_deploy
linux and freebsd monitoring
Обработка спйсмоданных: возможности оптимизации ИТ-инфраструктуры
Антон Наумович - Контроль качества и сопровождение в реальном времени
Ad

Беспроблемная эксплуатация PostgreSQL