0% found this document useful (0 votes)
35 views61 pages

Accidentaldbalinuxcon 130102190320 Phpapp02

This document provides a summary of key topics for accidental PostgreSQL database administrators (DBAs) including installation, configuration, connections, backups, monitoring, slow queries, and upgrades. It emphasizes using packages for installation, setting proper hardware, networking and security configurations, taking logical or continuous backups, monitoring with various tools, addressing slow queries with EXPLAIN and EXPLAIN ANALYZE, and testing major upgrades. The overall message is "don't panic" and various tips are provided to help accidental DBAs manage PostgreSQL databases.

Uploaded by

metalpower
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
35 views61 pages

Accidentaldbalinuxcon 130102190320 Phpapp02

This document provides a summary of key topics for accidental PostgreSQL database administrators (DBAs) including installation, configuration, connections, backups, monitoring, slow queries, and upgrades. It emphasizes using packages for installation, setting proper hardware, networking and security configurations, taking logical or continuous backups, monitoring with various tools, addressing slow queries with EXPLAIN and EXPLAIN ANALYZE, and testing major upgrades. The overall message is "don't panic" and various tips are provided to help accidental DBAs manage PostgreSQL databases.

Uploaded by

metalpower
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 61

The Accidental DBA

a guide for
the perplexed

Do
n 't P
ani
c
Josh Berkus
PostgreSQL Experts, Inc.
LinuxCon NA 2012
“Jonathan quit.
You're in charge of
the Postgres servers
now.”
covered in this talk
● PostgreSQL ● MySQL
● installation ● (covered
● configuration yesterday)
● connections ● no time for
● backup ● replication
● monitoring ● indexes
● slow queries ● schema design
● migrations
9.2rc1 Out Now!
“DevOps”

“Cloud”
Y U no DBA?

1.limited budgets
2.shortage of operational staff
3.cheaper OSS databases

… you are the DBA now.


Oh My God,
We’re All Going To Die.
Do
n 't P
a ni
c
Do
n't
P ani
c
Installation
Use Packages!
● version not important?
● use the ones that come with your
distro
● Red Hat, Centos, SciLinux
● Debian, Ubuntu
● SuSE
Use Packages!
● need the latest version?
● alternate packages
● Red Hat: yum.postgresql.org
● Ubuntu: Martin Pitt's backports
● SuSE: build service
● Debian: backports coming soon
create data directory?
● $PGDATA is where the database files
live
● most packages create it
● if not, use “initdb” to create it
● pick a suitable location!
Do
n't
P ani
c
configuration
use good hardware
● databases use all the hardware
● RAM, CPU, IO
● disk can be very important
– DB larger than RAM
– write-heavy database

● the database cannot outperform bad


hardware
put the database
on its own server
(or virtual server)
cloud servers
● cloud server performance sucks
● especially IO
● make sure you have enough RAM to
cache the whole database
Linux configuration
1.turn the OOM killer off
2.set zone_reclaim_mode = 0
3.use XFS or Ext4 for database files
4.increase shmmax, shmall
● so that you can raise shared_buffers
● this is going away with 9.3!
postgresql.conf
shared_buffers = ¼ of RAM up to 8GB
work_mem =
( RAM * 2 )/ max_connections
maintenance_work_mem = 1/16 RAM
effective_cache_size = 75% of RAM
checkpoint_segments =
32 (small DB)
to 128 (large DB, many writes)
Do
n't
P ani
c
connections
&
security
network
● local connections: UDP, if possible
● faster than TCP/IP
● other servers: port 5432
● make sure it's open on the firewall!
● on the cloud? use SSL
● secure your connections
● PITA to set up, though
max_connections
“ERROR: connection limit
exceeded for non-superusers”
● postgresql.conf
● increase number of connections
● good up to about 50 + 10 x cores
● keep needing to increase it?
something wrong with the app
connection pooling
● Java? use J2EE pooling
● Everyone else: pgbouncer
● event-based pooler
● separate package
● on DB server, or
● app server, or
rd

3 “bouncer” server
host-based access
“FATAL: no pg_hba.conf entry for host
"192.168.0.1", user "chaos", database
"chaosLRdb", SSL off”
● pg_hba.conf
● access control list:
● database/user/host address
● like iptables for Postgres
● change config and reload
security
“FATAL: password authentication
failed for user "wwwuser"”
● Postgres users & passwords
● CREATE/ALTER USER
● “group” ROLEs
● DB object permissions
● Or: use LDAP or PAM
the psql
command line
Do
n't
P ani
c
slow queries
pg_stat_activity
-[ RECORD 2 ]----+--------------------------------
datid | 16422
datname | libdata
procpid | 46295
usesysid | 10
usename | dataentry
application_name | psql
client_addr | 192.168.101.114
client_port | 5432
backend_start | 2012-08-26 15:09:05.233-07
xact_start | 2012-08-26 15:09:06.113-07
query_start | 2012-08-26 15:11:53.521-07
waiting | f
current_query | <IDLE> in transaction
locks
● write queries can block on other write
queries
● as can table schema changes
● queries can wait forever on locks
● look for “<IDLE> in transaction”
● that's a ...
Zombie Transactions

