Jens Wilke Vortrag bei der BELUG 16.03.2011
Der Vortrag behandelt die Installation und Konfiguration von PostgreSQL, dem fortschrittlichsten Open Source Datenbanksystem. Es wird auf die wichtigsten Konfigurationsparameter eingeangen, Wartungs- und Datensicherungsstrategien erläutert und auf die wesentlichen Unterschiede zu MySQL eingegangen. Bei Interesse können auch Hochverfügbarkeitsstrategien, insbesondere die neuen Features Streaming Replication und Hot Standby erörtert werden.
Basics ACID Compliant Atomarität, Konsistenz, Isolation, Dauerhaftigkeit SQL Standardkonform ANSI-SQL:2008 Stabilität und Codequalität haben höchste Priorität Write Ahead Log (pg_xlog) zur Wiederherstellung und zur Replikation sowie für Hot Backup Query Planner/Optimizer sind ausgereift Multi-Version Concurrency Control (MVCC) BSD-artige Lizenz
Installation Sourcen Pakete Regression tests Debian PostgreSQL Infrastruktur pg_(create ctl ls drop)cluster RH vor 9.0 nicht multi Server fähig Konfiguration Configs im data_directory oder unter /etc/postgres/... postgresql.conf pg_hba.conf
Konfiguration Parameter shared_buffers, default viel zu niedrig checkpoint_(segments completion_target timeout) logging (log_disconnections, log_checkpoints,log_duration) autovacuum Traps/Fallen fsync=off (full_page_writes, synchronous_commit) ssl=off trust, ident, password in pg_hba.conf
Aufbau und Struktur der Datenbanken Cluster: Instanz, einzelner Serverprozess wird mit initdb erzeugt (bzw. pg_createcluster) Rollen und Tablespaces sind global im Cluster Ein Cluster enthält mehrere Datenbanken Eine DB wird mit CREATE DATABASE erzeugt default: postgres, template0, template1 Eine Datenbank enthält mehrere Schemata default: public, pg_catalog, information_schema, pg_toast Ein Schema wird mit CREATE SCHEMA erzeugt
Tools Psql Kommandozeilenclient ~/.psqlrc Backslash-Befehle Hilfe: \? psql -E \x SQL-Befehle Hilfe: \h PgAdmin GUI
MVCC Snapshots Transaction Isolation Level Read committed, default sieht eigene Änderungen Serializable, arbeitet mit einem Snapshot von Beginn der Transaktion Delete, Update,xmin, xmax Autovacuum autovacuum_vacuum_threshold autovacuum_vacuum_scale_factor autovacuum_analyze_threshold autovacuum_analyze_scale_factor autovacuum_vacuum_cost_limit autovacuum_max_workers
Tuning Query Tuning Ausführungspläne ermitteln mit explain explain analyze Fehlende Indexe erzeugen partielle Indexe Partitionierung TRUNCATE statt DELETE spart beim delete und vermeidet Vacuum
Upgrade minor version (nur die letzte Stelle ändert sich) upgrade (8.4.3 nach 8.4.7) nur restart erforderlich major version upgrade (8.4.7 nach 9.0.3) pg_upgrade oder dump/restore erforderlich
Backup Dump pg_dump ASCII Custom (Binary) Partielle Wiederherstellung möglich, mehrere CPUs nutzbar pg_dumpall für globals (Rollen und Tablespaces) pg_restore Für custom dumps Zum Einspielen oder um ASCII- Dump erzeugen WAL-Archivierung Basis Sicherung + WAL Archiv schneller, Point in Time Recovery (PITR) möglich config: archive_mode, archive_command
Replikation Intern Tools WAL based WAL shipping Streaming Replicaton ab 9.0, asynchron, ab 9.1 auch synchron Hot Standby Ab 9.0 lesende Zugriffe auf den Slave Slony, trigger based + selektiv + slave ausserhalb der replizierten Objekte schreibbar + Replikation zwischen verschiedenen major Versions möglich - Schreiblast auf dem Master verdoppelt - aufwendige Konfiguration
Monitoring pg_stats_user_(tables...) pg_statio_... pgstatspack Nagios check_postgres pgfouine, php-script zur Logfileauswertung Objektgößen pg_database_size pg_relation_size pg_total_relation_size select pg_size_pretty(pg_database_size('postgres'));
Community Mailinglisten, IRC, News http://www.postgresql.org/community/ Dokumentation http://www.postgresql.org/docs/ Planet http://planet.postgresql.org/ Entwicklung http://commitfest.postgresql.org/