Secrets of PostgreSQL Performance - Revolution...

45
Secrets of PostgreSQL Performance Frank Wiles Revolution Systems Thursday, September 8, 2011

Transcript of Secrets of PostgreSQL Performance - Revolution...

Page 1: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

Secrets of PostgreSQL Performance

Frank Wiles

Revolution Systems

Thursday, September 8, 2011

Page 2: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

Measure EverythingBefore

And After

Thursday, September 8, 2011

Page 3: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

DON’T DO DUMB

THINGS!

Thursday, September 8, 2011

Page 4: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

Don’t...

• Assume PostgreSQL is like MySQL

• Database server doing double duty

• Disk Contention

• Retrieve more data than you need

Thursday, September 8, 2011

Page 5: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

DO SMARTTHINGS!

Thursday, September 8, 2011

Page 6: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

Cache and cache some more

Thursday, September 8, 2011

Page 7: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

No seriously, cache the crap out of

everything

Thursday, September 8, 2011

Page 8: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

You probably STILL do not have enough

caching...

Thursday, September 8, 2011

Page 9: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

Watch your query counts!!!

Thursday, September 8, 2011

Page 10: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

The “Big 3” Tuning Parameters

shared_buffersSet to 25% of available

RAM and move up/down 5% to find sweet spot

effective_cache_size

Planning hint that tells PG how much RAM it can

expect for OS disk cache. Set to 50-75% of available

RAM

work_memPer process amount of

ORDER BY space. 5MBs is a good starting point

Thursday, September 8, 2011

Page 11: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

Other parameters to tune...

wal_buffers Set to 16MB and forget it

checkpoint_segments Increase to at least 10

maintenance_work_mem50MB for every GB of

RAM

synchronous_commit Turn off with data loss risks

Thursday, September 8, 2011

Page 12: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

Hardware Considerations

Thursday, September 8, 2011

Page 13: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

As much RAM as possible...

Thursday, September 8, 2011

Page 14: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

Disks. Lots of disks.

Not all disks are created equal. Faster disks make a huge difference.

Configuration of disks matters a lot. RAID-5 is bad. RAID-1+0 good.

Separate out the WAL onto it’s own disk can 4x write performance

Thursday, September 8, 2011

Page 15: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

Then worry about CPU speed

Thursday, September 8, 2011

Page 16: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

Use pgbouncer to pool conncetions

Thursday, September 8, 2011

Page 17: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

Tablespaces

Consider putting archive or legacy data onto slower drives/volumes

Separate your data and indexes onto different volumes if possible

This applies even on fancy SANs

Thursday, September 8, 2011

Page 18: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

SSDs

Thursday, September 8, 2011

Page 19: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

In the Cloud• Remember: You’re sharing disks and

you don’t even know how!

• You can get the best of both worlds with Rackspace and their Cloud Connect product

• Using EBS volumes and software RAID is best (but somewhat scary) option on AWS

Thursday, September 8, 2011

Page 20: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

OS Considerations

• Your choice of filesystem matters. Don’t use a journaled filesystem for your WAL. It is a journal.

• Use XFS for maximum performance.

• noatime

Thursday, September 8, 2011

Page 21: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

Common Django specific problems

Thursday, September 8, 2011

Page 22: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

select_related()

Thursday, September 8, 2011

Page 23: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

Thursday, September 8, 2011

Page 24: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

Thursday, September 8, 2011

Page 25: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

Queries in loops...

Thursday, September 8, 2011

Page 26: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

Proper indexing

Thursday, September 8, 2011

Page 27: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

COUNT() is SLOW!

Thursday, September 8, 2011

Page 28: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

Model ordering

Thursday, September 8, 2011

Page 29: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

Indexes

CREATE INDEX <name> ON <table> (<column>);

Thursday, September 8, 2011

Page 30: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

Multicolumn Indexes

CREATE INDEX <name> ON <table> (<column1>, <column2>, <columnN>);

Thursday, September 8, 2011

Page 31: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

Partial Indexes

CREATE INDEX open_tickets_idx ON tickets (open) WHERE open = ‘t’;

Thursday, September 8, 2011

Page 32: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

Performance Tools

Thursday, September 8, 2011

Page 33: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

Django Debug Toolbar

Thursday, September 8, 2011

Page 34: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

Slow Query Log

log_min_duration = 1000

Thursday, September 8, 2011

Page 35: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

pgfouine

http://pgfouine.projects.postgresql.org/

Thursday, September 8, 2011

Page 36: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

EXPLAIN

Sadly EXPLAIN output does not fit well on a slide....

Thursday, September 8, 2011

Page 37: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

The Dark Arts

Thursday, September 8, 2011

Page 38: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

Statistics

default_statistics_target = 10

ALTER <table> ALTER <column> SET STATISTICS <integer>;

Thursday, September 8, 2011

Page 39: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

Consider Triggers

Do you have a lot of this...

for x in Post.objects.all(): if x.status == 'Active': ActivePosts.objects.create(original=x.id)

Or overwritten save() methods that create new rows?

Thursday, September 8, 2011

Page 40: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

Table Partitioning

http://www.postgresql.org/docs/current/static/ddl-partitioning.html

• Break large tables into smaller tables by date or another partitioning scheme that fits your data

• Think of it as internal sharding

• DROP <table> instead of long slow DELETE FROM <table> WHERE created <= ‘2000-01-01’

Thursday, September 8, 2011

Page 41: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

Materialized Views

Real tables populated via triggers based on actionsin other tables

Thursday, September 8, 2011

Page 42: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

Crazy Replication

Thursday, September 8, 2011

Page 43: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

The problem....

• Making phone calls from 4+ data centers all over the globe

• Web app at HQ for users to adjust preferences and view call log history/status

• Frequent connectivity issues between data centers

• HUGE legacy app that couldn’t quickly be adjusted

Thursday, September 8, 2011

Page 44: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

Thursday, September 8, 2011

Page 45: Secrets of PostgreSQL Performance - Revolution Systemsmedia.revsys.com/.../2011/secrets-of-postgresql-performance.pdf · Secrets of PostgreSQL Performance Frank Wiles ... •Retrieve

Questions???

www.revsys.com

@fwiles / @revsys

[email protected]

Thursday, September 8, 2011