Mastering PostgreSQL Administration

BRUCE MOMJIAN

May, 2012 POSTGRESQL is an open-source, full-featured relational database. This presentation covers advanced administration topics.
Creative Commons Attribution License http://momjian.us/presentations

Mastering, PostgreSQL Administration 1 / 109

Outline

1. Installation 2. Configuration 3. Maintenance 4. Monitoring 5. Recovery

Mastering, PostgreSQL Administration 2 / 109

Installation

Click-Through Installers
◮ ◮ ◮

MS Windows Linux OS X RPM DEB PKG other packages obtaining build options installing

Ports
◮ ◮ ◮ ◮

Source
◮ ◮ ◮

Mastering, PostgreSQL Administration 3 / 109

ok creating system views . The default text search configuration will be set to "english".. The database cluster will be initialized with locale en_US.. ok creating template1 database in /u/pgsql/data/base/1 . ok copying template1 to template0 ........ PostgreSQL Administration 4 / 109 .... ok loading PL/pgSQL server-side language ... 32MB creating configuration files .. ok loading system objects’ descriptions . fixing permissions on existing directory /u/pgsql/data . ok creating dictionaries . ok selecting default max_connections . This user must also own the server process. 100 selecting default shared_buffers . The default database encoding has accordingly been set to UTF8. ok setting privileges on built-in objects . ok creating collations .. ok creating information schema ....... ok copying template1 to postgres ..... ok vacuuming database template1 . ok creating subdirectories . ok creating conversions ....UTF-8.. ok initializing dependencies .Initialization (initdb) $ initdb The files belonging to this database system will be owned by user "postgres".. ok initializing pg_authid ........ ok Mastering.

PostgreSQL Administration 5 / 109 .conf or using the -A option the next time you run initdb. Success. You can now start the database server using: /u/pgsql/bin/postgres -D /u/pgsql/data or /u/pgsql/bin/pg_ctl -D /u/pgsql/data -l logfile start Mastering.Initialization (continued) WARNING: enabling "trust" authentication for local connections You can change this by editing pg_hba.

pg_controldata $ pg_controldata pg_control version number: Catalog version number: Database system identifier: Database cluster state: pg_control last modified: Latest checkpoint location: Prior checkpoint location: Latest checkpoint’s REDO location: Latest checkpoint’s TimeLineID: Latest checkpoint’s NextXID: Latest checkpoint’s NextOID: Latest checkpoint’s NextMultiXactId: Latest checkpoint’s NextMultiOffset: Latest checkpoint’s oldestXID: Latest checkpoint’s oldestXID’s DB: Latest checkpoint’s oldestActiveXID: Time of latest checkpoint: Minimum recovery ending location: Backup start location: Current wal_level setting: Current max_connections setting: Current max_prepared_xacts setting: Current max_locks_per_xact setting: Maximum data alignment: Database block size: Blocks per segment of large relation: WAL block size: Bytes per WAL segment: Maximum length of identifiers: Maximum columns in an index: Maximum size of a TOAST chunk: Date/time type storage: Float4 argument passing: 903 201105231 5701206621592472575 in production Tue 24 Jan 2012 09:33:32 AM EST 0/16BD258 0/16BD1D0 0/16BD258 1 0/679 24576 1 0 668 1 0 Tue 24 Jan 2012 09:33:32 AM EST 0/0 0/0 minimal 100 0 64 8 8192 131072 8192 16777216 64 32 1996 64-bit integers Mastering. PostgreSQL Administration 6 / 109 by value .

PostgreSQL Administration 7 / 109 .g. INSERT.System Architecture Main Libpq Postmaster Postgres Postgres Parse Statement utility SELECT. COPY Rewrite Query Generate Paths Optimal Path Generate Plan Plan Execute Plan Utilities Catalog Storage Managers Access Methods Nodes / Lists Mastering. DELETE Traffic Cop Query Utility Command e. CREATE TABLE. UPDATE.

Starting Postmaster LOG: LOG: LOG: ◮ ◮ ◮ database system was shut down at 2012-01-24 09:33:29 EST database system is ready to accept connections autovacuum launcher started manually pg_ctl start on boot Mastering. PostgreSQL Administration 8 / 109 .

PostgreSQL Administration 9 / 109 .Stopping Postmaster LOG: LOG: LOG: LOG: ◮ ◮ ◮ received smart shutdown request autovacuum launcher shutting down shutting down database system is shut down manually pg_ctl stop on shutdown Mastering.

Connections

◮ ◮ ◮ ◮

local — unix domain socket host — TCP/IP, both SSL or non-SSL hostssl — only
SSL

hostnossl — never SSL

Mastering, PostgreSQL Administration 10 / 109

Authentication

◮ ◮ ◮

trust reject passwords
◮ ◮

md5 password (cleartext)

local authentication
◮ ◮ ◮

socket permissions ’peer’ socket user name passing host ident using local identd

Mastering, PostgreSQL Administration 11 / 109

Authentication (continued)

remote authentication
◮ ◮

host ident using pg_ident.conf kerberos
◮ ◮

gss sspi

◮ ◮ ◮ ◮

pam ldap radius cert

Mastering, PostgreSQL Administration 12 / 109

role ◮ IPv6 Mastering.Access ◮ ◮ ◮ ◮ hostname and network mask database name role name (user or group) filename or list of databases. PostgreSQL Administration 13 / 109 .

0.1/32 ::1/128 trust trust trust Mastering.0.pg_hba. #local #host #host replication replication replication postgres postgres postgres 127.0. by a user with the # replication privilege.0.1/32 ::1/128 trust trust trust # IPv4 local connections: # IPv6 local connections: # Allow replication connections from localhost. PostgreSQL Administration 14 / 109 .conf Default # TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local host host all all all all all all 127.

