SlideShare ist ein Scribd-Unternehmen logo
1 von 84
Downloaden Sie, um offline zu lesen
Эксперименты над базами данных
Postgres в Docker и облаках —
оптимизация настроек и схемы вашей БД
без риска «уронить прод»
Николай Самохвалов
email: nik@postgres.ai
twitter: @postgresmen
О докладчике:
Опыт Postgres: 13+ лет (СУБД: 17+)
Прошлое: co-founder/CTO MoiKrug.ru, MirTesen.ru, Postila.ru (везде — Postgres)
Co-founder #RuPostgres (1700+ пользователей на Meetup.com, 2-е место в мире)
PostgreSQL-консалтинг в SF Bay Area (PostgreSQL.support)
Основатель Postgres.ai – платформа для Postgres DBA, автоматизация тех
задач DBA, которые ещё не автоматизированы «облаками»
Twitter: @postgresmen
Email: ns@postgres.ai
1. Зачем нужны эксперименты
над базами данных?
Как разработчики/DBA находят проблемы
производительности сегодня
prod
monitoring
Engineer
prod
monitoring
Engineer
Сигналы о проблемах (alerts)
наблюдения «вручную»
prod
monitoring
Engineer
Сигналы о проблемах (alerts)
наблюдения «вручную»
prod
monitoring
Engineer
Сигналы о проблемах (alerts)
наблюдения «вручную»
Наиболее популярные средства для анализа запросов «в целом»:
prod
monitoring
Engineer
Сигналы о проблемах (alerts)
наблюдения «вручную»
● pg_stat_statements
○ нет экземпляров
запросов
○ нет планов
Наиболее популярные средства для анализа запросов «в целом»:
prod
monitoring
Engineer
Сигналы о проблемах (alerts)
наблюдения «вручную»
● pg_stat_statements
○ нет экземпляров
запросов
○ нет планов
● log analysis (pgBadger)
○ требует поддержки
○ не «realtime»
○ обычно нет планов (есть, если auto_explain)
○ часто неполноценная картина
(log_min_duration_statement >> 0)
Наиболее популярные средства для анализа запросов «в целом»:
Как DBA решают найденные проблемы?
dev/staging
проверки
вручную
проверки
вручную
prod
monitoring
Engineer
dev/staging
проверки
вручную
проверки
вручную
4 способа улучшить производительность:
prod
monitoring
Engineer
dev/staging
проверки
вручную
проверки
вручную
4 способа улучшить производительность:
1. Тюнинг конфигурации Postgres
prod
monitoring
Engineer
dev/staging
проверки
вручную
проверки
вручную
4 способа улучшить производительность:
1. Тюнинг конфигурации Postgres
2. Добавить/удалить индексы
prod
monitoring
Engineer
dev/staging
проверки
вручную
проверки
вручную
4 способа улучшить производительность:
1. Тюнинг конфигурации Postgres
2. Добавить/удалить индексы
3. Изменить SQL-запрос / схему БД
prod
monitoring
Engineer
dev/staging
проверки
вручную
проверки
вручную
4 способа улучшить производительность:
1. Тюнинг конфигурации Postgres
2. Добавить/удалить индексы
3. Изменить SQL-запрос / схему БД
4. Нарастить ресурсы (CPU, RAM, disks)
prod
monitoring
Engineer
4 способа улучшить производительность:
1. Тюнинг конфига Postgres
2. Индексы
3. Изменить SQL-запрос / схему БД
4. Нарастить ресурсы (CPU, RAM, disks)
4 способа улучшить производительность:
1. Тюнинг конфига Postgres
2. Индексы
3. Изменить SQL-запрос / схему БД
4. Нарастить ресурсы (CPU, RAM, disks)
~280 knobs!
4 способа улучшить производительность:
1. Тюнинг конфига Postgres
2. Индексы
3. Изменить SQL-запрос / схему БД
4. Нарастить ресурсы (CPU, RAM, disks)
~280 knobs!
btree, hash, GiST, SP-GiST, GIN,
RUM, BRIN, Bloom;
unique, partial, functional, covering
4 способа улучшить производительность:
1. Тюнинг конфига Postgres
2. Индексы
3. Изменить SQL-запрос / схему БД
4. Нарастить ресурсы (CPU, RAM, disks)
~280 knobs! No real-workload
and real-data
verification
(or very limited
and affecting
production)
btree, hash, GiST, SP-GiST, GIN,
RUM, BRIN, Bloom;
unique, partial, functional, covering
4 способа улучшить производительность:
1. Тюнинг конфига Postgres
2. Индексы
3. Изменить SQL-запрос / схему БД
4. Нарастить ресурсы (CPU, RAM, disks)
~280 knobs!
Sub-optimal
or even far
from optimal
decisions
No real-workload
and real-data
verification
(or very limited
and affecting
production)
btree, hash, GiST, SP-GiST, GIN,
RUM, BRIN, Bloom;
unique, partial, functional, covering
4 способа улучшить производительность:
1. Тюнинг конфига Postgres
2. Индексы
3. Изменить SQL-запрос / схему БД
4. Нарастить ресурсы (CPU, RAM, disks)
~280 knobs!
DBA-эксперт пропускает многие шаги
«Чёрная магия»!
Sub-optimal
or even far
from optimal
decisions
No real-workload
and real-data
verification
(or very limited
and affecting
production)
btree, hash, GiST, SP-GiST, GIN,
RUM, BRIN, Bloom;
unique, partial, functional, covering
Примеры из жизни
Почитали умные статьи или посты в блогах. Возникла идея:
Значение default_statistics_target (100) слишком мало.
Давайте поменяем на 1000!
...Отличная идея!
...Сделано — уже в production!
Но всe ли запросы улучшились?
Как именно изменился каждый запрос?
Но всe ли запросы улучшились?
Как именно изменился каждый запрос?
Проверим с помощью экспериментов!
A real-life example. default_statistics_target: 100 vs 10002 года спустя: проверка с помощью эксперимента, значения 100 и 1000:
ДО: default_statistics_target = 100 ПОСЛЕ: default_statistics_target = 1000
В целом, новое значение
даёт лучшую
производительность
ДО: default_statistics_target = 100 ПОСЛЕ: default_statistics_target = 1000
Промотаем немного вниз...
ДО: default_statistics_target = 100 ПОСЛЕ: default_statistics_target = 1000
A real-life example. default_statistics_target: 100 vs 1000
Эта группа запросов стала намного
медленнее после изменения!
Решили с помощью:
“ALTER TABLE/INDEX … ALTER COLUMN SET
STATISTICS …“
на конкретном столбце
ДО: default_statistics_target = 100 ПОСЛЕ: default_statistics_target = 1000
Управление изменениями в других областях
Интерфейсы (GUI, CLI, API — любые):
Большое количество развитых решений CI/CD
GFDL and CC-BY-2.5, Wikipedia.org
Ещё один пример
GFDL and CC-BY-2.5, Wikipedia.org
Ещё один пример
Авиация, космос, автомобилестроение и т.д.:
аэродинамическая труба
Эксперименты в развитых отраслях:
1. …производятся в специальном окружении,
не в production!
(staging”, “лаборатория”)
2. Детальный анализ за счёт спецсредств
3. Высокий уровень автоматизации.
Много “прогонов”. Серии. Дешёвый, быстрый запуск
2. Демонстрация
Demo
Демонстрация Nancy CLI (локально + AWS)
Попробуйте (отзывы приветствуются!): https://github.com/postgres-ai/nancy
GUI Postgres.ai: форма создания эксперимента
Среда
Объект
Нагрузка
Изменение
3. Подробнее о Nancy CLI
Из чего состоит эксперимент над БД
Из чего состоит эксперимент над БД
Входящие:
1. Среда
“железо”, ОС, ФС,
Версия Postgres, конфигурация
Из чего состоит эксперимент над БД
Входящие:
1. Среда
“железо”, ОС, ФС,
Версия Postgres, конфигурация
2. Объект
Некоторая БД (например, “клон прода”)
Из чего состоит эксперимент над БД
Входящие:
1. Среда
“железо”, ОС, ФС,
Версия Postgres, конфигурация
2. Объект
Некоторая БД (например, “клон прода”)
3. Нагрузка
Некоторый набор SQL-запросов
Из чего состоит эксперимент над БД
Входящие:
1. Среда
“железо”, ОС, ФС,
Версия Postgres, конфигурация
2. Объект
Некоторая БД (например, “клон прода”)
3. Нагрузка
Некоторый набор SQL-запросов
4. Изменение (может быть несколько значений)
Некоторое изменение конфига Postgres
или, например, новый индекс
Из чего состоит эксперимент над БД
Входящие:
1. Среда
“железо”, ОС, ФС,
Версия Postgres, конфигурация
2. Объект
Некоторая БД (например, “клон прода”)
3. Нагрузка
Некоторый набор SQL-запросов
4. Изменение (может быть несколько значений)
Некоторое изменение конфига Postgres
или, например, новый индекс
Результат:
1. Summary
лучше или хуже, в целом?
Из чего состоит эксперимент над БД
Входящие:
1. Среда
“железо”, ОС, ФС,
Версия Postgres, конфигурация
2. Объект
Некоторая БД (например, “клон прода”)
3. Нагрузка
Некоторый набор SQL-запросов
4. Изменение (может быть несколько значений)
Некоторое изменение конфига Postgres
или, например, новый индекс
Результат:
1. Summary
лучше или хуже, в целом?
2. Артифакты
любые полезные подробности
Из чего состоит эксперимент над БД
Входящие:
1. Среда
“железо”, ОС, ФС,
Версия Postgres, конфигурация
2. Объект
Некоторая БД (например, “клон прода”)
3. Нагрузка
Некоторый набор SQL-запросов
4. Изменение (может быть несколько значений)
Некоторое изменение конфига Postgres
или, например, новый индекс
Результат:
1. Summary
лучше или хуже, в целом?
2. Артифакты
любые полезные подробности
3. Подробный анализ SQL-запросов
каждая группа: лучше или хуже?
+ гистограммы:
ms
query group #
before
after
Возможно ли посредством существующих решений?
● Docker
● pgreplay
● pg_stat_***
● auto_explain
● pgBadger (with JSON output)
● AWS EC2 spot instances
— Необходимые “строительные блоки” уже существуют
Возможно ли посредством существующих решений?
● Docker
● pgreplay
● pg_stat_***
● auto_explain
● pgBadger (with JSON output)
● AWS EC2 spot instances
— Необходимые “строительные блоки” уже существуют
Nancy CLI: эти (и не только) блоки, интегрированные в единое решение
https://github.com/postgres-ai/nancy
DIY automated pipeline for DB experiments and optimization
How to automate database optimization using ecosystem tools and AWS?
Analyze:
● pg_stat_statements
● auto_explan
● pgBadger to parse logs, use JSON output
● pg_query to group queries better
● pg_stat_kcache to analyze FS-level ops
Configuration:
● annotated.conf, pgtune, pgconfigurator, postgresqlco.nf
● ottertune
Suggested indexes (internal “what-if” API w/o actual execution)
● (useful: pgHero, POWA, HypoPG, dexter, plantuner)
Conduct experiments:
● pgreplay to replay logs (different log_line_prefix, you need to handle it)
● EC2 spot instances
Machine learning
● MADlib
pgBadger:
● Grouping queries can be implemented better (see pg_query)
● Makes all queries lower cased (hurts "camelCased" names)*
● Doesn’t really support plans (auto_explain)*
pgreplay and pgBadger are not friends,
require different log formats
*)
Fixed/improved in pgBadger 10.0
Postgres.ai — artificial DBA/DBRE assistants
AI-based cloud-friendly platform to automate database administration
53
Steve
AI-based expert in capacity planning and
database tuning
Joe
AI-based expert in query optimization and
Postgres indexes
Nancy
AI-based expert in database experiments.
Conducts experiments and presents
results to human and artificial DBAs
https://Postgres.ai
Postgres.ai — artificial DBA/DBRE assistants
AI-based cloud-friendly platform to automate database administration
54
Steve
AI-based expert in capacity planning and
database tuning
Joe
AI-based expert in query optimization and
Postgres indexes
Nancy
AI-based expert in database experiments.
Conducts experiments and presents
results to human and artificial DBAs
https://Postgres.ai
Meet Nancy CLI (open source)
Nancy CLI https://github.com/postgres-ai/nancy
● custom docker image (Postgres with extensions & tools)
● nancy prepare-workload to convert Postgres logs (now only .csv)
to workload binary file
● nancy run to run experiments
● able to run locally (any machine) on in EC2 spot instance (low price!),
including i3.*** instances (with NVMe)
● fully automated management of EC2 spots
Что внутри docker-контейнера Nancy
Исходники: https://github.com/postgres-ai/nancy/tree/master/docker
Образ: https://hub.docker.com/r/postgresmen/postgres-nancy
Внутри:
● Ubuntu 16.04
● Postgres (9.6, 10, 11)
● postgres_dba на случай ручного “дебаггинга” https://github.com/NikolayS/postgres_dba
● log_min_duration_statement = 0
● pg_stat_statements включены, с track_io_timing = on
● auto_explain опционально
● pgreplay
● pgBadger
● FlameGraph (perf cpu) https://github.com/postgres-ai/nancy/pull/159
Nancy CLI – вариант использования
- Детальный анализ SQL-запросов (“clean run”), не затрагивающий “прод”
- Управление изменениями (конфигурация, DDL)
- Регрессионное тестирование при апгрейдах (софта, железа)
- Проверка гипотез оптимизации
- Подбор оптимальной конфигурации
- Генерация обучающих данных для ML-моделей
4. Технические сложности
______________________________
*
на опыте использования в 5 компаниях
размеры БД — от малого (десятки ГБ) до среднего (несколько ТБ)
тип нагрузки OLTP (до 15k TPS)
Как создавать качественную нагрузку?
log_min_duration_statement = 0
Страхи log_min_duration_statement = 0
Как оценить поток лога при log_min_duration_statement = 0 (быстро и ничего не меняя!):
https://gist.github.com/NikolayS/08d9b7b4845371d03e195a8d8df43408 (внимание на комментарии)
Всего ожидаем ~300 kB/s,
~800 записей в лог в секунду
Но...
log_destination = syslog
logging_collector = off
или
log_destination = stderr
logging_collector = off
или
log_destination = csvlog
logging_collector = on
Какой вариант выбрать при
интенсивном логировании?
# Postgres 9.6.10
pgbench -U postgres -j2 -c24 -T60 -rnf - <<EOF
select;
EOF
# Postgres 9.6.10
pgbench -U postgres -j2 -c24 -T60 -rnf - <<EOF
select;
EOF
# Postgres 9.6.10
pgbench -U postgres -j2 -c24 -T60 -rnf - <<EOF
select;
EOF
# Postgres 9.6.10
pgbench -U postgres -j2 -c24 -T60 -rnf - <<EOF
select;
EOF
All-queries logging with syslog is
● 44x slower compared to “no logging”
● 33x slower compared to stderr /
logging collector
Be careful with syslog / journald
● Оцените IOPS и поток записи
● Проверьте свою систему логирования (syslog/journald может замедлять
всё радикально, подумайте о переходе на STDERR, logging collector)
● Если прогнозируемая нагрузка чрезмерно велика (десятки мегабайт и
более), рассмотрите вариант с сэмплированием
( "SET log_min_duration_statement = 0;" в конкретных, случайно
выбранных сессиях)
Советы для случая log_min_duration_statement = 0
Альтернативный вариант – “crafted workload”
--workload-pgbench (many thanks Michel Pelletier! @michelp)
Пример:
--workload-pgbench 
"-n -c${CPU_COUNT} -j${CPU_COUNT} -T$T 
-f /var/lib/postgresql/9.6/main/workload/1_select_posts.sql@6 
-f /var/lib/postgresql/9.6/main/workload/2_insert_post_view.sql@60 
-f /var/lib/postgresql/9.6/main/workload/3_insert_bot_visit.sql@50 
-f /var/lib/postgresql/9.6/main/workload/4_select_post_by_host.sql@2 
-f /var/lib/postgresql/9.6/main/workload/5_select_post_by_rare_host.sql@1 
-f /var/lib/postgresql/9.6/main/workload/6_select_post_by_category.sql@1 
-f /var/lib/postgresql/9.6/main/workload/7_conveyor.sql@6 
-f /var/lib/postgresql/9.6/main/workload/8_select_post_fresh.sql@1
...
Собираем самые “влиятельные” группы запросов для “crafted workload”:
with stats_age(seconds) as (
select extract('epoch' from now() - stats_reset)::numeric
from pg_stat_database
where datname = current_database()
)
select
row_number() over (order by total_time desc),
round(total_time::numeric / (sum(total_time) over (partition by 1))::numeric, 5) as
total_time_ratio,
round(calls::numeric / (sum(calls) over (partition by 1))::numeric, 5) as calls_ratio,
round(total_time::numeric / (select seconds from stats_age), 2) as time_per_second,
round(calls::numeric / (select seconds from stats_age), 2) as calls_second,
total_time,
calls,
rows,
query
from pg_stat_statements
where dbid = (select oid from pg_database where datname = current_database())
order by total_time desc
limit 20
;
Nancy real-world examples: seq_page_cost
GitLab.com: random_page_cost = 1.5 and seq_page_cost = 1
Decision was made to switch to seq_page_cost = 4
DB experiments with Nancy CLI were made to check was this decision good in
terms of performance.
Results:
https://gitlab.com/gitlab-com/gl-infra/infrastructure/issues/4835#note_106669373
– in general, SQL performance improved ~40%
WIP here, it is an open question, why is it so.
Nancy real-world examples: educate yourself
PostgreSQL Documentation “19.5. Write Ahead Log”
https://www.postgresql.org/docs/current/static/runtime-config-wal.html
Nancy real-world examples: shared_buffers
postila.ru,
Real workload (5 min),
61 GB RAM (ec2 i3.2xlarge),
DB size: ~500GB
Various shared_buffers
values
shared_buffers = 15GB (25%)
If we go from 25% o higher values (~80%), we improve SQL performance ~50%
pgbench/pgreplay — на той же машине, что и Postgres
или обязательно отдельно?
pgbench/pgreplay — на той же машине, что и Postgres
или обязательно отдельно?
FlameGraphs/perf
(thanks Victor Yagofarov!
https://github.com/postgres-ai/nancy/pull/159)
pgbench/pgreplay — на той же машине, что и Postgres
или обязательно отдельно?
FlameGraphs/perf
(thanks Victor Yagofarov!
https://github.com/postgres-ai/nancy/pull/159)
«Вклад» pgbench всего 6%
Nancy real-world examples: educate yourself
PostgreSQL Documentation “19.5. Write Ahead Log”
https://www.postgresql.org/docs/current/static/runtime-config-wal.html
Just conduct DB experiment with Nancy CLI,
use --keep-alive 3600 and compare!
Главное:
● Эксперименты БД — переход от «чёрной магии» к промышленным
методам и решениям, основанным на данных
● Staging DB — как можно ближе к production
● Лучше иметь много “staging DB”. Ещё лучше — создавать по запросу
● Используйте готовые open source решения для того, чтобы знать о
своей БД и нагрузке как можно больше
Спасибо!
Nikolay Samokhvalov
ns@postgres.ai
twitter: @postgresmen
78
Nancy CLI:
https://github.com/postgres-ai/nancy
5. Развитие
● plain text pg_dump
○ restoration is very slow (1 vcpu utilized)
○ “logical” – physical structure is lost (cannot experiment with bloat, etc)
○ small (if compressed)
○ “snapshot” only
● pg_dump with either -Fd (“directory”) or -Fc (“custom”):
○ restoration is faster (multiple vCPUs, -j option)
○ “logical” (again: bloat, physical layout is “lost”)
○ small (because compressed)
○ “snapshot” only
● pg_basebackup + WALs, point-in-time recovery (PITR), possibly with help from WAL-E, WAL-G, pgBackRest
○ less reliable, sometimes there issues (especially if 3rd party tools involved - e.g. WAL-E & WAL-G don’t support
tablespaces, there are bugs sometimes, etc)
○ “physical”: bloat and physical structure is preserved
○ not small – ~ size of the DB
○ can “walk in time” (PITR)
○ requires warm-up procedure (data is not in the memory!)
● AWS RDS: create a replica + promote it
○ no Spots :-/
○ Lazy Load is tricky (it looks like the DB is there but it’s very slow – warm-up is needed)
● Snapshots
● Ideas for serialization
○ Stop Postgres / rsync “back” or re-copy locally on NVMe / start Postgres
How can we speed up experimental runs?
● Prepare the EC2 instance(s) in advance and keep it
● Prepare EBS volume(s) only (perhaps, using an instance of the different
type) and keep it ready. When attached to the new instance, do warm-up
● Resource re-usage:
○ reuse docker container
○ reuse EC2 instance
○ serialize experimental runs serialization (DDL Do/Undo; VACUUM FULL; cleanup)
● Partial database snapshots (dump/restore only needed tables)
● Filesystem snapshots to have few-second resets
(examples: https://events.yandex.ru/lib/talks/4402/,
https://heapanalytics.com/blog/engineering/testing-database-changes-right-way)
The future development of Nancy CLI● ZFS/XFS snapshots to revert PGDATA state within seconds
● FlameGraphs (perf) – DONE https://github.com/postgres-ai/nancy/pull/159
● Support GCP
● More artifacts delivered: pg_stat_kcache, etc
● nancy describe to print the summary + top-N queries – DONE
● nancy describe to print the “diff” for 2+ reports (the summary + numbers for top-30 queries, ordered by
by total time based on the 1st report) – DONE
● Postgres 11 – DONE
● pgbench -i for database initialization – DONE
● pgbench to generate multithreaded synthetic workload – DONE
● Workload analysis: automatically detect “N+1 SELECT” when running workload
● Better support for the serialization of experimental runs
● Better support for multiple runs https://github.com/postgres-ai/nancy/pull/97
○ interval with step – WIP
○ gradient descent
● Provide costs estimation (time + money) – DONE
● Go
Feedback/contributions welcome
https://github.com/postgres-ai/nancy
Challenge: security issues
Problem: a developer doesn’t have access to production.
Nancy works with production data/workload.
What about permissions and data protection?
Possible solutions:
● Option 1: allow using Nancy CLI only to those who already have access
production (DBAs, SREs, DBREs)
● Option 2: obfuscate data when preparing a DB clone (no universal
solution yet, TODO)
● Option 3: allow access only to GUI, hide/obfuscate parameters (TODO)
Challenge: reliable results
Issues:
1. Single runs is not enough (fluctuations) – must repeat
2. “Before”/”after” runs on 2 different machines / EC2 nodes – “not fair” comparison
(defective hardware, throttling)
Solutions (ideally: combination of them):
● Sequential runs
● 4+ iterations of each experimental run
● “Baseline benchmark” https://github.com/postgres-ai/nancy/issues/94

Weitere ähnliche Inhalte

Was ist angesagt?

Особенности архитектуры распределённого хранилища в Dropbox / Слава Бахмутов ...
Особенности архитектуры распределённого хранилища в Dropbox / Слава Бахмутов ...Особенности архитектуры распределённого хранилища в Dropbox / Слава Бахмутов ...
Особенности архитектуры распределённого хранилища в Dropbox / Слава Бахмутов ...Ontico
 
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...it-people
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин ОсиповCodeFest
 
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Ontico
 
Антон Турецкий
Антон ТурецкийАнтон Турецкий
Антон ТурецкийCodeFest
 
Нагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.ТанкаНагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.ТанкаAleksandr Boichenko
 
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данныхПромышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данныхNikolay Samokhvalov
 
Антон Галицын
Антон ГалицынАнтон Галицын
Антон ГалицынCodeFest
 
Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.Alexey Lesovsky
 
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Ontico
 
Android: Как написать приложение, которое не тормозит
Android: Как  написать приложение, которое не тормозитAndroid: Как  написать приложение, которое не тормозит
Android: Как написать приложение, которое не тормозитElena Kotina
 
PostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектахPostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектахAlexey Vasiliev
 
Андрей Ситник
Андрей СитникАндрей Ситник
Андрей СитникCodeFest
 
Поиск наизнанку
Поиск наизнанкуПоиск наизнанку
Поиск наизнанкуNikolay Sivko
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайnoBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайOntico
 
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)Ontico
 
Веб-сервер Phantom
Веб-сервер PhantomВеб-сервер Phantom
Веб-сервер Phantomyaevents
 
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)Ontico
 
Оценка производительности hadoop кластера.
Оценка производительности hadoop кластера.Оценка производительности hadoop кластера.
Оценка производительности hadoop кластера.Vyacheslav Murashkin
 
Денис Иванов
Денис ИвановДенис Иванов
Денис ИвановCodeFest
 

Was ist angesagt? (20)

Особенности архитектуры распределённого хранилища в Dropbox / Слава Бахмутов ...
Особенности архитектуры распределённого хранилища в Dropbox / Слава Бахмутов ...Особенности архитектуры распределённого хранилища в Dropbox / Слава Бахмутов ...
Особенности архитектуры распределённого хранилища в Dropbox / Слава Бахмутов ...
 
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
 
Антон Турецкий
Антон ТурецкийАнтон Турецкий
Антон Турецкий
 
Нагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.ТанкаНагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.Танка
 
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данныхПромышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
 
Антон Галицын
Антон ГалицынАнтон Галицын
Антон Галицын
 
Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.
 
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
 
Android: Как написать приложение, которое не тормозит
Android: Как  написать приложение, которое не тормозитAndroid: Как  написать приложение, которое не тормозит
Android: Как написать приложение, которое не тормозит
 
PostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектахPostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектах
 
Андрей Ситник
Андрей СитникАндрей Ситник
Андрей Ситник
 
Поиск наизнанку
Поиск наизнанкуПоиск наизнанку
Поиск наизнанку
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайnoBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
 
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
 
Веб-сервер Phantom
Веб-сервер PhantomВеб-сервер Phantom
Веб-сервер Phantom
 
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
 
Оценка производительности hadoop кластера.
Оценка производительности hadoop кластера.Оценка производительности hadoop кластера.
Оценка производительности hadoop кластера.
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 

Ähnlich wie Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы вашей БД без риска «уронить прод» — Highload++ 2018

PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
 PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо... PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...it-people
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаMikhail Chinkov
 
Комфортная разработка мобильных проектов
Комфортная разработка мобильных проектовКомфортная разработка мобильных проектов
Комфортная разработка мобильных проектовCodeFest
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, ParallelsNikolay Samokhvalov
 
Jiramania презентации @augspb
Jiramania презентации   @augspbJiramania презентации   @augspb
Jiramania презентации @augspbGonchik Tsymzhitov
 
как из трех стоек сделать две.
как из трех стоек сделать две.как из трех стоек сделать две.
как из трех стоек сделать две.Serguei Gitinsky
 
SAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentationSAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentationNikolay Samokhvalov
 
"Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7""Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7"Badoo Development
 
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Ontico
 
Embarcadero All-Access
Embarcadero All-AccessEmbarcadero All-Access
Embarcadero All-AccessSerghei Urban
 
Александр Баяндин
Александр БаяндинАлександр Баяндин
Александр БаяндинCodeFest
 
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Vladimir Bakhov
 
Java 9: what is there beyond modularization
Java 9: what is there beyond modularizationJava 9: what is there beyond modularization
Java 9: what is there beyond modularizationIvan Krylov
 
Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)
Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)
Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)Ontico
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовYandex
 
