SlideShare a Scribd company logo
The Art of Database
Experiments
Postgres.ai
Nikolay Samokhvalov
email: ns@postgres.ai
twitter: @postgresmen
About meAbout me:
Postgres experience: 13+ years (databases: 17+)
Past: Co-founder/CTO of 3 startups (total 30M+ users), all based on Postgres
Founder of #RuPostgres (1700+ members on Meetup.com, the 2nd largest globally)
Re-launched consulting practice in the SF Bay Area PostgreSQL.support
Founder of Postgres.ai – a platform aimed to automate what is not yet automated
Twitter: @postgresmen
Email: ns@postgres.ai
Part 1. Why database experiments?
How do we find SQL performance issues?
prod
monitoring
Engineer
prod
monitoring
Engineer
Automated signals (alerts),
manual observations
prod
monitoring
Engineer
Automated signals (alerts),
manual observations
prod
monitoring
Engineer
Automated signals (alerts),
manual observations
The most common tools for general SQL performance analysis:
prod
monitoring
Engineer
● pg_stat_statements
○ no query examples
○ no query plans
Automated signals (alerts),
manual observations
The most common tools for general SQL performance analysis:
prod
monitoring
Engineer
● pg_stat_statements
○ no query examples
○ no query plans
● log analysis (pgBadger)
○ requires maintenance
○ not “live”
○ no query plans (unless auto_explain is ON)
○ usually, not full picture
(log_min_duration_statement >> 0)
Automated signals (alerts),
manual observations
The most common tools for general SQL performance analysis:
How do we solve the issues we found?
dev/staging
m
anual
checks
manual checks
prod
monitoring
Engineer
dev/staging
m
anual
checks
manual checks
Four ways to improve performance:
prod
monitoring
Engineer
dev/staging
m
anual
checks
manual checks
Four ways to improve performance:
1. Tune Postgres configuration
prod
monitoring
Engineer
dev/staging
m
anual
checks
manual checks
Four ways to improve performance:
1. Tune Postgres configuration
2. Add/remove indexes
prod
monitoring
Engineer
dev/staging
m
anual
checks
manual checks
Four ways to improve performance:
1. Tune Postgres configuration
2. Add/remove indexes
3. Rewrite query / redesign DB schema
prod
monitoring
Engineer
dev/staging
m
anual
checks
manual checks
Four ways to improve performance:
1. Tune Postgres configuration
2. Add/remove indexes
3. Rewrite query / redesign DB schema
4. Add more resources (CPU, RAM, disks)
prod
monitoring
Engineer
Four ways to improve performance:
1. Tune Postgres configuration
2. Add/remove indexes
3. Rewrite query / redesign DB schema
4. Add more resources (CPU, RAM, disks)
Four ways to improve performance:
1. Tune Postgres configuration
2. Add/remove indexes
3. Rewrite query / redesign DB schema
4. Add more resources (CPU, RAM, disks)
~280 knobs!
Four ways to improve performance:
1. Tune Postgres configuration
2. Add/remove indexes
3. Rewrite query / redesign DB schema
4. Add more resources (CPU, RAM, disks)
~280 knobs!
btree, hash, GiST, SP-GiST, GIN,
RUM, BRIN, Bloom;
unique, partial, functional, covering
Four ways to improve performance:
1. Tune Postgres configuration
2. Add/remove indexes
3. Rewrite query / redesign DB schema
4. Add more resources (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
Four ways to improve performance:
1. Tune Postgres configuration
2. Add/remove indexes
3. Rewrite query / redesign DB schema
4. Add more resources (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
Four ways to improve performance:
1. Tune Postgres configuration
2. Add/remove indexes
3. Rewrite query / redesign DB schema
4. Add more resources (CPU, RAM, disks)
~280 knobs!
Expert DBA skips many steps…
Black magic!
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
Real-life examples
A real-life example. default_statistics_target: 100 vs 1000
The idea (from articles/blogs):
Default detault_statistics_target (100) is too low.
Let’s change it to 1000!
...Sounds good!
...Deployed!
But did it really improve everything? …anything?
But did it really improve everything? …anything?
Let’s check with Postgres.ai platform!
A real-life example. default_statistics_target: 100 vs 10002 years later we decided to make DB experiment to compare 100 and 1000:
A real-life example. default_statistics_target: 100 vs 1000
“before”:
default_statistics_target = 100
“after”:
default_statistics_target = 1000
A real-life example. default_statistics_target: 100 vs 1000
“before”:
default_statistics_target = 100
In general, the new value gives
better performance. Great!
“after”:
default_statistics_target = 1000
A real-life example. default_statistics_target: 100 vs 1000
“before”:
default_statistics_target = 100
Scroll down, a couple of query groups…
“after”:
default_statistics_target = 1000
A real-life example. default_statistics_target: 100 vs 1000
“before”:
default_statistics_target = 100
“after”:
default_statistics_target = 1000
One query group became much slower
after the change applied!
resolved with:
“ALTER TABLE/INDEX … ALTER COLUMN SET
STATISTICS …“
for particular table/index and column
Change management in other fields
Interfaces (GUI, CLI, API — any):
We have automated tests, CI/CD tools
GFDL and CC-BY-2.5, Wikipedia.org
One more example...
GFDL and CC-BY-2.5, Wikipedia.org
One more example...
Aviation, aeronautics, sport cars, etc:
wind tunnel
Experiments in other fields:
1. Are conducted in the special “lab” environment, not prod
(call it “staging”)
2. With very detailed, deep analysis
3. Highly automated. Multiple experimental runs, faster, less expensive
Part 2. Demo
Demo
Nancy CLI live demonstration (local + AWS)
Try it yourself (any feedback welcome): https://github.com/postgres-ai/nancy
Postgres.ai — GUI: “Create Experiment” form
Postgres.ai — GUI: “Create Experiment” form
Environment
Object
Workload
Delta
Part 3. Nancy CLI
What is a Database Experiment?
The Input:
1. Environment
hardware, software, OS, FS,
Postgres version, configuration
What is a Database Experiment?
The Input:
1. Environment
hardware, software, OS, FS,
Postgres version, configuration
2. Object
some database (e.g. cloned production)
What is a Database Experiment?
The Input:
1. Environment
hardware, software, OS, FS,
Postgres version, configuration
2. Object
some database (e.g. cloned production)
3. Workload
some SQL
What is a Database Experiment?
The Input:
1. Environment
hardware, software, OS, FS,
Postgres version, configuration
2. Object
some database (e.g. cloned production)
3. Workload
some SQL
4. Delta (optional; multiple values allowed)
some Postgres configuration change, or
new index
What is a Database Experiment?
The Input:
1. Environment
hardware, software, OS, FS,
Postgres version, configuration
2. Object
some database (e.g. cloned production)
3. Workload
some SQL
4. Delta (optional; multiple values allowed)
some Postgres configuration change, or
new index
The Output:
1. Summary
better or worse, in general?
What is a Database Experiment?
The Input:
1. Environment
hardware, software, OS, FS,
Postgres version, configuration
2. Object
some database (e.g. cloned production)
3. Workload
some SQL
4. Delta (optional; multiple values allowed)
some Postgres configuration change, or
new index
The Output:
1. Summary
better or worse, in general?
2. Artifacts
any useful “telemetry” data
What is a Database Experiment?
The Input:
1. Environment
hardware, software, OS, FS,
Postgres version, configuration
2. Object
some database (e.g. cloned production)
3. Workload
some SQL
4. Delta (optional; multiple values allowed)
some Postgres configuration change, or
new index
The Output:
1. Summary
better or worse, in general?
2. Artifacts
any useful “telemetry” data
3. Per-query deep SQL analysis
each query: better or worse?
What is a Database Experiment?
The Input:
1. Environment
hardware, software, OS, FS,
Postgres version, configuration
2. Object
some database (e.g. cloned production)
3. Workload
some SQL
4. Delta (optional; multiple values allowed)
some Postgres configuration change, or
new index
The Output:
1. Summary
better or worse, in general?
2. Artifacts
any useful “telemetry” data
3. Per-query deep SQL analysis
each query: better or worse?
+ histograms:
ms
query
group #
before
after
Is it possible with existing tools? Yes!
● Docker
● pgreplay
● pg_stat_***
● auto_explain
● pgBadger (with JSON output)
● AWS EC2 spot instances
All the blocks exist already!
Is it possible with existing tools? Yes!
● Docker
● pgreplay
● pg_stat_***
● auto_explain
● pgBadger (with JSON output)
● AWS EC2 spot instances
All the blocks exist already!
Nancy CLI: all these blocks (and more!), integrated and automated
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
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
Sign up for early access:
https://Postgres.ai
Postgres.ai — artificial DBA/DBRE assistants
AI-based cloud-friendly platform to automate database administration
55
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
Sign up for early access:
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
What’s inside the docker container?
Source: https://github.com/postgres-ai/nancy/tree/master/docker
Image: https://hub.docker.com/r/postgresmen/postgres-with-stuff/
Inside:
● Ubuntu 16.04
● Postgres (now 9.6 or10)
● postgres_dba (for manual debugging) https://github.com/NikolayS/postgres_dba
● log_min_duration_statement = 0
● pg_stat_statements enabled, with track_io_timing = on
● auto_explain enabled (all queries, with timing)
● pgreplay
● pgBadger
● pg_stat_kcache (WIP)
Nancy CLI – Use Cases
- Deep performance analysis (“clean run”), not affecting production
- Change management
- Regression testing when upgrading (software, hardware)
- Verify config optimization ideas
- Find optimal configuration
- … and train ML models for Postgres AI!
Part 4. Real life challenges*
______________________________
*
based on experience in 4 companies
with small to mid-sized databases (up to few TBs)
and OLTP workloads (up to 15k TPS)
How to collect workload?
log_min_duration_statement = 0
Fears of log_min_duration_statement = 0
Evaluate the impact of log_min_duration_statement = 0 (quickly and w/o any changes!):
https://gist.github.com/NikolayS/08d9b7b4845371d03e195a8d8df43408 (pay attention to comments)
Only ~300 kB/s expected,
~800 log entries per second
However…
log_destination = syslog
logging_collector = off
or
log_destination = stderr
logging_collector = off
or
log_destination = csvlog
logging_collector = on
What is better
for intensive logging?
# 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
● Forecast expected IOPS and write bandwidth
● Analyze your logging system (syslog/journald slows down everything, use
STDERR, logging collector)
● If forecasted impact is too high (say, dozens of MBs), consider sampling
( "SET log_min_duration_statement = 0;" in particular, random sessions)
Advices for log_min_duration_statement = 0
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%
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: 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!
Thank you!
Nikolay Samokhvalov
ns@postgres.ai
twitter: @postgresmen
73
Give it a try:
https://github.com/postgres-ai/nancy
Part 5. Future development
Various ways to create an experimental database
● 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)
The future development of Nancy CLI
● Speedup DB creation
● ZFS/XFS snapshots to revert PGDATA state within seconds
● Support GCP
● More artifacts delivered: pg_stat_kcache, etc
● nancy see-report to print the summary + top-30 queries
● nancy compare-reports to print the “diff” for 2+ reports (the summary + numbers for top-30 queries,
ordered by by total time based on the 1st report)
● Postgres 11
● pgbench -i for database initialization
● pgbench to generate multithreaded synthetic workload
● 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
○ gradient descent
● Provide costs estimation (time + money)
● Rewrite in Python or 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?
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

More Related Content

PDF
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 Vienna
PDF
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
PDF
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PDF
pg_proctab: Accessing System Stats in PostgreSQL
PPTX
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
PDF
Arquitetura de Memoria do PostgreSQL
PDF
Scalable crawling with Kafka, scrapy and spark - November 2021
PDF
Dbts2013 特濃jpoug log_file_sync
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 Vienna
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
pg_proctab: Accessing System Stats in PostgreSQL
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
Arquitetura de Memoria do PostgreSQL
Scalable crawling with Kafka, scrapy and spark - November 2021
Dbts2013 特濃jpoug log_file_sync

What's hot (20)

PDF
Problems with PostgreSQL on Multi-core Systems with MultiTerabyte Data
PDF
使ってみませんか?pg_hint_plan
PDF
NTT DATA と PostgreSQL が挑んだ総力戦
PDF
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
PDF
[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오
PDF
Understanding PostgreSQL LW Locks
PDF
Blazing Performance with Flame Graphs
ODP
PostgreSQL Administration for System Administrators
PPTX
Apache Tez – Present and Future
PDF
PostgreSQL WAL for DBAs
PPTX
Getting started with postgresql
PDF
Introduction VAUUM, Freezing, XID wraparound
PDF
アーキテクチャから理解するPostgreSQLのレプリケーション
PPTX
WiredTigerを詳しく説明
PPTX
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
PDF
Apache Flink internals
PPTX
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PPTX
MySQL Slow Query log Monitoring using Beats & ELK
PDF
Introduction to Apache Kafka
Problems with PostgreSQL on Multi-core Systems with MultiTerabyte Data
使ってみませんか?pg_hint_plan
NTT DATA と PostgreSQL が挑んだ総力戦
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오
Understanding PostgreSQL LW Locks
Blazing Performance with Flame Graphs
PostgreSQL Administration for System Administrators
Apache Tez – Present and Future
PostgreSQL WAL for DBAs
Getting started with postgresql
Introduction VAUUM, Freezing, XID wraparound
アーキテクチャから理解するPostgreSQLのレプリケーション
WiredTigerを詳しく説明
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Apache Flink internals
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
MySQL Slow Query log Monitoring using Beats & ELK
Introduction to Apache Kafka
Ad

Similar to The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose (20)

PDF
Nancy CLI. Automated Database Experiments
DOC
Quick guide to PostgreSQL Performance Tuning
PDF
Using PEM to understand and improve performance in Postgres: Postgres Tuning ...
 
PDF
Postgresql 90 High Performance Paperback 20101020 Gregory Smith
PDF
Using PEM to understand and improve performance in Postgres: Postgres Tuning ...
 
PPTX
PostGreSQL Performance Tuning
PDF
Performance Whackamole (short version)
PDF
Performance Whack-a-Mole Tutorial (pgCon 2009)
PDF
Best Practices for Becoming an Exceptional Postgres DBA
 
PDF
Creating PostgreSQL-as-a-Service at Scale
PPTX
Postgres in production.2014
 
PDF
Storage Methods for Nonstandard Data Patterns
PDF
PostgreSQL 9 Administration Cookbook - Second Edition Simon Riggs
PPTX
Chjkkkkkkkkkkkkkkkkkjjjjjjjjjjjjjjjjjjjjjjjjjj01_The Basics.pptx
PDF
Performance Whack A Mole
PDF
PostgreSQL Portland Performance Practice Project - Database Test 2 Howto
PPTX
Demanding the Impossible: Rigorous Database Benchmarking
PDF
EnterpriseDB's Best Practices for Postgres DBAs
 
PDF
PostgreSQL 9 Administration Cookbook - Second Edition Simon Riggs
PPTX
PostgreSQL as a Strategic Tool
 
Nancy CLI. Automated Database Experiments
Quick guide to PostgreSQL Performance Tuning
Using PEM to understand and improve performance in Postgres: Postgres Tuning ...
 
Postgresql 90 High Performance Paperback 20101020 Gregory Smith
Using PEM to understand and improve performance in Postgres: Postgres Tuning ...
 
PostGreSQL Performance Tuning
Performance Whackamole (short version)
Performance Whack-a-Mole Tutorial (pgCon 2009)
Best Practices for Becoming an Exceptional Postgres DBA
 
Creating PostgreSQL-as-a-Service at Scale
Postgres in production.2014
 
Storage Methods for Nonstandard Data Patterns
PostgreSQL 9 Administration Cookbook - Second Edition Simon Riggs
Chjkkkkkkkkkkkkkkkkkjjjjjjjjjjjjjjjjjjjjjjjjjj01_The Basics.pptx
Performance Whack A Mole
PostgreSQL Portland Performance Practice Project - Database Test 2 Howto
Demanding the Impossible: Rigorous Database Benchmarking
EnterpriseDB's Best Practices for Postgres DBAs
 
PostgreSQL 9 Administration Cookbook - Second Edition Simon Riggs
PostgreSQL as a Strategic Tool
 
Ad

More from Nikolay Samokhvalov (20)

PDF
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
PDF
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
PDF
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
PDF
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
PDF
Database First! О распространённых ошибках использования РСУБД
PDF
2016.10.13 PostgreSQL in Russia
PDF
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
PDF
#noBackend, или Как выжить в эпоху толстеющих клиентов
PPTX
#PostgreSQLRussia в банке Тинькофф, доклад №1
PDF
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"
PDF
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
PDF
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
PPTX
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
PDF
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...
PDF
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
PPTX
2014.12.23 Александр Андреев, Parallels
PDF
2014.10.15 Сергей Бурладян, Avito.ru
PDF
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
PDF
2014.10.15 блиц-доклад PostgreSQL kNN search
PDF
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
Database First! О распространённых ошибках использования РСУБД
2016.10.13 PostgreSQL in Russia
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#noBackend, или Как выжить в эпоху толстеющих клиентов
#PostgreSQLRussia в банке Тинькофф, доклад №1
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
2014.12.23 Александр Андреев, Parallels
2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 блиц-доклад PostgreSQL kNN search
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)

Recently uploaded (20)

PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Approach and Philosophy of On baking technology
PDF
Heart disease approach using modified random forest and particle swarm optimi...
PPTX
Programs and apps: productivity, graphics, security and other tools
PPTX
1. Introduction to Computer Programming.pptx
PPTX
Tartificialntelligence_presentation.pptx
PDF
Empathic Computing: Creating Shared Understanding
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
Mushroom cultivation and it's methods.pdf
PPTX
cloud_computing_Infrastucture_as_cloud_p
PDF
A comparative analysis of optical character recognition models for extracting...
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPTX
Group 1 Presentation -Planning and Decision Making .pptx
PDF
August Patch Tuesday
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Encapsulation theory and applications.pdf
MIND Revenue Release Quarter 2 2025 Press Release
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Approach and Philosophy of On baking technology
Heart disease approach using modified random forest and particle swarm optimi...
Programs and apps: productivity, graphics, security and other tools
1. Introduction to Computer Programming.pptx
Tartificialntelligence_presentation.pptx
Empathic Computing: Creating Shared Understanding
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Assigned Numbers - 2025 - Bluetooth® Document
Mushroom cultivation and it's methods.pdf
cloud_computing_Infrastucture_as_cloud_p
A comparative analysis of optical character recognition models for extracting...
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Group 1 Presentation -Planning and Decision Making .pptx
August Patch Tuesday
Digital-Transformation-Roadmap-for-Companies.pptx
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Encapsulation theory and applications.pdf

The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose

  • 1. The Art of Database Experiments Postgres.ai Nikolay Samokhvalov email: [email protected] twitter: @postgresmen
  • 2. About meAbout me: Postgres experience: 13+ years (databases: 17+) Past: Co-founder/CTO of 3 startups (total 30M+ users), all based on Postgres Founder of #RuPostgres (1700+ members on Meetup.com, the 2nd largest globally) Re-launched consulting practice in the SF Bay Area PostgreSQL.support Founder of Postgres.ai – a platform aimed to automate what is not yet automated Twitter: @postgresmen Email: [email protected]
  • 3. Part 1. Why database experiments?
  • 4. How do we find SQL performance issues?
  • 8. prod monitoring Engineer Automated signals (alerts), manual observations The most common tools for general SQL performance analysis:
  • 9. prod monitoring Engineer ● pg_stat_statements ○ no query examples ○ no query plans Automated signals (alerts), manual observations The most common tools for general SQL performance analysis:
  • 10. prod monitoring Engineer ● pg_stat_statements ○ no query examples ○ no query plans ● log analysis (pgBadger) ○ requires maintenance ○ not “live” ○ no query plans (unless auto_explain is ON) ○ usually, not full picture (log_min_duration_statement >> 0) Automated signals (alerts), manual observations The most common tools for general SQL performance analysis:
  • 11. How do we solve the issues we found?
  • 13. dev/staging m anual checks manual checks Four ways to improve performance: prod monitoring Engineer
  • 14. dev/staging m anual checks manual checks Four ways to improve performance: 1. Tune Postgres configuration prod monitoring Engineer
  • 15. dev/staging m anual checks manual checks Four ways to improve performance: 1. Tune Postgres configuration 2. Add/remove indexes prod monitoring Engineer
  • 16. dev/staging m anual checks manual checks Four ways to improve performance: 1. Tune Postgres configuration 2. Add/remove indexes 3. Rewrite query / redesign DB schema prod monitoring Engineer
  • 17. dev/staging m anual checks manual checks Four ways to improve performance: 1. Tune Postgres configuration 2. Add/remove indexes 3. Rewrite query / redesign DB schema 4. Add more resources (CPU, RAM, disks) prod monitoring Engineer
  • 18. Four ways to improve performance: 1. Tune Postgres configuration 2. Add/remove indexes 3. Rewrite query / redesign DB schema 4. Add more resources (CPU, RAM, disks)
  • 19. Four ways to improve performance: 1. Tune Postgres configuration 2. Add/remove indexes 3. Rewrite query / redesign DB schema 4. Add more resources (CPU, RAM, disks) ~280 knobs!
  • 20. Four ways to improve performance: 1. Tune Postgres configuration 2. Add/remove indexes 3. Rewrite query / redesign DB schema 4. Add more resources (CPU, RAM, disks) ~280 knobs! btree, hash, GiST, SP-GiST, GIN, RUM, BRIN, Bloom; unique, partial, functional, covering
  • 21. Four ways to improve performance: 1. Tune Postgres configuration 2. Add/remove indexes 3. Rewrite query / redesign DB schema 4. Add more resources (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. Four ways to improve performance: 1. Tune Postgres configuration 2. Add/remove indexes 3. Rewrite query / redesign DB schema 4. Add more resources (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. Four ways to improve performance: 1. Tune Postgres configuration 2. Add/remove indexes 3. Rewrite query / redesign DB schema 4. Add more resources (CPU, RAM, disks) ~280 knobs! Expert DBA skips many steps… Black magic! 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. A real-life example. default_statistics_target: 100 vs 1000 The idea (from articles/blogs): Default detault_statistics_target (100) is too low. Let’s change it to 1000! ...Sounds good! ...Deployed!
  • 26. But did it really improve everything? …anything?
  • 27. But did it really improve everything? …anything? Let’s check with Postgres.ai platform!
  • 28. A real-life example. default_statistics_target: 100 vs 10002 years later we decided to make DB experiment to compare 100 and 1000:
  • 29. A real-life example. default_statistics_target: 100 vs 1000 “before”: default_statistics_target = 100 “after”: default_statistics_target = 1000
  • 30. A real-life example. default_statistics_target: 100 vs 1000 “before”: default_statistics_target = 100 In general, the new value gives better performance. Great! “after”: default_statistics_target = 1000
  • 31. A real-life example. default_statistics_target: 100 vs 1000 “before”: default_statistics_target = 100 Scroll down, a couple of query groups… “after”: default_statistics_target = 1000
  • 32. A real-life example. default_statistics_target: 100 vs 1000 “before”: default_statistics_target = 100 “after”: default_statistics_target = 1000 One query group became much slower after the change applied! resolved with: “ALTER TABLE/INDEX … ALTER COLUMN SET STATISTICS …“ for particular table/index and column
  • 33. Change management in other fields
  • 34. Interfaces (GUI, CLI, API — any): We have automated tests, CI/CD tools
  • 35. GFDL and CC-BY-2.5, Wikipedia.org One more example...
  • 36. GFDL and CC-BY-2.5, Wikipedia.org One more example... Aviation, aeronautics, sport cars, etc: wind tunnel
  • 37. Experiments in other fields: 1. Are conducted in the special “lab” environment, not prod (call it “staging”) 2. With very detailed, deep analysis 3. Highly automated. Multiple experimental runs, faster, less expensive
  • 39. Demo Nancy CLI live demonstration (local + AWS) Try it yourself (any feedback welcome): https://github.com/postgres-ai/nancy
  • 40. Postgres.ai — GUI: “Create Experiment” form
  • 41. Postgres.ai — GUI: “Create Experiment” form Environment Object Workload Delta
  • 43. What is a Database Experiment? The Input: 1. Environment hardware, software, OS, FS, Postgres version, configuration
  • 44. What is a Database Experiment? The Input: 1. Environment hardware, software, OS, FS, Postgres version, configuration 2. Object some database (e.g. cloned production)
  • 45. What is a Database Experiment? The Input: 1. Environment hardware, software, OS, FS, Postgres version, configuration 2. Object some database (e.g. cloned production) 3. Workload some SQL
  • 46. What is a Database Experiment? The Input: 1. Environment hardware, software, OS, FS, Postgres version, configuration 2. Object some database (e.g. cloned production) 3. Workload some SQL 4. Delta (optional; multiple values allowed) some Postgres configuration change, or new index
  • 47. What is a Database Experiment? The Input: 1. Environment hardware, software, OS, FS, Postgres version, configuration 2. Object some database (e.g. cloned production) 3. Workload some SQL 4. Delta (optional; multiple values allowed) some Postgres configuration change, or new index The Output: 1. Summary better or worse, in general?
  • 48. What is a Database Experiment? The Input: 1. Environment hardware, software, OS, FS, Postgres version, configuration 2. Object some database (e.g. cloned production) 3. Workload some SQL 4. Delta (optional; multiple values allowed) some Postgres configuration change, or new index The Output: 1. Summary better or worse, in general? 2. Artifacts any useful “telemetry” data
  • 49. What is a Database Experiment? The Input: 1. Environment hardware, software, OS, FS, Postgres version, configuration 2. Object some database (e.g. cloned production) 3. Workload some SQL 4. Delta (optional; multiple values allowed) some Postgres configuration change, or new index The Output: 1. Summary better or worse, in general? 2. Artifacts any useful “telemetry” data 3. Per-query deep SQL analysis each query: better or worse?
  • 50. What is a Database Experiment? The Input: 1. Environment hardware, software, OS, FS, Postgres version, configuration 2. Object some database (e.g. cloned production) 3. Workload some SQL 4. Delta (optional; multiple values allowed) some Postgres configuration change, or new index The Output: 1. Summary better or worse, in general? 2. Artifacts any useful “telemetry” data 3. Per-query deep SQL analysis each query: better or worse? + histograms: ms query group # before after
  • 51. Is it possible with existing tools? Yes! ● Docker ● pgreplay ● pg_stat_*** ● auto_explain ● pgBadger (with JSON output) ● AWS EC2 spot instances All the blocks exist already!
  • 52. Is it possible with existing tools? Yes! ● Docker ● pgreplay ● pg_stat_*** ● auto_explain ● pgBadger (with JSON output) ● AWS EC2 spot instances All the blocks exist already! Nancy CLI: all these blocks (and more!), integrated and automated https://github.com/postgres-ai/nancy
  • 53. 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
  • 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 Sign up for early access: https://Postgres.ai
  • 55. Postgres.ai — artificial DBA/DBRE assistants AI-based cloud-friendly platform to automate database administration 55 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 Sign up for early access: https://Postgres.ai
  • 56. 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
  • 57. What’s inside the docker container? Source: https://github.com/postgres-ai/nancy/tree/master/docker Image: https://hub.docker.com/r/postgresmen/postgres-with-stuff/ Inside: ● Ubuntu 16.04 ● Postgres (now 9.6 or10) ● postgres_dba (for manual debugging) https://github.com/NikolayS/postgres_dba ● log_min_duration_statement = 0 ● pg_stat_statements enabled, with track_io_timing = on ● auto_explain enabled (all queries, with timing) ● pgreplay ● pgBadger ● pg_stat_kcache (WIP)
  • 58. Nancy CLI – Use Cases - Deep performance analysis (“clean run”), not affecting production - Change management - Regression testing when upgrading (software, hardware) - Verify config optimization ideas - Find optimal configuration - … and train ML models for Postgres AI!
  • 59. Part 4. Real life challenges* ______________________________ * based on experience in 4 companies with small to mid-sized databases (up to few TBs) and OLTP workloads (up to 15k TPS)
  • 60. How to collect workload? log_min_duration_statement = 0
  • 61. Fears of log_min_duration_statement = 0 Evaluate the impact of log_min_duration_statement = 0 (quickly and w/o any changes!): https://gist.github.com/NikolayS/08d9b7b4845371d03e195a8d8df43408 (pay attention to comments) Only ~300 kB/s expected, ~800 log entries per second
  • 63. log_destination = syslog logging_collector = off or log_destination = stderr logging_collector = off or log_destination = csvlog logging_collector = on What is better for intensive logging?
  • 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
  • 67. # 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
  • 68. ● Forecast expected IOPS and write bandwidth ● Analyze your logging system (syslog/journald slows down everything, use STDERR, logging collector) ● If forecasted impact is too high (say, dozens of MBs), consider sampling ( "SET log_min_duration_statement = 0;" in particular, random sessions) Advices for log_min_duration_statement = 0
  • 69. 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%
  • 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: 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!
  • 73. Thank you! Nikolay Samokhvalov [email protected] twitter: @postgresmen 73 Give it a try: https://github.com/postgres-ai/nancy
  • 74. Part 5. Future development
  • 75. Various ways to create an experimental database ● 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
  • 76. 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)
  • 77. The future development of Nancy CLI ● Speedup DB creation ● ZFS/XFS snapshots to revert PGDATA state within seconds ● Support GCP ● More artifacts delivered: pg_stat_kcache, etc ● nancy see-report to print the summary + top-30 queries ● nancy compare-reports to print the “diff” for 2+ reports (the summary + numbers for top-30 queries, ordered by by total time based on the 1st report) ● Postgres 11 ● pgbench -i for database initialization ● pgbench to generate multithreaded synthetic workload ● 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 ○ gradient descent ● Provide costs estimation (time + money) ● Rewrite in Python or Go Feedback/contributions welcome https://github.com/postgres-ai/nancy
  • 78. Challenge: security issues Problem: a developer doesn’t have access to production. Nancy works with production data/workload. What about permissions and data protection?
  • 79. 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)
  • 80. 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