1.0.conf Example # TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local host host all all all all all all 127.0.0.1.0.168.168.0.0/0 0.0. but do not allow the superuser hostssl all hostssl all Mastering.254/32 192.0/24 0.0/0 reject md5 reject md5 # enable local network # require SSL for external connections.pg_hba. PostgreSQL Administration 15 / 109 .1/32 ::1/128 trust trust trust # IPv4 local connections: # IPv6 local connections: # disable connections from the gateway machine host host all all all all postgres all 192.

PostgreSQL Administration 16 / 109 .Permissions ◮ ◮ Host connection permissions Role permissions ◮ ◮ ◮ create roles create databases table permissions ◮ Database management ◮ ◮ ◮ template1 customization system tables disk space computations Mastering.

Data Directory

$ ls -CF base/ global/ pg_clog/ pg_hba.conf

pg_ident.conf pg_multixact/ pg_notify/ pg_serial/

pg_stat_tmp/ pg_subtrans/ pg_tblspc/ pg_twophase/

PG_VERSION pg_xlog/ postgresql.conf postmaster.opts

Mastering, PostgreSQL Administration 17 / 109

Database Directories
$ ls -CF global/ 11669 11802 11669_fsm 11804 11669_vm 11805 11671 11806 11672 11806_fsm 11800 11806_vm $ ls -CF base/ 1/ 11910/ 11918/ $ ls -CF base/16384 11655 11695_vm 11655_fsm 11697 11655_vm 11699 11657 11700 11657_fsm 11701 11657_vm 11702

11808 11809 11810 11810_fsm 11810_vm 11812 16384/

11813 11815 11816 11817 11817_fsm 11817_vm

11819 11820 11821 11821_fsm 11821_vm 11823

11825 11826 11911 11913 11915 11916

11917 pg_control pg_filenode.map pg_internal.init pgstat.stat

11731 11732 11733 11733_fsm 11733_vm 11735

11768 11768_fsm 11768_vm 11770 11771 11772

11836 11837 11838 11838_fsm 11838_vm 11840

11875_vm 11877 11879 11880 11880_fsm 11880_vm


Mastering, PostgreSQL Administration 18 / 109

Transaction/WAL Directories

$ ls -CF pg_xlog/ 000000010000000000000001 $ ls -CF pg_clog/ 0000 archive_status/

Mastering, PostgreSQL Administration 19 / 109

bki postgres.sql sql_features.sample postgres.Configuration Directories $ ls -CF share/ conversion_create.conf.conf.description postgresql.sample snowball_create.sample postgres.conf.conf.sql extension/ information_schema.sql timezone/ timezonesets/ tsearch_data/ Mastering.txt system_views.conf.shdescription psqlrc.sample pg_service.sample recovery.sample pg_ident. PostgreSQL Administration 20 / 109 .sql pg_hba.

PostgreSQL Administration 21 / 109 .conf Mastering.Configuration of postgresql.

Comments are introduced with "#" anywhere on a line. you need to reload the server. PostgreSQL Administration 22 / 109 .postgresql. The commented-out settings shown in this file represent the default values. The complete list of parameter names and allowed values can be found in the PostgreSQL documentation.conf # # # # # # # # # # # # # # # ----------------------------PostgreSQL configuration file ----------------------------This file consists of lines of the form: name = value (The "=" is optional. Re-commenting a setting is NOT sufficient to revert it to the default value.) Whitespace may be used. Mastering.

.postgresql.conf (Continued) # # # # # # # # # # # # # # This file is read on server startup and when the server receives a SIGHUP signal. If you edit the file on a running system. Any parameter can also be given as a command-line option to the server. you have to SIGHUP the server for the changes to take effect. PostgreSQL Administration 23 / 109 . which are marked below. Some parameters. e. or use "pg_ctl reload". "postgres -c log_connections=on". Some parameters can be changed at run time with the "SET" SQL command. require a server shutdown and restart to take effect.g. Memory units: kB = kilobytes MB = megabytes GB = gigabytes Time units: ms s min h = = = = milliseconds seconds minutes hours Mastering.

#data_directory = ’ConfigDir’ # use data in another directory # (change requires restart) #hba_file = ’ConfigDir/pg_hba. #external_pid_file = ’(none)’ # write an extra PID file # (change requires restart) Mastering. no extra PID file is written. represented here as ConfigDir.conf’ # host-based authentication file # (change requires restart) #ident_file = ’ConfigDir/pg_ident.conf’ # ident configuration file # (change requires restart) # If external_pid_file is not explicitly set. PostgreSQL Administration 24 / 109 .Configuration File Location # The default values of these variables are driven from the -D command-line # option or PGDATA environment variable.

#superuser_reserved_connections = 3 # (change requires restart) #unix_socket_directory = ’’ # (change requires restart) #unix_socket_group = ’’ # (change requires restart) #unix_socket_permissions = 0777 # begin with 0 to use octal notation # (change requires restart) #bonjour = off # advertise server via Bonjour # (change requires restart) #bonjour_name = ’’ # defaults to the computer name # (change requires restart) #listen_addresses = ’localhost’ Mastering. # defaults to ’localhost’. # comma-separated list of addresses. plus lock space (see max_locks_per_transaction). ’*’ = all # (change requires restart) #port = 5432 # (change requires restart) max_connections = 100 # (change requires restart) # Note: Increasing max_connections costs ˜400 bytes of shared memory per # connection slot. PostgreSQL Administration 25 / 109 .Connections and Authentication # what IP address(es) to listen on.