Want RAAAAAAAM
killing zombies
● pg_cancel_backend(pid)
● kills running queries with sigINT
● like CTRL-C
● pg_terminate_backend(pid)
● kills bad connections, idle
transactions
● can cause DB to restart
EXPLAIN
Nested Loop (cost=792.00..828.08 rows=1422317 width=99)
-> HashAggregate (cost=792.00..792.00 rows=1 width=4)
-> Index Scan using
index_player_summaries_on_player_id on player_summaries
ps (cost=0.00..791.80 rows=403 width=4)
Index Cond: (player_id = 21432312)
-> Index Scan using index_player_summaries_on_match_id
on player_summaries (cost=0.00..33.98 rows=600 width=99)
Index Cond: (match_id = ps.match_id)
EXPLAIN ANALYZE
Nested Loop (cost=792.00..828.08 rows=1422317
width=99) (actual time=9928.869..20753.723
rows=13470 loops=1)
-> HashAggregate (cost=792.00..792.00 rows=1 width=4)
(actual time=9895.105..9897.096 rows=1347 loops=1)
-> Index Scan using
index_player_summaries_on_player_id on player_summaries
ps (cost=0.00..791.80 rows=403 width=4) (actual
time=27.413..9890.887 rows=1347 loops=1)
Index Cond: (player_id = 21432312)
-> Index Scan using index_player_summaries_on_match_id
on player_summaries (cost=0.00..33.98 rows=600 width=99)
(actual time=7.375..8.037 rows=10 loops=1347)
Index Cond: (match_id = ps.match_id)
Total runtime: 20764.371 ms"
explain.depesz.com
what to look for
● “seq scan” on large table
● maybe index needed
● cartesian joins
● really bad row estimates
● ANALYZE needed?
Do
n't
P ani
c
backups
2012-01-27 18:00:44 MSK FATAL:
invalid page header in block
311757 of relation
base/26976/27977
2012-01-27 18:00:44 MSK CONTEXT:
xlog redo insert:
rel 1663/26976/27977;
tid 311757/44
2012-01-27 18:00:44 MSK LOG:
startup process (PID 392)
exited with exit code 1
2012-01-27 18:00:44 MSK LOG:
aborting startup due
to startup process failure
pg_dump
● “logical” backup
● portable
● compressed
● works for upgrades
● good for small databases
● use -Fc
● custom binary format
PITR
● “Point-In-Time Recovery”
● “binary” and “continuous” backup
● take snapshot of DB files
● accumulate logfile copies
● good for large databases
● can combine with replication
PITR - PITA
● can be difficult to set up & monitor
● use tools:
● RepMgr
● OmniPITR
● WAL-E (for AWS)
Do
n't
P ani
c
monitoring
use your favorite tool
ganglia, collectd, Hyperic, OpenNMS,
OpenView, whatever ....
● nagios check_postgres.pl

● broad list of checks


● mine it for queries and techniques
many useful checks
● disk space ● long queries
● caching RAM ● database size
● response time ● table bloat
● connections ● system load
● idle transacts ● replication lag
● table growth ● XID wraparound
● waiting queries ● execution time
activity log
● connections & disconnections
● slow queries
● DB swap usage
● schema changes
● lock waits & deadlocks
pgfouine, pgbadger
Do
n't
P ani
c
schema migrations
SQL-DDL is code
1.write migration scripts
● make them idempotent
● write “undo” scripts
2.check them into version control
3.test them on a staging server
● check how long they take
4.deploy on production
Postgres doesn't
require downtime for
most schema
changes.
Do
n't
P ani
updates c

&
upgrades
major vs. minor
9.2 == a major version
● requires an upgrade from 9.1.4
● contains features not in 9.1
● requires testing and planned downtime
9.1.5 == a minor version
● is a minor “update” from 9.1.4.
● can (and should) be applied immediately
minor updates
● come out ~ every 2 months
● contain only bugfixes
● security hole patches
● data loss prevention
● fix server crashes
● no new or changed features
● occasional documented breakage
update procedure
1.schedule 5 minute downtime
2.download packages
3.shut down postgresql
4.install packages
5.restart postgresql
6.restart application
major upgrades
● come out once per year
● have many new features
● and sometimes break stuff which used to
work
● require extensive testing with your
application
● require significant downtime to
upgrade
upgrade procedures
● dump & reload
● use pg_dump & pg_restore on database
● most reliable way
● “cleans up” database in process
● best with small databases
● can take a long, long time
upgrade procedures
● pgUpgrade
● upgrade “in place”
● much faster
● does not “clean up” database
● sometimes doesn't work
EOL after
5 years
Getting Help
● docs
● postgresql.org/docs/
● postgresguide.org
● wiki.postgresql.org
● books
● PostgreSQL Up and Running (O'Reilly)
● PostgreSQL 9.0 High Performance (Packt)
Getting Help
● mailing lists
● postgresql.org/community/lists
– pgsql-novice, pgsql-general
● chat
● irc.freenode.net, #postgresql
● web
● dba.stackexchange.com
● planet.postgresql.org
questions?
● Josh Berkus
● josh@pgexperts.com
● PGX: www.pgexperts.com
● Blog: www.databasesoup.com
● Upcoming Events
● Postgres Open: Chicago, Sept 17-19
● LISA: San Diego, Dec 5-8
Copyright 2012 PostgreSQL Experts Inc. Released under the Creative Commons
Attribution License. All images are the property of their respective owners. The
Don't Panic slogan and logo is property of the BBC, and the Dilbert image belongs
to Scott Adams and is used here as parody.

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy