6. pg_dump
Снимок состояния данных
● Не возвращает в прежнее состояние
● Кроссплатформенность
● Большое время и сложность восстановления
7. репликация
● в PostgreSQL работает практически идеально
● не поможет от логической ошибки
● не является бэкапом (см пункт выше)
● не стоит бояться синхронной
8. checksums
Записанные и прочитанные данные могут содержать искажения:
● любой софт, в том числе и firmware содержит баги
● могут отключать только пользователи zfs, btrfs :)
● mdadm может сказать только что пора восстанавливать бакап
9. pg_basebackup && PITR
● восстановление быстрое, но не кроссплатформенное
● приемлемая нагрузка при снятии бэкапа (rsync)
● бэкап необходимо проверять (см пункт выше)
● доставка логов и PITR. REDO
12. Производительность
● Анализируйте происходящее!
● Логи запросов для статистического анализа (pgbadger)
● Снимайте метрики с системы и с PostgreSQL (OKMeter.IO, mamonsu, ...)
● Мы поговорим о внутреннем устройстве
13. Обработка запроса
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)
14. Управление памятью
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
15. Оптимальный размер 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 в бою
нельзя
● мы сделали правильную версию,
скоро будет
16. Ручки для управления памятью бакэнда
● work_mem
● maintenance_work_mem
● temp_buffers