PostgreSQL Administration 26 / 109 .Security and Authentication #authentication_timeout = 1min # 1s-600s #ssl = off # (change requires restart) #ssl_ciphers = ’ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH’ # allowed SSL ciphers # (change requires restart) #ssl_renegotiation_limit = 512MB # amount of data between renegotiations #password_encryption = on #db_user_namespace = off # Kerberos and GSSAPI #krb_server_keyfile = ’’ #krb_srvname = ’postgres’ #krb_caseins_users = off # (Kerberos only) Mastering.

0 selects the system default TCP_KEEPCNT. 0 selects the system default Mastering. 0 selects the system default TCP_KEEPINTVL.TCP/IP Control # see "man 7 tcp" for details #tcp_keepalives_idle = 0 #tcp_keepalives_interval = 0 #tcp_keepalives_count = 0 # # # # # # TCP_KEEPIDLE. PostgreSQL Administration 27 / 109 . in seconds. in seconds.

# It is not advisable to set max_prepared_transactions nonzero unless you # actively intend to use prepared transactions. #work_mem = 1MB # min 64kB #maintenance_work_mem = 16MB # min 1MB #max_stack_depth = 2MB Kernel changes often required. # min 100kB Mastering. PostgreSQL Administration 28 / 109 .Memory Usage shared_buffers = 32MB # min 128kB # (change requires restart) #temp_buffers = 8MB # min 800kB #max_prepared_transactions = 0 # zero disables the feature # (change requires restart) # Note: Increasing max_prepared_transactions costs ˜600 bytes of shared memory # per transaction slot. plus lock space (see max_locks_per_transaction).

Memory Usage (Continued) Postgres Backend Postgres Backend Postgres Backend Recovery Query and Checkpoint Operations Transaction Durability PostgreSQL Shared Buffer Cache Write−Ahead Log fsync Kernel Disk Buffer Cache fsync Disk Blocks Mastering. PostgreSQL Administration 29 / 109 .

PostgreSQL Administration 30 / 109 .Sizing Shared Memory Postgres Session (work_mem) Postgres Session (work_mem) R A M Postgres Session (work_mem) Shared Buffer Cache (shared_buffers) Kernel Disk Buffer Cache Free Kernel Page In (bad) Page Out Swap Mastering.

PostgreSQL Administration 31 / 109 .Kernel Resources #max_files_per_process = 1000 #shared_preload_libraries = ’’ # min 25 # (change requires restart) # (change requires restart) Mastering.

0 disables prefetching Mastering.Cost-Based Vacuum Delay #vacuum_cost_delay = 0ms #vacuum_cost_page_hit = 1 #vacuum_cost_page_miss = 10 #vacuum_cost_page_dirty = 20 #vacuum_cost_limit = 200 # .0 multipler on buffers scanned/round . PostgreSQL Administration 32 / 109 # # # # 0-100 milliseconds 0-10000 credits 0-10000 credits 0-10000 credits # 1-10000 credits # 10-10000ms between rounds # 0-1000 max buffers written/round # 0-10.Background Writer #bgwriter_delay = 200ms #bgwriter_lru_maxpages = 100 #bgwriter_lru_multiplier = 2.Asynchronous Behavior #effective_io_concurrency = 1 # 1-1000.0 # .Vacuum and Background Writer # .

archive. or local the default is the first option supported by the operating system: open_datasync fdatasync (default on Linux) fsync fsync_writethrough open_sync recover from partial page writes min 32kB. -1 sets based on shared_buffers (change requires restart) 1-10000 milliseconds range 0-100000. PostgreSQL Administration 33 / 109 . in microseconds range 1-1000 Mastering. off.Write-Ahead Log (WAL) #wal_level = minimal #fsync = on #synchronous_commit = on #wal_sync_method = fsync #full_page_writes = on #wal_buffers = -1 #wal_writer_delay = 200ms #commit_delay = 0 #commit_siblings = 5 # # # # # # # # # # # # # # # # # minimal. or hot_standby (change requires restart) turns forced synchronization on or off synchronization level. on.

Write-Ahead Logging (Continued) Postgres Backend Postgres Backend Postgres Backend Recovery Query and Checkpoint Operations Transaction Durability PostgreSQL Shared Buffer Cache Write−Ahead Log fsync Kernel Disk Buffer Cache fsync Disk Blocks Mastering. PostgreSQL Administration 34 / 109 .

5 #checkpoint_warning = 30s # . PostgreSQL Administration 35 / 109 . 0.Archiving #archive_mode = off #archive_command = ’’ #archive_timeout = 0 # # # # # allows archiving to be done (change requires restart) command to use to archive a logfile segment force a logfile segment switch after this number of seconds.Checkpoints #checkpoint_segments = 3 #checkpoint_timeout = 5min #checkpoint_completion_target = 0. 0 disables # in logfile segments. 16MB each # range 30s-1h # checkpoint target duration.1.0 .Checkpoints and Archiving # .0 # 0 disables Mastering. min 1.

1-10000 milliseconds in logfile segments.Master Replication Server # These settings are ignored on a standby server #max_wal_senders = 0 # # #wal_sender_delay = 1s # #wal_keep_segments = 0 # #vacuum_defer_cleanup_age = 0 # #replication_timeout = 60s # #synchronous_standby_names = ’’ # # # max number of walsender processes (change requires restart) walsender cycle time. 0 disables number of xacts by which cleanup is delayed in milliseconds. ’*’ = all Mastering. 16MB each. PostgreSQL Administration 36 / 109 . 0 disables standby servers that provide sync rep comma-separated list of application_name from standby(s).