Программируемость коммутаторов для ЦОД Cisco Nexus
Программируемость коммутаторов для ЦОД Cisco NexusПрограммируемость коммутаторов для ЦОД Cisco Nexus
Программируемость коммутаторов для ЦОД Cisco NexusCisco Russia
 
MySQL: Есть ли жизнь после 1 млрд. записей.
MySQL: Есть ли жизнь после 1 млрд. записей.MySQL: Есть ли жизнь после 1 млрд. записей.
MySQL: Есть ли жизнь после 1 млрд. записей.MageCloud
 
СУБД Firebird: Краткий обзор, Дмитрий Еманов (in Russian)
СУБД Firebird: Краткий обзор, Дмитрий Еманов (in Russian)СУБД Firebird: Краткий обзор, Дмитрий Еманов (in Russian)
СУБД Firebird: Краткий обзор, Дмитрий Еманов (in Russian)Alexey Kovyazin
 
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...Rais Charipov
 

Ähnlich wie Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы вашей БД без риска «уронить прод» — Highload++ 2018 (20)

PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
 PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо... PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
 
Комфортная разработка мобильных проектов
Комфортная разработка мобильных проектовКомфортная разработка мобильных проектов
Комфортная разработка мобильных проектов
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
Jiramania презентации @augspb
Jiramania презентации   @augspbJiramania презентации   @augspb
Jiramania презентации @augspb
 
