PostgreSQL-Administration | 3 |
Inhalt | 5 |
Vorwort | 13 |
Zielgruppe | 13 |
Struktur dieses Buchs | 14 |
In diesem Buch behandelte Versionen | 15 |
Neues in der dritten Auflage | 15 |
Typografische Konventionen | 15 |
Danksagungen | 16 |
Kapitel 1 – Installation | 17 |
Softwareinstallation | 17 |
Versionierung | 18 |
Paketinstallation | 19 |
Debian und Ubuntu | 19 |
Red Hat | 20 |
SUSE | 20 |
Quellcode bauen | 20 |
Contrib | 22 |
PostgreSQL einrichten | 23 |
Datenverzeichnis initialisieren | 23 |
Datenverzeichnis bestimmen | 23 |
Benutzerkonto einrichten | 24 |
Datenverzeichnis initialisieren | 25 |
Server starten | 28 |
Server starten mit Programm postgres | 28 |
Server starten mit dem Programm pg_ctl | 29 |
Server mit Init-Skript starten | 30 |
Server anhalten | 31 |
Server per Signal anhalten | 31 |
Server anhalten mit dem Programm pg_ctl | 32 |
Server anhalten mit Init-Skript | 33 |
Server neu starten oder neu laden | 33 |
Nächste Schritte | 34 |
Upgrades durchführen | 34 |
Kleine und große Upgrades | 34 |
Upgrade mit pg_dumpall | 35 |
Upgrade mit pg_upgrade | 37 |
Upgrade durch Replikation | 38 |
Kapitel 2 – Konfiguration | 39 |
Allgemeines | 39 |
Die Datei postgresql.conf | 40 |
Syntax | 41 |
include | 41 |
Änderungen laden | 42 |
Kommandozeile | 43 |
PGOPTIONS | 43 |
SET, RESET und SHOW | 44 |
Einstellungen für Datenbanken und Rollen | 45 |
Präzedenz | 46 |
Einstellungen | 47 |
Verbindungskontrolle | 47 |
listen_addresses | 47 |
port | 48 |
max_connections | 49 |
superuser_reserved_connections | 49 |
ssl | 50 |
Speicherverwaltung | 50 |
shared_buffers | 51 |
temp_buffers | 51 |
work_mem | 52 |
maintenance_work_mem | 54 |
Wartung: Vacuum und Autovacuum | 55 |
autovacuum | 55 |
autovacuum_max_workers | 55 |
autovacuum_naptime | 55 |
Scale Factor und Threshold | 55 |
Transaktionslog | 55 |
fsync | 56 |
wal_buffers | 57 |
synchronous_commit | 57 |
wal_writer_delay | 58 |
checkpoint_segments | 58 |
checkpoint_timeout | 59 |
checkpoint_warning | 59 |
checkpoint_completion_target | 59 |
full_page_writes | 60 |
wal_level | 61 |
archive_mode | 61 |
archive_command | 61 |
archive_timeout | 61 |
hot_standby | 61 |
max_wal_senders | 62 |
wal_sender_delay | 62 |
max_standby_archive_delay | 62 |
max_standby_streaming_delay | 62 |
wal_keep_segments | 62 |
vacuum_defer_cleanup_age | 62 |
wal_receiver_status_interval | 63 |
hot_standby_feedback | 63 |
Planereinstellungen | 63 |
Plantypen | 63 |
enable_seqscan | 64 |
enable_indexscan | 64 |
enable_indexonlyscan | 64 |
enable_bitmapscan | 64 |
enable_nestloop | 64 |
enable_hashjoin | 64 |
enable_mergejoin | 64 |
enable_hashagg | 64 |
enable_sort | 64 |
enable_tidscan | 65 |
enable_material | 65 |
Kostenparameter | 65 |
seq_page_cost | 65 |
random_page_cost | 65 |
cpu_tuple_cost | 65 |
cpu_index_tuple_cost | 65 |
cpu_operator_cost | 65 |
effective_cache_size | 65 |
Andere Planereinstellungen | 65 |
default_statistics_target | 65 |
cursor_tuple_fraction | 66 |
Logging | 66 |
Wohin soll geloggt werden? | 66 |
log_destination | 67 |
CSV-Log | 68 |
logging_collector | 69 |
log_directory | 69 |
log_filename | 70 |
log_rotation_age | 70 |
log_rotation_size | 70 |
log_truncate_on_rotation | 70 |
syslog_facility | 71 |
syslog_ident | 71 |
Wann soll geloggt werden? | 71 |
client_min_messages | 71 |
log_min_messages | 72 |
log_autovacuum_min_duration | 72 |
log_error_verbosity | 72 |
log_min_error_statement | 73 |
log_min_duration_statement | 73 |
Was soll geloggt werden? | 74 |
log_checkpoints | 74 |
log_connections | 74 |
log_disconnections | 74 |
log_duration | 74 |
log_hostname | 75 |
log_line_prefix | 75 |
log_lock_waits | 77 |
log_statement | 77 |
log_temp_files | 78 |
log_timezone | 78 |
Statistiken | 78 |
track_activities | 78 |
track_activity_query_size | 79 |
track_counts | 79 |
track_functions | 79 |
track_io_timing | 79 |
update_process_title | 79 |
stats_temp_directory | 80 |
Lokalisierung | 80 |
client_encoding | 81 |
datestyle | 82 |
intervalstyle | 82 |
lc_collate | 82 |
lc_ctype | 83 |
lc_messages | 83 |
lc_monetary | 83 |
lc_numeric | 84 |
server_encoding | 84 |
Diverses | 84 |
bytea_output | 84 |
custom_variable_classes | 84 |
effective_io_concurrency | 85 |
search_path | 85 |
server_version | 86 |
server_version_num | 86 |
shared_preload_libraries | 86 |
local_preload_libraries | 86 |
statement_timeout | 87 |
timezone | 87 |
Betriebssystemeinstellungen | 87 |
Shared Memory | 87 |
Memory Overcommit | 89 |
Zusammenfassung | 90 |
Kapitel 3 – Wartung | 91 |
VACUUM | 91 |
Multiversion Concurrency Control | 91 |
Der VACUUM-Befehl | 93 |
Einfaches VACUUM | 94 |
VACUUM FULL | 94 |
Einfrieren | 96 |
Die Free Space Map | 97 |
Die Visibility Map | 98 |
Überwachung von VACUUM | 98 |
ANALYZE | 99 |
Das Programm vacuumdb | 100 |
Autovacuum | 101 |
Konfiguration | 102 |
autovacuum | 102 |
log_autovacuum_min_duration | 102 |
autovacuum_max_workers | 102 |
autovacuum_naptime | 103 |
autovacuum_freeze_max_age, vacuum_freeze_min_age | 103 |
vacuum_freeze_table_age | 104 |
Scale Factor und Threshold | 105 |
Überwachung von Autovacuum | 106 |
Tabellenspezifische Einstellungen für Autovacuum | 106 |
Kostenbasiert verzögertes Vacuum | 107 |
Konfiguration | 107 |
vacuum_cost_delay | 108 |
vacuum_cost_limit | 108 |
vacuum_cost_page_hit | 108 |
vacuum_cost_page_miss | 109 |
vacuum_cost_page_dirty | 109 |
autovacuum_vacuum_cost_delay | 109 |
autovacuum_vacuum_cost_limit | 109 |
Reindizierung | 109 |
Weitere Wartungsaufgaben | 110 |
Wartungsstrategie | 110 |
Kapitel 4 – Datensicherung | 113 |
Datensicherungsstrategie | 113 |
Allgemeines über Sicherheit | 113 |
Risiken | 114 |
Überlegungen zur Datensicherung | 115 |
Wohin sichern? | 115 |
Wie oft sichern? | 116 |
Was sichern? | 116 |
Wie wiederherstellen? | 117 |
Was kostet das? | 117 |
Datensicherungsmethoden für PostgreSQL | 118 |
RAID | 118 |
Replikation | 118 |
Dateisystemsicherung | 119 |
Dateisystem sichern | 119 |
Snapshots | 120 |
Wiederherstellung | 120 |
Dumps | 121 |
Dumps ausführen | 121 |
Datensicherung auf andere Rechner | 122 |
Automatisierung | 123 |
Sicherungsstände rotieren | 123 |
Wiederherstellung | 124 |
Keine inkrementelle Sicherung | 125 |
Andere Ausgabeformate | 126 |
WAL-Archivierung und Point-in-Time-Recovery | 128 |
Konzepte | 129 |
Archivierung konfigurieren | 129 |
Archivierungsintervalle | 130 |
Basissicherungen | 131 |
Basissicherung von Hand | 132 |
Organisation der Sicherung | 134 |
Bereinigung der Sicherung | 134 |
Wiederherstellung | 136 |
Point-in-Time-Recovery | 138 |
Zeitleisten | 139 |
Einschätzung | 140 |
Hot Standby | 141 |
Kapitel 5 – Überwachung | 143 |
Was überwachen? | 143 |
Datenbankaktivität | 143 |
Sperren | 143 |
Logdateien | 144 |
Betriebssystem | 144 |
Datensicherung | 144 |
Wie überwachen? | 145 |
Unix-Werkzeuge | 145 |
ps | 145 |
top | 147 |
ptop | 148 |
iotop | 148 |
vmstat | 149 |
iostat | 149 |
Statistiktabellen | 151 |
Aktivität | 151 |
Datenbanken | 154 |
Tupelstatistiken | 155 |
Background Writer | 159 |
Blockstatistiken | 160 |
Replikationsstatistiken | 160 |
Statistiken zurücksetzen | 161 |
Sperren | 161 |
Informationen über Objektgrößen | 163 |
pg_stat_statements | 164 |
Grafische Administrationsprogramme | 167 |
Überwachungswerkzeuge | 169 |
Nagios | 169 |
Munin | 170 |
Sysstat | 171 |
pgFouine | 171 |
pgBadger | 173 |
Und nun? | 174 |
Kapitel 6 – Wiederherstellung, Reparatur und Vorsorge | 175 |
Wiederherstellung und Reparatur | 175 |
Softwarefehler und Abstürze | 175 |
Clientanwendungsabstürze | 176 |
Datenbankserverabstürze | 177 |
Betriebssystemabstürze | 178 |
Hardwareausfälle | 179 |
Stromausfall | 179 |
Festplattenausfall | 179 |
Speicherfehler | 179 |
Bedienfehler und versehentliches Löschen | 179 |
Versehentliches Löschen (DELETE) | 180 |
Datei gelöscht | 181 |
Tabelle gelöscht | 181 |
Index gelöscht | 181 |
Datenbank gelöscht | 181 |
Korrupte Dateien | 182 |
Server startet nicht | 182 |
Write-Ahead-Log defekt | 182 |
Index defekt | 185 |
Tabelle defekt | 186 |
Vorsorge | 189 |
Kapitel 7 – Sicherheit, Rechteverwaltung, Authentifizierung | 193 |
Allgemeines über Sicherheit | 193 |
Benutzerverwaltung | 194 |
Benutzer, Gruppen, Rollen | 194 |
Benutzer anlegen | 195 |
Rollenattribute | 197 |
Login | 197 |
Superuser | 198 |
Attribut zum Erzeugen von Datenbanken | 199 |
Attribut zum Erzeugen von Rollen | 199 |
Replikation | 200 |
Passwörter | 200 |
Passwortgültigkeit | 201 |
Verbindungslimits | 202 |
Rollen ändern | 202 |
Gruppenrollen anlegen und verwalten | 203 |
Rollen anzeigen | 204 |
Rollen löschen | 207 |
Benutzer und Rollen in der Praxis | 208 |
Sichere Datenübertragung | 209 |
Sichere Datenübertragung mit SSL | 210 |
Sichere Datenübertragung mit Tunneln | 211 |
Zugangskontrolle | 212 |
Die Datei pg_hba.conf | 213 |
Typ | 214 |
Datenbankname | 215 |
Benutzername | 216 |
Adresse | 217 |
Methode | 220 |
Authentifizierungsmethoden | 220 |
Trust | 220 |
Reject | 221 |
Passwortauthentifizierung | 221 |
Die Datei .pgpass | 222 |
Ident-basierte Authentifizierung | 222 |
Peer-Authentifizierung | 224 |
Authentifizierung mit Kerberos, GSSAPI und SSPI | 225 |
Authentifizierung mit PAM | 225 |
Authentifizierung mit LDAP | 227 |
Authentifizierung mit RADIUS | 228 |
Clientauthentifizierung mit SSL | 229 |
Authentifizierungsprobleme | 230 |
Zugangskontrolle in der Praxis | 232 |
Rechteverwaltung | 232 |
Privilegien gewähren und entziehen | 233 |
Eigentümerrechte | 234 |
Privilegtypen | 235 |
Privilegien für Tabellen und Sichten | 235 |
Privilegien für Sequenzen | 236 |
Privilegien für Funktionen | 237 |
Privilegien für Schemas | 237 |
Privilegien für Datenbanken | 238 |
Privilegien für Fremddaten-Wrapper | 238 |
Privilegien für Fremdserver | 238 |
Privilegien für Sprachen | 238 |
Privilegien für Large Objects | 239 |
Privilegien für Tablespaces | 239 |
Privilegien für Typen | 239 |
Vorgabeprivilegien | 239 |
Grant-Optionen | 240 |
Privilegien anzeigen | 241 |
Rechteverwaltung in der Praxis | 244 |
Kapitel 8 – Performance-Tuning | 245 |
Ablauf der Befehlsverarbeitung | 245 |
Empfang über Netzwerk | 245 |
Parser | 246 |
Rewriter | 246 |
Planer/Optimizer | 247 |
Executor | 248 |
Ergebnis über Netzwerk | 249 |
Flaschenhälse | 249 |
CPU | 249 |
RAM | 250 |
Festplattendurchsatz | 250 |
Festplattenlatenz | 251 |
Festplattenrotation | 251 |
Netzwerkverbindung | 251 |
Indexe einsetzen | 252 |
Einführung | 252 |
Indextypen | 255 |
Mehrspaltige Indexe und Indexkombination | 256 |
Indexe über Ausdrücke | 258 |
Unique Indexe | 258 |
Partielle Indexe | 259 |
Operatorklassen | 261 |
Indizierung von Mustersuchen | 262 |
Indexe und Fremdschlüssel | 263 |
HOT Updates | 264 |
Nebenläufiges Bauen von Indexen | 264 |
Optimierung von CREATE INDEX | 266 |
Ausführungspläne | 266 |
Planknoten | 266 |
Pläne ansehen und analysieren | 268 |
EXPLAIN und EXPLAIN ANALYZE | 270 |
Pläne mit Bitmap Index Scan | 271 |
Pläne und LIMIT | 272 |
Pläne mit Indexscan | 272 |
Pläne mit Index-Only-Scan | 273 |
Pläne mit Sortieren | 273 |
Pläne auswählen und vergleichen | 274 |
Join-Pläne | 276 |
auto_explain | 278 |
Statistiken und Kostenparameter | 279 |
Statistiken für den Planer | 279 |
ANALYZE | 283 |
Kostenparameter | 284 |
seq_page_cost | 285 |
random_page_cost | 285 |
cpu_tuple_cost | 286 |
cpu_index_tuple_cost | 286 |
cpu_operator_cost | 286 |
effective_cache_size | 286 |
Ungeloggte Tabellen | 287 |
Partitionierung | 287 |
Tabellen partitionieren | 288 |
Constraint Exclusion | 289 |
Partitionierte Tabellen beschreiben | 290 |
Einschätzung | 291 |
Befüllen der Datenbank | 291 |
Transaktionen | 292 |
COPY statt INSERT | 293 |
Indexe, Fremdschlüssel, Reihenfolge | 293 |
Serverkonfiguration | 294 |
Checkpoints | 294 |
Speicher | 295 |
Archivierung | 295 |
Fsync | 296 |
Überblick | 296 |
Nach dem Laden | 296 |
Kapitel 9 – Replikation und Hochverfügbarkeit | 297 |
Begriffserklärung | 297 |
Connection Pooling | 297 |
Clustering | 298 |
Shared Storage | 298 |
Shared Nothing | 298 |
Sharding | 298 |
Replikation | 299 |
Master/Slave-Replikation | 299 |
Multimaster-Replikation | 299 |
Standby-Systeme | 300 |
Hot Standby | 301 |
Planung | 301 |
Konfiguration | 302 |
Failover | 304 |
Verwalten von WAL-Archiven | 305 |
Einschränkungen | 305 |
Zusammenfassung | 308 |
Streaming Replication | 308 |
Planung | 309 |
Konfiguration | 309 |
Asynchrone Replikation | 309 |
Synchrone Replikation | 311 |
Kaskadierende Replikation und Änderungen der Timeline | 313 |
Überwachung | 313 |
Zusammenfassung | 316 |
WAL-Replikation mit pg_standby | 316 |
Konfiguration | 316 |
Failover mit pg_standby | 317 |
Slony-I | 318 |
Konzeption | 318 |
Bevorzugte Anwendungsgebiete | 320 |
Installation | 320 |
Auswahl der Slony-I-Version | 320 |
Debian | 321 |
Quelltextinstallation | 322 |
Die Kommandosprache slonik | 322 |
slonik-Präambel | 323 |
CLUSTER NAME | 323 |
NODE ADMIN CONNINFO | 323 |
Initialisieren eines Clusters | 323 |
INIT CLUSTER | 323 |
Verwalten und Konfigurieren von Clustern | 324 |
CLONE PREPARE, CLONE FINISH | 324 |
CREATE SET | 324 |
DROP NODE | 324 |
DROP PATH | 324 |
EXECUTE SCRIPT | 324 |
FAILOVER | 325 |
LOCK SET, UNLOCK SET | 325 |
MERGE SET | 326 |
MOVE SET | 326 |
RESTART NODE | 327 |
SET ADD TABLE | 327 |
SET ADD SEQUENCE | 328 |
SET DROP TABLE | 328 |
SET DROP SEQUENCE | 328 |
STORE NODE | 328 |
STORE PATH | 329 |
SUBSCRIBE SET | 329 |
UNINSTALL NODE | 331 |
UNSUBSCRIBE SET | 331 |
UPDATE FUNCTIONS | 331 |
WAIT FOR EVENT | 331 |
Der erste Slony-I-Cluster | 332 |
Das Datenbankschema | 332 |
Einrichten der Authentifizierung | 333 |
Einrichten des Datenbankschemas | 334 |
Definition des Clusters | 334 |
Initialisieren des Clusters | 336 |
Starten der Replikationsserver | 337 |
Erstellen der Sets | 339 |
Abonnieren der Sets | 340 |
Überwachung und Wartung | 341 |
Lagtime überwachen | 342 |
slon-Prozesse überwachen | 343 |
Speicherverbrauch überwachen | 343 |
Optimierung | 343 |
Subscriber mit hoher oder anwachsender Lagtime | 343 |
Hohe I/O-Last auf Origin | 344 |
slon-Prozesse und Instabilitäten | 344 |
Zusammenfassung | 344 |
pgpool-II | 345 |
Installation | 345 |
Konfiguration | 345 |
pgpool und Slony | 347 |
pgpool und Streaming Replication | 348 |
PgBouncer | 349 |
Installation | 350 |
Pool-Modi | 350 |
Konfiguration | 351 |
Starten | 352 |
Überwachung und Wartung | 353 |
PgBouncer und Skalierung mit vielen Datenbankverbindungen | 356 |
PL/Proxy | 356 |
Installation | 357 |
Konfiguration | 357 |
plproxy.get_cluster_version | 358 |
plproxy.get_cluster_config | 358 |
plproxy.get_cluster_partitions | 360 |
Beispiel | 360 |
Zusammenfassung | 363 |
DRBD | 364 |
Installation | 364 |
Konfiguration | 364 |
Integration mit Pacemaker | 367 |
Grundlegende Konfiguration | 367 |
Einrichten der Cluster Ressourcen | 368 |
Konfiguration von Ressourcen | 370 |
Wartung | 374 |
STONITH - Shoot The Other Node In The Head | 377 |
Zusammenfassung | 377 |
Kapitel 10 – Hardware | 379 |
Arbeitsspeicher | 379 |
Prozessor | 380 |
Festspeichersystem | 382 |
Anforderungen an das Festspeichersystem | 382 |
Größe des Festspeichersystems | 383 |
Anbindung des Festspeichersystems | 384 |
Geschwindigkeit und Redundanz | 386 |
RAID 0 | 386 |
RAID 1 | 386 |
RAID 5 | 386 |
RAID 6 | 387 |
RAID 10 | 387 |
RAID 15 | 388 |
Redundanz in NAS- oder SAN-Systemen | 388 |
Datensicherheit bei Festplattenlaufwerken und RAID-Controllern | 388 |
Solid State Drives | 389 |
Aufbau eines Serversystems für PostgreSQL | 390 |
Tablespaces | 392 |
Einrichtung von Tablespaces auf dedizierten Laufwerken | 393 |
Verwendung von Tablespaces | 393 |
Verschieben zwischen Tablespaces | 395 |
Tablespace für temporäre Dateien | 396 |
Einrichtung eines dedizierten WAL-Laufwerks | 396 |
Hardwaretests | 397 |
Leistungsmessung mit dd | 397 |
Leistungsmessung mit bonnie++ | 398 |
Leistungsmessung mit pgbench | 399 |
Index | 403 |