PostgreSQL Administration 37 / 109 .Standby Replication Server # These settings are ignored on a master server #hot_standby = off #max_standby_archive_delay = 30s # # # # # # # # # # # # "on" allows queries during recovery (change requires restart) max delay before canceling queries when reading WAL from archive. -1 allows indefinite delay send replies at least this often 0 disables send info from standby to prevent query conflicts #max_standby_streaming_delay = 30s #wal_receiver_status_interval = 10s #hot_standby_feedback = off Mastering. -1 allows indefinite delay max delay before canceling queries when reading streaming WAL.

Planner Method Tuning #enable_bitmapscan = on #enable_hashagg = on #enable_hashjoin = on #enable_indexscan = on #enable_material = on #enable_mergejoin = on #enable_nestloop = on #enable_seqscan = on #enable_sort = on #enable_tidscan = on Mastering. PostgreSQL Administration 38 / 109 .

01 #cpu_index_tuple_cost = 0. PostgreSQL Administration 39 / 109 .Planner Constants #seq_page_cost = 1.0 #random_page_cost = 4.0025 #effective_cache_size = 128MB # # # # # measured on an arbitrary scale same scale as above same scale as above same scale as above same scale as above Mastering.005 #cpu_operator_cost = 0.0 #cpu_tuple_cost = 0.

0 Mastering.0 #geqo_seed = 0.0 # # # # # range 1-10 selects default based on effort selects default based on effort range 1.5-2. PostgreSQL Administration 40 / 109 .0 range 0.Planner GEQO #geqo = on #geqo_threshold = 12 #geqo_effort = 5 #geqo_pool_size = 0 #geqo_generations = 0 #geqo_selection_bias = 2.0-1.

PostgreSQL Administration 41 / 109 . or partition # range 0.1 #from_collapse_limit = 8 #join_collapse_limit = 8 # range 1-10000 # on.0-1. off.Miscellaneous Planner Options #default_statistics_target = 100 #constraint_exclusion = partition #cursor_tuple_fraction = 0.0 # 1 disables collapsing of explicit # JOIN clauses Mastering.

and eventlog. # can include strftime() escapes #log_file_mode = 0600 # creation mode for log files. # Enable capturing of stderr and csvlog # into log files. syslog. csvlog requires logging_collector to be on. # can be absolute or relative to PGDATA #log_filename = ’postgresql-%Y-%m-%d_%H%M%S. depending on platform. PostgreSQL Administration 42 / 109 . # (change requires restart) # These are only used if logging_collector is on: #log_directory = ’pg_log’ # directory where log files are written.log’ # log file name pattern.Where To Log #log_destination = ’stderr’ # # # # Valid values are combinations of stderr. csvlog. Required to be on for # csvlogs. # begin with 0 to use octal notation # This is used when logging to stderr: #logging_collector = off Mastering.

Automatic rotation of logfiles will happen after that much log output. PostgreSQL Administration 43 / 109 . But such truncation only occurs on time-driven rotation.Where To Log (rotation) #log_truncate_on_rotation = off #log_rotation_age = 1d #log_rotation_size = 10MB # # # # # # # # # # # # # If on. 0 disables. Mastering. Automatic rotation of logfiles will happen after that time. meaning append to existing files in all cases. 0 disables. Default is off. not on restarts or size-driven rotation. an existing log file with the same name as the new log file will be truncated rather than appended to.

Where to Log (syslog) # These are relevant when logging to syslog: #syslog_facility = ’LOCAL0’ #syslog_ident = ’postgres’ #silent_mode = off # Run server silently. PostgreSQL Administration 44 / 109 . # DO NOT USE without syslog or # logging_collector # (change requires restart) Mastering.

When to Log #client_min_messages = notice # values in order of decreasing detail: # debug5 # debug4 # debug3 # debug2 # debug1 # log # notice # warning # error # values in order of decreasing detail: # debug5 # debug4 # debug3 # debug2 # debug1 # info # notice # warning # error # log # fatal # panic Mastering. PostgreSQL Administration 45 / 109 #log_min_messages = warning .

0 logs all statements and their durations. > 0 logs only statements running at least this number of milliseconds Mastering.When to Log (Continued) #log_min_error_statement = error #log_min_duration_statement = -1 # # # # # # # # # # # # # # # # # values in order of decreasing detail: debug5 debug4 debug3 debug2 debug1 info notice warning error log fatal panic (effectively off) -1 is disabled. PostgreSQL Administration 46 / 109 .

or verbose messages Mastering. PostgreSQL Administration 47 / 109 . default.What to Log #debug_print_parse = off #debug_print_rewritten = off #debug_print_plan = off #debug_pretty_print = on #log_checkpoints = off #log_connections = off #log_disconnections = off #log_duration = off #log_error_verbosity = default #log_hostname = off # terse.

PostgreSQL Administration 48 / 109 .What To Log: Log_line_prefix #log_line_prefix = ’’ # special values: # %a = application name # %u = user name # %d = database name # %r = remote host and port # %h = remote host # %p = process ID # %t = timestamp without milliseconds # %m = timestamp with milliseconds # %i = command tag # %e = SQL state # %c = session ID # %l = session line number # %s = session start timestamp # %v = virtual transaction ID # %x = transaction ID (0 if none) # %q = stop here in non-session # processes # %% = ’%’ Mastering.

What to Log (Continued) #log_lock_waits = off #log_statement = ’none’ #log_temp_files = -1 # log lock waits >= deadlock_timeout # none. 0 logs all temp files #log_timezone = ’(defaults to server environment setting)’ Mastering. # -1 disables. PostgreSQL Administration 49 / 109 . all # log temporary files equal or larger # than the specified size in kilobytes. mod. ddl.