как из трех стоек сделать две.
как из трех стоек сделать две.как из трех стоек сделать две.
как из трех стоек сделать две.
 
SAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentationSAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentation
 
Scaling PostgreSQL
Scaling PostgreSQLScaling PostgreSQL
Scaling PostgreSQL
 
"Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7""Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7"
 
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
 
Embarcadero All-Access
Embarcadero All-AccessEmbarcadero All-Access
Embarcadero All-Access
 
Александр Баяндин
Александр БаяндинАлександр Баяндин
Александр Баяндин
 
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)
 
Java 9: what is there beyond modularization
Java 9: what is there beyond modularizationJava 9: what is there beyond modularization
Java 9: what is there beyond modularization
 
Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)
Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)
Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
 
Программируемость коммутаторов для ЦОД Cisco Nexus
Программируемость коммутаторов для ЦОД Cisco NexusПрограммируемость коммутаторов для ЦОД Cisco Nexus
Программируемость коммутаторов для ЦОД Cisco Nexus
 
MySQL: Есть ли жизнь после 1 млрд. записей.
MySQL: Есть ли жизнь после 1 млрд. записей.MySQL: Есть ли жизнь после 1 млрд. записей.
MySQL: Есть ли жизнь после 1 млрд. записей.
 
СУБД Firebird: Краткий обзор, Дмитрий Еманов (in Russian)
СУБД Firebird: Краткий обзор, Дмитрий Еманов (in Russian)СУБД Firebird: Краткий обзор, Дмитрий Еманов (in Russian)
СУБД Firebird: Краткий обзор, Дмитрий Еманов (in Russian)
 
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
 