Statistics Monitoring #log_parser_stats = off #log_planner_stats = off #log_executor_stats = off #log_statement_stats = off # none. all # (change requires restart) Mastering.Runtime Statistics # .Query/Index Statistics Collector #track_activities = on #track_counts = on #track_functions = none #track_activity_query_size = 1024 #update_process_title = on #stats_temp_directory = ’pg_stat_tmp’ # . pl. PostgreSQL Administration 50 / 109 .

-1 means use vacuum_cost_delay default vacuum cost limit for autovacuum. 0 logs all actions and their durations. -1 disables.1 #autovacuum_freeze_max_age = 200000000 #autovacuum_vacuum_cost_delay = 20ms #autovacuum_vacuum_cost_limit = -1 . in milliseconds.2 #autovacuum_analyze_scale_factor = 0. PostgreSQL Administration 51 / 109 #autovacuum_max_workers = 3 #autovacuum_naptime = 1min #autovacuum_vacuum_threshold = 50 #autovacuum_analyze_threshold = 50 #autovacuum_vacuum_scale_factor = 0. max number of autovacuum subprocesses (change requires restart) time between autovacuum runs min number of row updates before vacuum min number of row updates before analyze fraction of table size before vacuum fraction of table size before analyze maximum XID age before forced vacuum (change requires restart) default vacuum cost delay for autovacuum. > 0 logs only actions running at least this number of milliseconds.Autovacuum #autovacuum = on #log_autovacuum_min_duration = -1 # # # # # # # # # # # # # # # # # # # # # # # Enable autovacuum subprocess? ’on’ requires track_counts to also be on. -1 means use vacuum_cost_limit Mastering.

’’ uses only default tablespace #check_function_bodies = on #default_transaction_isolation = ’read committed’ #default_transaction_read_only = off #default_transaction_deferrable = off #session_replication_role = ’origin’ #statement_timeout = 0 # in milliseconds. PostgreSQL Administration 52 / 109 . ’’ uses the default a list of tablespace names.Statement Behavior #search_path = ’"$user".public’ #default_tablespace = ’’ #temp_tablespaces = ’’ # # # # schema names a tablespace name. escape #xmlbinary = ’base64’ #xmloption = ’content’ Mastering. 0 is disabled #vacuum_freeze_min_age = 50000000 #vacuum_freeze_table_age = 150000000 #bytea_output = ’hex’ # hex.

lc_messages = ’en_US.english’ Mastering.UTF-8’ lc_numeric = ’en_US. there are # Default # Australia # India # You can create your own file in # share/timezonesets/.UTF-8’ # default configuration for text search default_text_search_config = ’pg_catalog. PostgreSQL Administration 53 / 109 .UTF-8’ lc_time = ’en_US. max 3 #client_encoding = sql_ascii # actually. #extra_float_digits = 0 # min -15.UTF-8’ # # # # # locale for strings locale for locale for locale for system error messages monetary formatting number formatting time formatting lc_monetary = ’en_US. mdy’ #intervalstyle = ’postgres’ #timezone = ’(defaults to server environment setting)’ #timezone_abbreviations = ’Default’ # Select the set of available time zone # abbreviations. Currently.Locale and Formatting datestyle = ’iso. defaults to database # encoding # These settings are initialized by initdb. but they can be changed.

Full Text Search # default configuration for text search default_text_search_config = ’pg_catalog.english’ Mastering. PostgreSQL Administration 54 / 109 .

Other Defaults #dynamic_library_path = ’$libdir’ #local_preload_libraries = ’’ Mastering. PostgreSQL Administration 55 / 109 .

and there are # max_locks_per_transaction * (max_connections + max_prepared_transactions) # lock table slots. PostgreSQL Administration 56 / 109 . #max_pred_locks_per_transaction = 64 # min 10 # (change requires restart) Mastering.Lock Management #deadlock_timeout = 1s #max_locks_per_transaction = 64 # min 10 # (change requires restart) # Note: Each lock table slot uses ˜270 bytes of shared memory.

Version/Platform Compatibility # . PostgreSQL Administration 57 / 109 . off. or safe_encoding Mastering.Previous PostgreSQL Versions #array_nulls = on #backslash_quote = safe_encoding #default_with_oids = off #escape_string_warning = on #lo_compat_privileges = off #quote_all_identifiers = off #sql_inheritance = on #standard_conforming_strings = on #synchronize_seqscans = on # .Other Platforms and Clients #transform_null_equals = off # on.

Error Handling #exit_on_error = off #restart_after_crash = on # terminate session on any error? # reinitialize after backend crash? Mastering. PostgreSQL Administration 58 / 109 .

PostgreSQL Administration 59 / 109 .Custom Variables #custom_variable_classes = ’’ # list of custom variable class names Mastering.