Mehr von Nikolay Samokhvalov

The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San JoseThe Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San JoseNikolay Samokhvalov
 
Nancy CLI. Automated Database Experiments
Nancy CLI. Automated Database ExperimentsNancy CLI. Automated Database Experiments
Nancy CLI. Automated Database ExperimentsNikolay Samokhvalov
 
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросыNikolay Samokhvalov
 
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросыNikolay Samokhvalov
 
Database First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБДDatabase First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБДNikolay Samokhvalov
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6Nikolay Samokhvalov
 
#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентовNikolay Samokhvalov
 
#PostgreSQLRussia в банке Тинькофф, доклад №1
#PostgreSQLRussia в банке Тинькофф, доклад №1#PostgreSQLRussia в банке Тинькофф, доклад №1
#PostgreSQLRussia в банке Тинькофф, доклад №1Nikolay Samokhvalov
 
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"Nikolay Samokhvalov
 
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...Nikolay Samokhvalov
 
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...Nikolay Samokhvalov
 
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...Nikolay Samokhvalov
 
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...Nikolay Samokhvalov
 
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.42014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4Nikolay Samokhvalov
 
2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ruNikolay Samokhvalov
 
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussiaNikolay Samokhvalov
 
2014.10.15 блиц-доклад PostgreSQL kNN search
2014.10.15 блиц-доклад PostgreSQL kNN search2014.10.15 блиц-доклад PostgreSQL kNN search
2014.10.15 блиц-доклад PostgreSQL kNN searchNikolay Samokhvalov
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)Nikolay Samokhvalov
 
PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky
PostgreSQL Moscow Meetup - September 2014 - Ilya KosmodemyanskyPostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky
PostgreSQL Moscow Meetup - September 2014 - Ilya KosmodemyanskyNikolay Samokhvalov
 

Mehr von Nikolay Samokhvalov (20)

The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San JoseThe Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
 
Nancy CLI. Automated Database Experiments
Nancy CLI. Automated Database ExperimentsNancy CLI. Automated Database Experiments
Nancy CLI. Automated Database Experiments
 
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
 
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
 
Database First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБДDatabase First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБД
 
2016.10.13 PostgreSQL in Russia
2016.10.13 PostgreSQL in Russia2016.10.13 PostgreSQL in Russia
2016.10.13 PostgreSQL in Russia
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
 
#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов
 
#PostgreSQLRussia в банке Тинькофф, доклад №1
#PostgreSQLRussia в банке Тинькофф, доклад №1#PostgreSQLRussia в банке Тинькофф, доклад №1
#PostgreSQLRussia в банке Тинькофф, доклад №1
 
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"
 
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
 
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
 
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
 
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...
 
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.42014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
 
2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru
 
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
 
2014.10.15 блиц-доклад PostgreSQL kNN search
2014.10.15 блиц-доклад PostgreSQL kNN search2014.10.15 блиц-доклад PostgreSQL kNN search
2014.10.15 блиц-доклад PostgreSQL kNN search
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
 
PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky
PostgreSQL Moscow Meetup - September 2014 - Ilya KosmodemyanskyPostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky
PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky
 

Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы вашей БД без риска «уронить прод» — Highload++ 2018

  • 1. Эксперименты над базами данных Postgres в Docker и облаках — оптимизация настроек и схемы вашей БД без риска «уронить прод» Николай Самохвалов email: nik@postgres.ai twitter: @postgresmen
  • 2. О докладчике: Опыт Postgres: 13+ лет (СУБД: 17+) Прошлое: co-founder/CTO MoiKrug.ru, MirTesen.ru, Postila.ru (везде — Postgres) Co-founder #RuPostgres (1700+ пользователей на Meetup.com, 2-е место в мире) PostgreSQL-консалтинг в SF Bay Area (PostgreSQL.support) Основатель Postgres.ai – платформа для Postgres DBA, автоматизация тех задач DBA, которые ещё не автоматизированы «облаками» Twitter: @postgresmen Email: ns@postgres.ai
  • 3. 1. Зачем нужны эксперименты над базами данных?
  • 4. Как разработчики/DBA находят проблемы производительности сегодня
  • 6. prod monitoring Engineer Сигналы о проблемах (alerts) наблюдения «вручную»
  • 7. prod monitoring Engineer Сигналы о проблемах (alerts) наблюдения «вручную»
  • 8. prod monitoring Engineer Сигналы о проблемах (alerts) наблюдения «вручную» Наиболее популярные средства для анализа запросов «в целом»:
  • 9. prod monitoring Engineer Сигналы о проблемах (alerts) наблюдения «вручную» ● pg_stat_statements ○ нет экземпляров запросов ○ нет планов Наиболее популярные средства для анализа запросов «в целом»:
  • 10. prod monitoring Engineer Сигналы о проблемах (alerts) наблюдения «вручную» ● pg_stat_statements ○ нет экземпляров запросов ○ нет планов ● log analysis (pgBadger) ○ требует поддержки ○ не «realtime» ○ обычно нет планов (есть, если auto_explain) ○ часто неполноценная картина (log_min_duration_statement >> 0) Наиболее популярные средства для анализа запросов «в целом»:
  • 11. Как DBA решают найденные проблемы?
  • 14. dev/staging проверки вручную проверки вручную 4 способа улучшить производительность: 1. Тюнинг конфигурации Postgres prod monitoring Engineer
  • 15. dev/staging проверки вручную проверки вручную 4 способа улучшить производительность: 1. Тюнинг конфигурации Postgres 2. Добавить/удалить индексы prod monitoring Engineer
  • 16. dev/staging проверки вручную проверки вручную 4 способа улучшить производительность: 1. Тюнинг конфигурации Postgres 2. Добавить/удалить индексы 3. Изменить SQL-запрос / схему БД prod monitoring Engineer
  • 17. dev/staging проверки вручную проверки вручную 4 способа улучшить производительность: 1. Тюнинг конфигурации Postgres 2. Добавить/удалить индексы 3. Изменить SQL-запрос / схему БД 4. Нарастить ресурсы (CPU, RAM, disks) prod monitoring Engineer
  • 18. 4 способа улучшить производительность: 1. Тюнинг конфига Postgres 2. Индексы 3. Изменить SQL-запрос / схему БД 4. Нарастить ресурсы (CPU, RAM, disks)
  • 19. 4 способа улучшить производительность: 1. Тюнинг конфига Postgres 2. Индексы 3. Изменить SQL-запрос / схему БД 4. Нарастить ресурсы (CPU, RAM, disks) ~280 knobs!
  • 20. 4 способа улучшить производительность: 1. Тюнинг конфига Postgres 2. Индексы 3. Изменить SQL-запрос / схему БД 4. Нарастить ресурсы (CPU, RAM, disks) ~280 knobs! btree, hash, GiST, SP-GiST, GIN, RUM, BRIN, Bloom; unique, partial, functional, covering
  • 21. 4 способа улучшить производительность: 1. Тюнинг конфига Postgres 2. Индексы 3. Изменить SQL-запрос / схему БД 4. Нарастить ресурсы (CPU, RAM, disks) ~280 knobs! No real-workload and real-data verification (or very limited and affecting production) btree, hash, GiST, SP-GiST, GIN, RUM, BRIN, Bloom; unique, partial, functional, covering
  • 22. 4 способа улучшить производительность: 1. Тюнинг конфига Postgres 2. Индексы 3. Изменить SQL-запрос / схему БД 4. Нарастить ресурсы (CPU, RAM, disks) ~280 knobs! Sub-optimal or even far from optimal decisions No real-workload and real-data verification (or very limited and affecting production) btree, hash, GiST, SP-GiST, GIN, RUM, BRIN, Bloom; unique, partial, functional, covering
  • 23. 4 способа улучшить производительность: 1. Тюнинг конфига Postgres 2. Индексы 3. Изменить SQL-запрос / схему БД 4. Нарастить ресурсы (CPU, RAM, disks) ~280 knobs! DBA-эксперт пропускает многие шаги «Чёрная магия»! Sub-optimal or even far from optimal decisions No real-workload and real-data verification (or very limited and affecting production) btree, hash, GiST, SP-GiST, GIN, RUM, BRIN, Bloom; unique, partial, functional, covering
  • 25. Почитали умные статьи или посты в блогах. Возникла идея: Значение default_statistics_target (100) слишком мало. Давайте поменяем на 1000! ...Отличная идея! ...Сделано — уже в production!
  • 26. Но всe ли запросы улучшились? Как именно изменился каждый запрос?
  • 27. Но всe ли запросы улучшились? Как именно изменился каждый запрос? Проверим с помощью экспериментов!
  • 28. A real-life example. default_statistics_target: 100 vs 10002 года спустя: проверка с помощью эксперимента, значения 100 и 1000:
  • 29. ДО: default_statistics_target = 100 ПОСЛЕ: default_statistics_target = 1000
  • 30. В целом, новое значение даёт лучшую производительность ДО: default_statistics_target = 100 ПОСЛЕ: default_statistics_target = 1000
  • 31. Промотаем немного вниз... ДО: default_statistics_target = 100 ПОСЛЕ: default_statistics_target = 1000
  • 32. A real-life example. default_statistics_target: 100 vs 1000 Эта группа запросов стала намного медленнее после изменения! Решили с помощью: “ALTER TABLE/INDEX … ALTER COLUMN SET STATISTICS …“ на конкретном столбце ДО: default_statistics_target = 100 ПОСЛЕ: default_statistics_target = 1000
  • 33. Управление изменениями в других областях
  • 34. Интерфейсы (GUI, CLI, API — любые): Большое количество развитых решений CI/CD
  • 35. GFDL and CC-BY-2.5, Wikipedia.org Ещё один пример
  • 36. GFDL and CC-BY-2.5, Wikipedia.org Ещё один пример Авиация, космос, автомобилестроение и т.д.: аэродинамическая труба
  • 37. Эксперименты в развитых отраслях: 1. …производятся в специальном окружении, не в production! (staging”, “лаборатория”) 2. Детальный анализ за счёт спецсредств 3. Высокий уровень автоматизации. Много “прогонов”. Серии. Дешёвый, быстрый запуск
  • 39. Demo Демонстрация Nancy CLI (локально + AWS) Попробуйте (отзывы приветствуются!): https://github.com/postgres-ai/nancy
  • 40. GUI Postgres.ai: форма создания эксперимента Среда Объект Нагрузка Изменение
  • 42. Из чего состоит эксперимент над БД
  • 43. Из чего состоит эксперимент над БД Входящие: 1. Среда “железо”, ОС, ФС, Версия Postgres, конфигурация
  • 44. Из чего состоит эксперимент над БД Входящие: 1. Среда “железо”, ОС, ФС, Версия Postgres, конфигурация 2. Объект Некоторая БД (например, “клон прода”)
  • 45. Из чего состоит эксперимент над БД Входящие: 1. Среда “железо”, ОС, ФС, Версия Postgres, конфигурация 2. Объект Некоторая БД (например, “клон прода”) 3. Нагрузка Некоторый набор SQL-запросов
  • 46. Из чего состоит эксперимент над БД Входящие: 1. Среда “железо”, ОС, ФС, Версия Postgres, конфигурация 2. Объект Некоторая БД (например, “клон прода”) 3. Нагрузка Некоторый набор SQL-запросов 4. Изменение (может быть несколько значений) Некоторое изменение конфига Postgres или, например, новый индекс
  • 47. Из чего состоит эксперимент над БД Входящие: 1. Среда “железо”, ОС, ФС, Версия Postgres, конфигурация 2. Объект Некоторая БД (например, “клон прода”) 3. Нагрузка Некоторый набор SQL-запросов 4. Изменение (может быть несколько значений) Некоторое изменение конфига Postgres или, например, новый индекс Результат: 1. Summary лучше или хуже, в целом?
  • 48. Из чего состоит эксперимент над БД Входящие: 1. Среда “железо”, ОС, ФС, Версия Postgres, конфигурация 2. Объект Некоторая БД (например, “клон прода”) 3. Нагрузка Некоторый набор SQL-запросов 4. Изменение (может быть несколько значений) Некоторое изменение конфига Postgres или, например, новый индекс Результат: 1. Summary лучше или хуже, в целом? 2. Артифакты любые полезные подробности
  • 49. Из чего состоит эксперимент над БД Входящие: 1. Среда “железо”, ОС, ФС, Версия Postgres, конфигурация 2. Объект Некоторая БД (например, “клон прода”) 3. Нагрузка Некоторый набор SQL-запросов 4. Изменение (может быть несколько значений) Некоторое изменение конфига Postgres или, например, новый индекс Результат: 1. Summary лучше или хуже, в целом? 2. Артифакты любые полезные подробности 3. Подробный анализ SQL-запросов каждая группа: лучше или хуже? + гистограммы: ms query group # before after
  • 50. Возможно ли посредством существующих решений? ● Docker ● pgreplay ● pg_stat_*** ● auto_explain ● pgBadger (with JSON output) ● AWS EC2 spot instances — Необходимые “строительные блоки” уже существуют
  • 51. Возможно ли посредством существующих решений? ● Docker ● pgreplay ● pg_stat_*** ● auto_explain ● pgBadger (with JSON output) ● AWS EC2 spot instances — Необходимые “строительные блоки” уже существуют Nancy CLI: эти (и не только) блоки, интегрированные в единое решение https://github.com/postgres-ai/nancy
  • 52. DIY automated pipeline for DB experiments and optimization How to automate database optimization using ecosystem tools and AWS? Analyze: ● pg_stat_statements ● auto_explan ● pgBadger to parse logs, use JSON output ● pg_query to group queries better ● pg_stat_kcache to analyze FS-level ops Configuration: ● annotated.conf, pgtune, pgconfigurator, postgresqlco.nf ● ottertune Suggested indexes (internal “what-if” API w/o actual execution) ● (useful: pgHero, POWA, HypoPG, dexter, plantuner) Conduct experiments: ● pgreplay to replay logs (different log_line_prefix, you need to handle it) ● EC2 spot instances Machine learning ● MADlib pgBadger: ● Grouping queries can be implemented better (see pg_query) ● Makes all queries lower cased (hurts "camelCased" names)* ● Doesn’t really support plans (auto_explain)* pgreplay and pgBadger are not friends, require different log formats *) Fixed/improved in pgBadger 10.0
  • 53. Postgres.ai — artificial DBA/DBRE assistants AI-based cloud-friendly platform to automate database administration 53 Steve AI-based expert in capacity planning and database tuning Joe AI-based expert in query optimization and Postgres indexes Nancy AI-based expert in database experiments. Conducts experiments and presents results to human and artificial DBAs https://Postgres.ai
  • 54. Postgres.ai — artificial DBA/DBRE assistants AI-based cloud-friendly platform to automate database administration 54 Steve AI-based expert in capacity planning and database tuning Joe AI-based expert in query optimization and Postgres indexes Nancy AI-based expert in database experiments. Conducts experiments and presents results to human and artificial DBAs https://Postgres.ai
  • 55. Meet Nancy CLI (open source) Nancy CLI https://github.com/postgres-ai/nancy ● custom docker image (Postgres with extensions & tools) ● nancy prepare-workload to convert Postgres logs (now only .csv) to workload binary file ● nancy run to run experiments ● able to run locally (any machine) on in EC2 spot instance (low price!), including i3.*** instances (with NVMe) ● fully automated management of EC2 spots
  • 56. Что внутри docker-контейнера Nancy Исходники: https://github.com/postgres-ai/nancy/tree/master/docker Образ: https://hub.docker.com/r/postgresmen/postgres-nancy Внутри: ● Ubuntu 16.04 ● Postgres (9.6, 10, 11) ● postgres_dba на случай ручного “дебаггинга” https://github.com/NikolayS/postgres_dba ● log_min_duration_statement = 0 ● pg_stat_statements включены, с track_io_timing = on ● auto_explain опционально ● pgreplay ● pgBadger ● FlameGraph (perf cpu) https://github.com/postgres-ai/nancy/pull/159
  • 57. Nancy CLI – вариант использования - Детальный анализ SQL-запросов (“clean run”), не затрагивающий “прод” - Управление изменениями (конфигурация, DDL) - Регрессионное тестирование при апгрейдах (софта, железа) - Проверка гипотез оптимизации - Подбор оптимальной конфигурации - Генерация обучающих данных для ML-моделей
  • 58. 4. Технические сложности ______________________________ * на опыте использования в 5 компаниях размеры БД — от малого (десятки ГБ) до среднего (несколько ТБ) тип нагрузки OLTP (до 15k TPS)
  • 59. Как создавать качественную нагрузку? log_min_duration_statement = 0
  • 60. Страхи log_min_duration_statement = 0 Как оценить поток лога при log_min_duration_statement = 0 (быстро и ничего не меняя!): https://gist.github.com/NikolayS/08d9b7b4845371d03e195a8d8df43408 (внимание на комментарии) Всего ожидаем ~300 kB/s, ~800 записей в лог в секунду
  • 62. log_destination = syslog logging_collector = off или log_destination = stderr logging_collector = off или log_destination = csvlog logging_collector = on Какой вариант выбрать при интенсивном логировании?
  • 63. # Postgres 9.6.10 pgbench -U postgres -j2 -c24 -T60 -rnf - <<EOF select; EOF
  • 64. # Postgres 9.6.10 pgbench -U postgres -j2 -c24 -T60 -rnf - <<EOF select; EOF
  • 65. # Postgres 9.6.10 pgbench -U postgres -j2 -c24 -T60 -rnf - <<EOF select; EOF
  • 66. # Postgres 9.6.10 pgbench -U postgres -j2 -c24 -T60 -rnf - <<EOF select; EOF All-queries logging with syslog is ● 44x slower compared to “no logging” ● 33x slower compared to stderr / logging collector Be careful with syslog / journald
  • 67. ● Оцените IOPS и поток записи ● Проверьте свою систему логирования (syslog/journald может замедлять всё радикально, подумайте о переходе на STDERR, logging collector) ● Если прогнозируемая нагрузка чрезмерно велика (десятки мегабайт и более), рассмотрите вариант с сэмплированием ( "SET log_min_duration_statement = 0;" в конкретных, случайно выбранных сессиях) Советы для случая log_min_duration_statement = 0
  • 68. Альтернативный вариант – “crafted workload” --workload-pgbench (many thanks Michel Pelletier! @michelp) Пример: --workload-pgbench "-n -c${CPU_COUNT} -j${CPU_COUNT} -T$T -f /var/lib/postgresql/9.6/main/workload/1_select_posts.sql@6 -f /var/lib/postgresql/9.6/main/workload/2_insert_post_view.sql@60 -f /var/lib/postgresql/9.6/main/workload/3_insert_bot_visit.sql@50 -f /var/lib/postgresql/9.6/main/workload/4_select_post_by_host.sql@2 -f /var/lib/postgresql/9.6/main/workload/5_select_post_by_rare_host.sql@1 -f /var/lib/postgresql/9.6/main/workload/6_select_post_by_category.sql@1 -f /var/lib/postgresql/9.6/main/workload/7_conveyor.sql@6 -f /var/lib/postgresql/9.6/main/workload/8_select_post_fresh.sql@1 ...
  • 69. Собираем самые “влиятельные” группы запросов для “crafted workload”: with stats_age(seconds) as ( select extract('epoch' from now() - stats_reset)::numeric from pg_stat_database where datname = current_database() ) select row_number() over (order by total_time desc), round(total_time::numeric / (sum(total_time) over (partition by 1))::numeric, 5) as total_time_ratio, round(calls::numeric / (sum(calls) over (partition by 1))::numeric, 5) as calls_ratio, round(total_time::numeric / (select seconds from stats_age), 2) as time_per_second, round(calls::numeric / (select seconds from stats_age), 2) as calls_second, total_time, calls, rows, query from pg_stat_statements where dbid = (select oid from pg_database where datname = current_database()) order by total_time desc limit 20 ;
  • 70. Nancy real-world examples: seq_page_cost GitLab.com: random_page_cost = 1.5 and seq_page_cost = 1 Decision was made to switch to seq_page_cost = 4 DB experiments with Nancy CLI were made to check was this decision good in terms of performance. Results: https://gitlab.com/gitlab-com/gl-infra/infrastructure/issues/4835#note_106669373 – in general, SQL performance improved ~40% WIP here, it is an open question, why is it so.
  • 71. Nancy real-world examples: educate yourself PostgreSQL Documentation “19.5. Write Ahead Log” https://www.postgresql.org/docs/current/static/runtime-config-wal.html
  • 72. Nancy real-world examples: shared_buffers postila.ru, Real workload (5 min), 61 GB RAM (ec2 i3.2xlarge), DB size: ~500GB Various shared_buffers values shared_buffers = 15GB (25%) If we go from 25% o higher values (~80%), we improve SQL performance ~50%
  • 73. pgbench/pgreplay — на той же машине, что и Postgres или обязательно отдельно?
  • 74. pgbench/pgreplay — на той же машине, что и Postgres или обязательно отдельно? FlameGraphs/perf (thanks Victor Yagofarov! https://github.com/postgres-ai/nancy/pull/159)
  • 75. pgbench/pgreplay — на той же машине, что и Postgres или обязательно отдельно? FlameGraphs/perf (thanks Victor Yagofarov! https://github.com/postgres-ai/nancy/pull/159) «Вклад» pgbench всего 6%
  • 76. Nancy real-world examples: educate yourself PostgreSQL Documentation “19.5. Write Ahead Log” https://www.postgresql.org/docs/current/static/runtime-config-wal.html Just conduct DB experiment with Nancy CLI, use --keep-alive 3600 and compare!
  • 77. Главное: ● Эксперименты БД — переход от «чёрной магии» к промышленным методам и решениям, основанным на данных ● Staging DB — как можно ближе к production ● Лучше иметь много “staging DB”. Ещё лучше — создавать по запросу ● Используйте готовые open source решения для того, чтобы знать о своей БД и нагрузке как можно больше
  • 80. ● plain text pg_dump ○ restoration is very slow (1 vcpu utilized) ○ “logical” – physical structure is lost (cannot experiment with bloat, etc) ○ small (if compressed) ○ “snapshot” only ● pg_dump with either -Fd (“directory”) or -Fc (“custom”): ○ restoration is faster (multiple vCPUs, -j option) ○ “logical” (again: bloat, physical layout is “lost”) ○ small (because compressed) ○ “snapshot” only ● pg_basebackup + WALs, point-in-time recovery (PITR), possibly with help from WAL-E, WAL-G, pgBackRest ○ less reliable, sometimes there issues (especially if 3rd party tools involved - e.g. WAL-E & WAL-G don’t support tablespaces, there are bugs sometimes, etc) ○ “physical”: bloat and physical structure is preserved ○ not small – ~ size of the DB ○ can “walk in time” (PITR) ○ requires warm-up procedure (data is not in the memory!) ● AWS RDS: create a replica + promote it ○ no Spots :-/ ○ Lazy Load is tricky (it looks like the DB is there but it’s very slow – warm-up is needed) ● Snapshots ● Ideas for serialization ○ Stop Postgres / rsync “back” or re-copy locally on NVMe / start Postgres
  • 81. How can we speed up experimental runs? ● Prepare the EC2 instance(s) in advance and keep it ● Prepare EBS volume(s) only (perhaps, using an instance of the different type) and keep it ready. When attached to the new instance, do warm-up ● Resource re-usage: ○ reuse docker container ○ reuse EC2 instance ○ serialize experimental runs serialization (DDL Do/Undo; VACUUM FULL; cleanup) ● Partial database snapshots (dump/restore only needed tables) ● Filesystem snapshots to have few-second resets (examples: https://events.yandex.ru/lib/talks/4402/, https://heapanalytics.com/blog/engineering/testing-database-changes-right-way)
  • 82. The future development of Nancy CLI● ZFS/XFS snapshots to revert PGDATA state within seconds ● FlameGraphs (perf) – DONE https://github.com/postgres-ai/nancy/pull/159 ● Support GCP ● More artifacts delivered: pg_stat_kcache, etc ● nancy describe to print the summary + top-N queries – DONE ● nancy describe to print the “diff” for 2+ reports (the summary + numbers for top-30 queries, ordered by by total time based on the 1st report) – DONE ● Postgres 11 – DONE ● pgbench -i for database initialization – DONE ● pgbench to generate multithreaded synthetic workload – DONE ● Workload analysis: automatically detect “N+1 SELECT” when running workload ● Better support for the serialization of experimental runs ● Better support for multiple runs https://github.com/postgres-ai/nancy/pull/97 ○ interval with step – WIP ○ gradient descent ● Provide costs estimation (time + money) – DONE ● Go Feedback/contributions welcome https://github.com/postgres-ai/nancy
  • 83. Challenge: security issues Problem: a developer doesn’t have access to production. Nancy works with production data/workload. What about permissions and data protection? Possible solutions: ● Option 1: allow using Nancy CLI only to those who already have access production (DBAs, SREs, DBREs) ● Option 2: obfuscate data when preparing a DB clone (no universal solution yet, TODO) ● Option 3: allow access only to GUI, hide/obfuscate parameters (TODO)
  • 84. Challenge: reliable results Issues: 1. Single runs is not enough (fluctuations) – must repeat 2. “Before”/”after” runs on 2 different machines / EC2 nodes – “not fair” comparison (defective hardware, throttling) Solutions (ideally: combination of them): ● Sequential runs ● 4+ iterations of each experimental run ● “Baseline benchmark” https://github.com/postgres-ai/nancy/issues/94