Python.Interfaces ◮ Installing ◮ ◮ ◮ Compiled Languages (C. PostgreSQL Administration 60 / 109 . PHP) SPI ◮ Connection Pooling Mastering. ecpg) Scripting Language (Perl.

h pg_config.h libpq-events.h informix/ pg_config_os.h sqlda-native.h server/ sql3types.h ecpg_informix.h postgres_ext.h internal/ pgtypes_date.h sqlda-compat.h Mastering.h ecpgtype.h pg_config_manual.h sqlca.h pgtypes_timestamp.h pgtypes_numeric.Include Files $ ls -CF include/ ecpg_config. PostgreSQL Administration 61 / 109 .h sqlda.h libpq-fe.h ecpglib.h libpq/ ecpgerrno.h pgtypes_error.h pgtypes_interval.

so* latin2_and_win1250.so* utf8_and_gbk.so.3@ libecpg_compat.so@ libecpg_compat.so* euc_cn_and_mic.3.so* utf8_and_cyrillic.6.so* utf8_and_big5.so@ libpq.so.5.so* libecpg.a libpq.so* euc_jp_and_sjis.so* Mastering.so* utf8_and_euc_cn.so* utf8_and_iso8859_1.so* latin_and_mic.so* euc_kr_and_mic.a libecpg_compat.so* pgxs/ plperl.5@ libpq.so.so* euc2004_sjis2004.so* plpgsql.so* utf8_and_sjis2004. PostgreSQL Administration 62 / 109 .so* utf8_and_iso8859.so* utf8_and_sjis.Library Files $ ls -CF lib/ ascii_and_mic.so* euc_tw_and_big5.so* utf8_and_gb18030.a libpgtypes.3@ libpgtypes.so* plpython2.so.so@ libpgtypes.so* cyrillic_and_mic.a libecpg_compat.so* utf8_and_euc_jp.so* utf8_and_euc_kr.so.so* utf8_and_johab.3* libpgport.so* utf8_and_win.so.2* libpq.4* libpqwalreceiver.3* libecpg.6@ libecpg.so* utf8_and_euc2004.so.so* utf8_and_euc_tw.so* utf8_and_ascii.so* utf8_and_uhc.so.so* dict_snowball.3.a libpgtypes.so@ libecpg.

Maintenance Mastering. PostgreSQL Administration 63 / 109 .

rsync.Backup ◮ File system-level (physical) ◮ ◮ ◮ tar. cpio while shutdown file system snapshot rsync. restart ◮ ◮ pg_dump/pg_dumpall (logical) Restore/pg_restore with custom format Mastering. shutdown. PostgreSQL Administration 64 / 109 .

Continuous Archiving / Point-In-Time Recovery (PITR) :0 0 :0 0 :0 0 02 09 11 WAL W AL W AL File System− Level Backup Continuous Archive (WAL) Mastering. PostgreSQL Administration 65 / 109 13 :0 0 .

wal_level = archive 3. archive_mode = on 2. Perform file system-level backup (can be inconsistent) 6. pg_basebackup does this automatically. Mastering.PITR Backup Procedures 1. 5. archive_command = ’cp -i %p /mnt/server/pgsql/%f < /dev/null’ 4. SELECT pg_stop_backup(). PostgreSQL Administration 66 / 109 . SELECT pg_start_backup(’label’).

PITR Recovery :0 0 :3 0 :4 0 17 17 17 WAL W AL W AL File System− Continuous Level Backup Archive (WAL) Mastering. PostgreSQL Administration 67 / 109 17 :5 5 .

Stop postmaster 2. Create recovery. Start the postmaster Mastering. Restore file system-level backup 3. Make adjustments as outlined in the documentation 4. restore_command = ’cp /mnt/server/pgsql/%f %p’ 6.PITR Recovery Procecdures 1.conf 5. PostgreSQL Administration 68 / 109 .

PostgreSQL Administration 69 / 109 .Data Maintenance ◮ VACUUM (nonblocking) records free space into .fsm (free space map) files ANALYZE collects optimizer statistics (blocking) shrinks the size of database disk files ◮ ◮ VACUUM FULL Mastering.

PostgreSQL Administration 70 / 109 . Mastering.Automating Tasks Autovacuum handles vacuum and analyze tasks automatically.

increase checkpoint_segments ◮ Mastering. PostgreSQL Administration 71 / 109 .Checkpoints ◮ ◮ ◮ ◮ Write all dirty shared buffers Sync all dirty kernel buffers Recycle WAL files Check for server messages indicating too-frequent checkpoints If so.

PostgreSQL Administration 72 / 109 .Monitoring Active Sessions Mastering.

03 /u/pgsql/bin/postmaster -i writer process (postmaster) wal writer process (postmaster) autovacuum launcher process (postmaster) stats collector process (postmaster) postgres test [local] idle (postmaster) /u/pgsql/bin/psql test Mastering.ps $ ps -f -Upostgres postgres 825 1 postgres 829 825 postgres 830 825 postgres 831 825 postgres 832 825 postgres 13003 825 postgres 13002 12997 0 0 0 0 0 0 0 Tue12AM Tue12AM Tue12AM Tue12AM Tue12AM 3:44PM 3:44PM ?? ?? ?? ?? ?? ?? ttyq1 0:06.63 0:00.03 0:16.34 0:07.07 0:11.01 0:00. PostgreSQL Administration 73 / 109 .57 0:35.

66% postmaster 0:00 2.0% system. 0.0% interrupt.0% idle Memory: Real: 96M/133M Virt: 535M/1267M Free: 76M PID USERNAME PRI NICE SIZE RES STATE 23785 postgres 57 0 11M 5336K run/0 23784 postgres 2 0 10M 11M sleep TIME WCPU CPU COMMAND 0:07 30.25% 2.0% user. 50.36 18:25:58 138 processes: 5 running. PostgreSQL Administration 74 / 109 . 0. 3 zombie CPU states: 50.39.75% 30.56.25% psql Mastering.0% nice. 130 sleeping. 0. 0.top $ top load averages: 0. 0.

901121-04 waiting | f current_query | SELECT * FROM pg_stat_activity.901121-04 query_start | 2011-04-04 08:27:47.089199-04 xact_start | 2011-04-04 08:27:47. Mastering. PostgreSQL Administration 75 / 109 . -[ RECORD 1 ]----+--------------------------------datid | 16384 datname | test procpid | 29964 usesysid | 10 usename | postgres application_name | psql client_addr | client_port | -1 backend_start | 2011-04-04 08:27:33.Query Monitoring test=> SELECT * FROM pg_stat_activity.

Access Statistics pg_stat_all_indexes pg_stat_all_tables pg_stat_database pg_stat_sys_indexes pg_stat_sys_tables pg_stat_user_indexes pg_stat_user_tables pg_statio_all_indexes pg_statio_all_sequences pg_statio_all_tables pg_statio_sys_indexes pg_statio_sys_sequences pg_statio_sys_tables pg_statio_user_indexes pg_statio_user_sequences pg_statio_user_tables | | | | | | | | | | | | | | | | view view view view view view view view view view view view view view view view | | | | | | | | | | | | | | | | postgres postgres postgres postgres postgres postgres postgres postgres postgres postgres postgres postgres postgres postgres postgres postgres Mastering. PostgreSQL Administration 76 / 109 .

.Database Statistics test=> SELECT * FROM pg_stat_database... PostgreSQL Administration 77 / 109 . -[ RECORD 4 ]-+---------datid | 16384 datname | test numbackends | 1 xact_commit | 188 xact_rollback | 0 blks_read | 95 blks_hit | 11832 tup_returned | 64389 tup_fetched | 2938 tup_inserted | 0 tup_updated | 0 tup_deleted | 0 Mastering.

PostgreSQL Administration 78 / 109 .Table Activity test=> SELECT * FROM pg_stat_all_tables. -[ RECORD 10 ]---+-----------------------relid | 2616 schemaname | pg_catalog relname | pg_opclass seq_scan | 2 seq_tup_read | 2 idx_scan | 99 idx_tup_fetch | 99 n_tup_ins | 0 n_tup_upd | 0 n_tup_del | 0 n_tup_hot_upd | 0 n_live_tup | 0 n_dead_tup | 0 last_vacuum | last_autovacuum | last_analyze | last_autoanalyze | Mastering.

-[ RECORD 50 ]--+-----------------------relid | 2602 schemaname | pg_catalog relname | pg_amop heap_blks_read | 3 heap_blks_hit | 114 idx_blks_read | 5 idx_blks_hit | 303 toast_blks_read | toast_blks_hit | tidx_blks_read | tidx_blks_hit | Mastering. PostgreSQL Administration 79 / 109 .Table Block Activity test=> SELECT * FROM pg_statio_all_tables.

PostgreSQL Administration 80 / 109 .Analyzing Activity ◮ ◮ ◮ ◮ Heavily used tables Unnecessary indexes Additional indexes Index usage usage ◮ TOAST Mastering.

PostgreSQL Administration 81 / 109 .CPU $ vmstat 5 procs memory page r b w avm fre flt re 1 0 0 501820 48520 1234 86 3 0 0 512796 46812 1422 201 3 0 0 542260 44356 788 137 4 0 0 539708 41868 576 65 4 0 0 547200 32964 454 0 4 0 0 556140 23884 461 0 1 0 0 535136 46280 1056 141 pi po 2 0 12 0 6 0 13 0 0 0 0 0 25 0 fr 0 0 0 0 0 0 0 sr 3 0 0 0 0 0 0 disks s0 s0 5 0 3 0 8 0 4 0 5 0 2 0 2 0 faults in sy cs 263 2881 599 259 6483 827 286 5698 741 273 5721 819 253 5736 948 249 5917 959 261 6417 890 cpu us sy 10 4 4 7 2 5 16 4 50 4 52 3 24 6 id 86 88 94 80 46 44 70 Mastering.

0 5.0 0 0.6 sps 0 0 0 0 0 0 0 sd1 tps msps 0 27.6 0.4 4.3 0 0.0 0 0.0 0 0.1 1.1 0 0.4 3.0 0 0.9 4.0 0 0. PostgreSQL Administration 82 / 109 .0 sps 0 0 0 0 0 0 0 sd2 tps msps 0 18.0 0 0.I/O $ iostat 5 tty tin tout sps tps 7 119 244 11 0 86 20 1 0 82 61 4 0 65 6 0 12 90 31 2 24 173 6 0 0 91 3594 63 sd0 msps 6.0 0 0.0 % cpu usr nic sys int idl 9 1 4 0 86 2 0 2 0 96 2 0 2 0 97 1 0 2 0 97 4 0 3 0 93 48 0 3 0 49 11 0 4 0 85 Mastering.0 0 0.0 0 0.0 0 0.

PostgreSQL Administration 83 / 109 . text | normal pg_catalog | pg_size_pretty | text | bigint | normal pg_catalog | pg_table_size | bigint | regclass | normal pg_catalog | pg_tablespace_size | bigint | name | normal pg_catalog | pg_tablespace_size | bigint | oid | normal pg_catalog | pg_total_relation_size | bigint | regclass | normal (11 rows) Mastering.Disk Usage test=> \df *size* List of functions Schema | Name | Result data type | Argument data types | Type ------------+------------------------+------------------+---------------------+-------pg_catalog | pg_column_size | integer | "any" | normal pg_catalog | pg_database_size | bigint | name | normal pg_catalog | pg_database_size | bigint | oid | normal pg_catalog | pg_indexes_size | bigint | regclass | normal pg_catalog | pg_relation_size | bigint | regclass | normal pg_catalog | pg_relation_size | bigint | regclass.

PostgreSQL Administration 84 / 109 .Database File Mapping .oid2name $ oid2name All databases: --------------------------------18720 = test1 1 = template1 18719 = template0 18721 = test 18735 = postgres 18736 = cssi Mastering.

PostgreSQL Administration 85 / 109 .Table File Mapping $ cd /usr/local/pgsql/data/base $ oid2name All databases: --------------------------------16817 = test2 16578 = x 16756 = test 1 = template1 16569 = template0 16818 = test3 16811 = floattest $ cd 16756 $ ls 1873* 18730 18731 18732 18735 18736 18737 18738 18739 Mastering.

PostgreSQL Administration 86 / 109 .$ oid2name -d test -o 18737 Tablename of oid 18737 from database "test": --------------------------------18737 = ips $ oid2name -d test -t ips Oid of table ips from database "test": --------------------------------18737 = ips $ # show disk usage per database $ cd /usr/local/pgsql/data/base $ du -s * | > while read SIZE OID > do > echo "$SIZE ‘oid2name -q | grep ^$OID’ ’‘" > done | > sort -rn 2256 18721 = test 2135 18735 = postgres Mastering.

Disk Balancing ◮ ◮ Move pg_xlog to another drive using symlinks Tablespaces Mastering. PostgreSQL Administration 87 / 109 .

PostgreSQL Administration 88 / 109 .Per-Database Tablespaces DB1 DB2 DB3 DB4 Disk 1 Disk 2 Disk 3 Mastering.

PostgreSQL Administration 89 / 109 .Per-Object Tablespaces tab1 tab2 index constraint Disk 1 Disk 2 Disk 3 Mastering.

05 COMMAND postgres test [local] idle in transaction (postmaster) postgres test [local] UPDATE waiting (postmaster) postgres test [local] DELETE waiting (postmaster) test=> SELECT * FROM pg_locks.Analyzing Locking $ ps -f -Upostgres PID TT STAT TIME 9874 ?? I 0:00.07 9835 ?? S 0:00. PostgreSQL Administration 90 / 109 . relation | database | transaction | pid | mode | granted ----------+----------+-------------+------+------------------+--------17143 | 17142 | | 9173 | AccessShareLock | t 17143 | 17142 | | 9173 | RowExclusiveLock | t | | 472 | 9380 | ExclusiveLock | t | | 468 | 9338 | ShareLock | f | | 470 | 9338 | ExclusiveLock | t 16759 | 17142 | | 9380 | AccessShareLock | t 17143 | 17142 | | 9338 | AccessShareLock | t 17143 | 17142 | | 9338 | RowExclusiveLock | t | | 468 | 9173 | ExclusiveLock | t (9 rows) Mastering.05 10295 ?? S 0:00.

restore pg_upgrade Slony ◮ Migration Mastering. syslog Upgrading ◮ ◮ ◮ pg_dump. PostgreSQL Administration 91 / 109 .Miscellaneous Tasks ◮ ◮ Log file rotation.

PostgreSQL Administration 92 / 109 .Administration Tools ◮ ◮ pgadmin phppgadmin Mastering.

Cacti. Hyperic Mastering. Postgres Enterprise Manager (PEM). MRTG Queries: pgFouine Commercial: Circonus (or open-source Reconnoiter). Nagios. Zabbix. Nagios Analysis: Munin. PostgreSQL Administration 93 / 109 . tail_n_mail.External Monitoring Tools ◮ ◮ ◮ ◮ Alerting: check_postgres.

PostgreSQL Administration 94 / 109 .Recovery Mastering.

Mastering. Transactions in progress are rolled back.Client Application Crash Nothing Required. PostgreSQL Administration 95 / 109 .

PostgreSQL Administration 96 / 109 . Mastering. Transactions in progress are rolled back.Graceful Postgres Server Shutdown Nothing Required.

PostgreSQL Administration 97 / 109 . Mastering.Abrupt Postgres Server Crash Nothing Required. Transactions in progress are rolled back.

Transactions in progress are rolled back. Partial page writes are repaired. Mastering. PostgreSQL Administration 98 / 109 .Operating System Crash Nothing Required.

Mastering.Disk Failure Restore from previous backup or use PITR. PostgreSQL Administration 99 / 109 .

Mastering. It is possible to restrict that so only tuples deleted by a specific transaction are visible. dump out the deleted table and restore the original code. It is possible to modify the backend code to make deleted tuples visible. perhaps using pg_restore. All tuples in the table since the previous vacuum will be visible. PostgreSQL Administration 100 / 109 .Accidental DELETE Recover table from previous backup.

Review recent transactions and identify any damage. Mastering. including partially committed transactions. PostgreSQL Administration 101 / 109 .Write-Ahead Log (WAL) Corruption See pg_resetxlog.

File Deletion It may be necessary to create an empty file with the deleted file name so the object can be deleted. Mastering. and then the object restored from backup. PostgreSQL Administration 102 / 109 .

Accidental DROP TABLE Restore from previous backup. PostgreSQL Administration 103 / 109 . Mastering.

Mastering.Accidental DROP INDEX Recreate index. PostgreSQL Administration 104 / 109 .

Mastering.Accidental DROP DATABASE Restore from previous backup. PostgreSQL Administration 105 / 109 .

PostgreSQL Administration 106 / 109 . Review recent transactions and identify any damage.Non-Starting Installation Restart problems are usually caused by write-ahead log problems. including partially committed transactions. See pg_resetxlog. Mastering.

Index Corruption Use REINDEX. PostgreSQL Administration 107 / 109 . Mastering.

PostgreSQL Administration 108 / 109 . Try identifying the corrupt OID of the row and transfer the valid rows into another table using SELECT…INTO…WHERE oid != ###.com/rhdb/tools. Mastering.redhat.html to analyze the internal structure of the table. Use http://sources.Table Corruption Try reindexing the table.

Conclusion http://momjian. PostgreSQL Administration 109 / 109 .us/presentations Mastering.

Sign up to vote on this title
UsefulNot useful