53
PostgreSQL optimieren CLT 2010 – 13.-14.03.2010 Andreas ’ads’ Scherbaum Web: http://andreas.scherbaum.la/ E-Mail: andreas[at]scherbaum.biz PGP: 9F67 73D3 43AA B30E CA8F 56E5 3002 8D24 4813 B5FE 13.-14.03.2010

PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

PostgreSQL optimierenCLT 2010 – 13.-14.03.2010

Andreas ’ads’ Scherbaum

Web: http://andreas.scherbaum.la/

E-Mail: andreas[at]scherbaum.biz

PGP: 9F67 73D3 43AA B30E CA8F 56E5 3002 8D24 4813 B5FE

13.-14.03.2010

Page 2: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Was ist PostgreSQL?

Relationale Datenbank unter BSD Lizenz

Weltweit aktive Community

Zahlreiche Features und Funktionen (Foreign Keys,Transaktionen, Trigger)

Lauft auf zahlreichen Betriebssystemen und diverser Hardware

Weitgehendes Einhalten der SQL-Standards – Dokumentationder Abweichungen

Im Schnitt pro Jahr ein Minor-Release mit neuen Features

Version 9.0 wird derzeit fleißig entwickelt

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Der Dozent

Der Dozent

Name: Andreas Scherbaum

Selbststandig im Bereich Datenbanken, Linux aufKleingeraten, Entwicklung von Webanwendungen

Arbeit mit Datenbanken seit 1997, mit PostgreSQL seit 1998oder 1999

Grundungsmitglied der Deutschen und der EuropaischenPostgreSQL User Group

Board of Directors – European PostgreSQL User Group

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 3: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

.la

Was bedeutet dieses komische .la?

http://andreas.scherbaum.la/

.la ist die TLD von Laos

.la wird von Los Angeles genutzt und verwaltet

LA ist das KFZ-Kennzeichen von Landshut/Niederbayern

Dort habe ich langere Zeit gewohnt und meine Frau fand dieDomain schon

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Ziele dieses Workshops

Ziele dieses Workshops

Konfiguration: (Installation,) Speichernutzung einstellen,Logdateien konfigurieren, Zugriff aus dem Netzwerk ermoglichen.der Planer und seine Statistiken

Performance: grundlegende Details, Partitionierung, Tablespaces

Analyse: von Anfragen, Auffinden langsamer Queries, Anfrageplaneim Detail

Informationen: was die Datenbank alles mitteilen kann

VACUUM: der Staubsauger, Sinn, Nutzen und Konfiguration

Transaktionen: Wozu braucht man so etwas?

SQL-Injections: Was ist das? Warum ist das wichtig?

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 4: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Ziele dieses Workshops

Skripts zum Workshops

http://andreas.scherbaum.la/writings/clt-2010-skripts.zip

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Konfiguration

Konfiguration – Ubersicht

Alle Konfigurationen fur PostgreSQL werden in der Dateipostgresql.conf vorgenommen

Alle Einstellungen fur Zugangsberechtigungen werden in derDatei pg hba.conf vorgenommen

Nach Anderungen mittels pg ctl reload die Konfigurationneu laden

Ein Neustart ist nur selten notwendig und ist in derKonfiguration vermerkt

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 5: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Konfiguration

Konfiguration – Speichernutzung

shared buffers: Verfugbarer Speicher fur alle PostgreSQLProzesse

Ev. /etc/sysctl.conf anpassen (kernel.shmmax undkernel.shmall)

http://www.postgresql.org/docs/current/static/kernel-resources.html

work mem: Speicher fur Sortieroperationen und HashingTabellen

maintenance work mem: Speicher fur VACUUM undANALYZE

temp buffers: Speicher fur temporare Tabellen

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Konfiguration

Konfiguration – Speichernutzung

max fsm pages: bestimmt die Verwaltung von Disk Pages

max fsm relations: bestimmt die Anzahl von Tabellen undIndizes

VACUUM VERBOSE Ausgabe beachten

Neu in PostgreSQL 8.4: FSM konfiguriert sich selbst

max stack depth: Große des nutzbaren Stacks (ulimitbeachten)

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 6: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Konfiguration

Konfiguration – Speichernutzung

Beispiel (VACUUM VERBOSE Ausgabe)

INFO: free space map contains 1368 pages in 117 relations

DETAIL: A total of 2912 page slots are in use (including overhead).

2912 page slots are required to track all free space.

Current limits are: 153600 page slots, 1000 relations, using 965 kB.

2912 Speicherseiten (a 8kB) und 117 Objekte verwendet

153.600 Speicherseiten und 1000 Objekte kann die Datenbankverwalten

kostet weniger als 1 MB RAM

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Konfiguration

Konfiguration – Logdateien

log filename: Format fur Logdateien in pg log (siehestrftime())

log rotation age: Logfiles nach Zeit rotieren

log rotation size: Logfile nach Große rotieren

log error verbosity: PostgreSQL wird gesprachiger(verbose)

log min error statement: minimaler Loglevel (Default:info)

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 7: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Konfiguration

Konfiguration – Logdateien

log min duration statement: Ausfuhrungszeit vonAnfragen loggen (Default: -1)

bis 8.3: redirect stderr: leitet Ausgaben in eine Logdateium

ab 8.4: log destination: leitet Ausgaben in stderr,csvlog, syslog oder eventlog um

ab 8.4: logging collector: aktiviert das Umleiten derFehler in das Log

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Konfiguration

Konfiguration – Netzwerk

listen addresses: genutzte Netzwerkinterfaces (’*’,’localhost’, IP-Adressen)

port: Netzwerkport (Default: 5432)

max connections: maximale Anzahl Netzwerkverbindungen

superuser reserved connections: Reserve fur den Admin+ VACUUM

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 8: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Konfiguration

Konfiguration – Netzwerk

unix socket directory: Verzeichnis fur denUnix-Domain-Socket

unix socket group: Gruppenname fur Domainsocket File

unix socket permissions: Integer Wert fur Zugriffsrechteauf Domainsocket File

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Konfiguration

Shared Memory – SHMMAX

Maximale Große eines einzelnen Shared Memory Segments

Auf 32-Bit Systemen maximal 4 GB – jedoch effektiv weniger

Aktuellen SHMMAX Wert abfragen: cat/proc/sys/kernel/shmmax

Neuen Wert setzen: sysctl -w kernel.shmmax=220000000

Hinweis: SUSE/OpenSUSE und Red Hat nutzen bereits dengesamten Hauptspeicher als Shared Memory.

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 9: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Konfiguration

Shared Memory – SHMMAX – Berechnung

Gesucht: Shared Memory mit einer Große von 200 MB

Beispiel (Berechnung von SHMMAX)

200 MB = 1024 Bytes * 1024 kB * 200 MB

= 209715200

aufgerundet: 220000000 (220.000.000)

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Konfiguration

Konfiguration – Ubung

PostgreSQL an alle Netzwerkinterfaces binden

42 maximale Verbindungen zulassen

1024 MB Shared Memory einstellen

Speicher fur Sortieroperationen auf 3 MB einstellen

Logfiles taglich neu erstellen, der Wochentag erscheint imDateinamen

Anfragen mit einer Laufzeit uber 5 Sekunden protokollieren

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 10: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Konfiguration

Konfiguration – Losung der Ubung

listen addresses = ’*’

max connections = 42

shared buffers = 1024MB

kernel.shmmax und kernel.shmall anpassen

work mem = 3MB

log directory = ’/pfad/zum/verzeichnis’ (ggf. außerhalbdes Datenverzeichnis)

log filename = ’postgresql-%a.log’

log min duration statement = 5000

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Konfiguration

Konfiguration – Planer

enable bitmapscan, enable hashagg, enable hashjoin,enable indexscan, enable mergejoin, enable nestloop,enable seqscan, enable sort, enable tidscan

Alle Werte sind per Default on und beeinflussen den Planer

Zur Laufzeit umschaltbar: SET enable seqscan = off

effective cache size: ungefahre Große des Caches imBetriebssystem

geqo: Generic Query Optimizer ein- oder ausschalten

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 11: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Konfiguration

Konfiguration – Planer

seq page cost: Kosten fur das Lesen eines Blocks wahrendeiner laufenden Leseoperation (1.0)

random page cost: Kosten fur das Lesen eines zufalligenBlocks (4.0)

cpu tuple cost: Kosten fur das Bearbeiten einer Zeile (row)(0.01)

cpu index tuple cost: Kosten fur das Bearbeiten einesEintrags im Index (0.005)

cpu operator cost: Kosten fur den Aufruf eines Operatorsoder einer Funktion (0.0025)

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Konfiguration

Konfiguration – Statistiken

track activities: in 8.3, aktiviere Statistiken furausgefuhrte Befehle

stats start collector: in 8.2, aktiviere Statistiken

stats block level: in 8.2, aktiviere Statistiken furblockbasierte Operationen

stats row level: in 8.2, aktiviere Staristiken furzeilenbasierte Operationen

track counts: in 8.3, aktiviere Statistiken furDatenbankaktivitaten (Autovacuum)

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 12: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Konfiguration

Konfiguration – Statistiken loggen

log statement stats: Statistiken uber den ausgefuhrtenBefehl

log parser stats: Statistiken uber die Parser Operationen

log planner stats: Statistiken uber die Planer Operationen

log executor stats: Statistiken uber die effektivausgefuhrten Operationen

Hinweis: log statement stats kann nicht zusammen miteiner anderen Option aktiviert werden

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Konfiguration

Konfiguration – Write Ahead Log (WAL)

fsync: aktiviert oder deaktiviert synchrones Schreiben. offkann zu Datenverlusten und einer beschadigten Datenbankfuhren!

synchronous commit: bei off wird nicht auf das Beendendes Schreibens gewartet. Datenverluste sind moglich, aberkeine beschadigte Datenbank.

wal buffers: Große des Speicherbereichs zum Schreibeneines Eintrags in das WAL.

checkpoint segments: Anzahl WAL-Logfiles, die rotiertwerden

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 13: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Grunde fur schlechte Performance

Die Moglichkeiten sind fast unbegrenzt ...

Falsche (oder gar fehlende) Konfiguration

Anwendung stellt Anfragen falsch

Datenbank Layout ist falsch oder ungenugend (fehlendeIndizies, fehlende Normalisierung)

Anwendungen fragen zu viele (unnotige) Daten ab (z.B.:SELECT *, fehlendes WHERE)

Latenzzeiten (z.B. Netzwerk, Zugriffszeiten der Festplatten)

Ungenugende Hardware

...

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Ungenugende Hardware

Performance – Ungenugende Hardware

Mehr RAM, mehr RAM, noch mehr RAM

Daten die im Speicher vorgehalten werden, mussen nicht vonder Platte gelesen werden

Langsame Festplatten gegen schnellere ersetzen, ggf. einRAID oder Tablespaces nutzen

Es gilt:

die Performance verbessert sich mit der Anzahl derSpindeln

Schwachstellen im I/O-System herausfinden

SSD-Platten in Betracht ziehen: sehr schnell beim Lesen,jedoch derzeit noch Probleme beim Schreiben

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 14: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Performancesteigerung durch Hardware

Performancesteigerung durch Hardware

Soviel RAM wie notwendig: die wichtigen Tabellen/Datensollen komplett im RAM liegen

RAID kann Plattenzugriffe verteilen – aber nur unabhangigvon der tatsachlichen Nutzung

Mittels Tablespaces kann man Zugriffe gezielt aufverschiedene Platten verteilen - z. B. Tabelle und Index aufzwei Spindeln legen

Wenig genutzte Daten konnen auf langsame (und gunstige)Datentrager ausgelagert werden

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Performancesteigerung durch Konfiguration

Performance – falsche Konfiguration

Hinweis: die standardmaßige PostgreSQL Konfiguration ist aufgeringen Ressourcenverbrauch ausgelegt.

shared buffers zu gering

FSM – Free-Space-Map nicht angepasst

Bei umfangreichen Operationen work mem erhohen

maintenance work mem kann mehr Speicher fur VACUUMbereitstellen

temp buffers: bei Uberschreiten werden Daten auf dieFestplatte ausgelagert

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 15: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Performancesteigerung durch Konfiguration

Performance – Anwendung stellt Anfragen falsch

Mittels log min duration statement langlaufende Anfragenermitteln

Anfragen mittels EXPLAIN und EXPLAIN ANALYZE uberprufen

Gleiche Anfragen mittels Prepared Statement aufrufen:erspart den Parser Schritt

Zahlreiche INSERT-Operationen mittels PreparedStatement oder besser COPY durchfuhren

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Performancesteigerung durch Konfiguration

Performance – Datenbank Layout ist falsch oderungenugend

Testweise prufen, ob ein Index auf einer Spalte eineVerbesserung der Laufzeit bewirkt

Wichtig: ANALYZE fur die Tabelle nicht vergessen

Tabellen normalisieren – in der Regel ergeben sich dadurch furdie Datenbank besser handhabbare Anfragen

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 16: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Performancesteigerung durch Konfiguration

Performance – BG-Writer

Der Background-Writer schreibt normalerweise verteilt uberdie halbe Zeit

Parameter: checkpoint completion target (Default: 0.5)

Bei kontinuierlicher Schreiblast Anpassung bis 0.9 sinnvoll

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Performancesteigerung durch Konfiguration

Performance – Transaktionen zusammenfassen

commit delay verzogert abgeschlossene Transaktionenkurzzeitig (0 bis 10 Sekunden, Default: 0)

Dadurch konnen mehrere Transaktionen in einem Durchganggeschrieben werden

Nur ein sync() ist notwendig

Wird ab commit siblings (Default: 5) offenenTransaktionen aktiviert

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 17: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Performancesteigerung durch Konfiguration

Performance – großere Statistiken

default statistics target legt die Anzahl der haufigstenEintrage in der Statistik fest

Bis PostgreSQL 8.3: 10 Eintrage

Ab PostgreSQL 8.4: 100 Eintrage

Von 1 bis 1000 Eintrage moglich

Vorteil: die Datenbank kennt mehr haufig vorkommendeEintrage und kann den Ausfuhrungsplan anpassen

Nachteil: kostet mehr Platz fur die Statistiken

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Performancesteigerung durch Konfiguration

Performance – Prefetching

Posix-Feature, ab PostgreSQL 8.4 vorhanden

Gibt die voraussichtliche Anzahl paralleler Zugriffe bekannt

Parameter: effective io concurrency (1 bis 1000, 0deaktiviert das Feature, Default: 1)

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 18: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Partitionierung

Partitionierung – Vorteile

Daten werden ausgehend von der tatsachlichen Situationgespeichert

Sequentielle Scans durchlaufen nicht den gesamtenDatenbestand

Bestimmte Verwaltungsarbeiten lassen sich effizientdurchfuhren

Daten konnen auf unterschiedliche Medien aufgeteilt werden

Die Partitionierung kann anhand jedes beliebigen Kriteriumserfolgen – solange dieses voraussagbar ist

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Partitionierung

Partitionierung bei PostgreSQL

Tabellen werden durch Inheritance (Vererbung) von einerMastertabelle erstellt:

Beispiel (Mastertabelle erstellen)

CREATE TABLE log_data (

id SERIAL NOT NULL

PRIMARY KEY,

insert_at TIMESTAMP NOT NULL,

data VARCHAR(100) NOT NULL

);

Hinweis: TIMESTAMPTZ ist hier nicht anwendbar!

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 19: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Partitionierung

Partitionierung bei PostgreSQL

Beispiel (Abgeleitete Tabellen erstellen)

CREATE TABLE log_data_200901 ( ) INHERITS (log_data);

CREATE TABLE log_data_200902 ( ) INHERITS (log_data);

INSERT INTO log_data_200902 (insert_at, data)

VALUES (’2009-02-12’, ’data set 42’);

INSERT INTO log_data_200901 (insert_at, data)

VALUES (’2009-01-23’, ’data set 23’);

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Partitionierung

Partitionierung bei PostgreSQL

Beispiel (Daten in Tabelle 200901)

SELECT * FROM log_data_200901;

id | insert_at | data

----+------------------------+-------------

2 | 2009-01-23 00:00:00+01 | data set 23

(1 Zeile)

Beispiel (Daten in Tabelle 200902)

SELECT * FROM log_data_200902;

id | insert_at | data

----+------------------------+-------------

1 | 2009-02-12 00:00:00+01 | data set 42

(1 Zeile)

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 20: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Partitionierung

Partitionierung bei PostgreSQL

Beispiel (Daten in Master Tabelle)

SELECT * FROM log_data;

id | insert_at | data

----+------------------------+-------------

2 | 2009-01-23 00:00:00+01 | data set 23

1 | 2009-02-12 00:00:00+01 | data set 42

(2 Zeilen)

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Partitionierung

Korrekte Timestamps erzwingen

Beispiel (Abgeleitete Tabellen mit CONSTRAINTs erstellen)

CREATE TABLE log_data_200901 ( ) INHERITS (log_data);

CREATE TABLE log_data_200902 (

CHECK (insert_at >= DATE ’2009-02-01’ AND

insert_at < DATE ’2009-03-01’)

) INHERITS (log_data);

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 21: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Partitionierung

Nutzung des Timestamp bei einer Anfrage

Wenn PostgreSQL einen Contraint auf der vererbten Tabellevorfindet, wird dieser dazu genutzt, die komplette Tabelle gf.aus der Abfrage auszuschließen

Hinweis: Alle abgeleiteten Tabellen wurden neu mitConstraints erstellt.

Beispiel (CONSTRAINTs nutzen)

-- bis PostgreSQL Version 8.3:

SET constraint_exclusion = on;

EXPLAIN SELECT * FROM log_data

WHERE insert_at=’2008-10-11’;

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Partitionierung

Nutzung des Timestamp bei einer Anfrage

Beispiel (CONSTRAINTs in einer Anfrage nutzen)

EXPLAIN SELECT * FROM log_data

WHERE insert_at=’2008-10-11’;

QUERY PLAN

-----------------------------------------------------

Result (...)

-> Append (...)

-> Seq Scan on log_data (...)

Filter: (insert_at = ’2008-10-11

00:00:00’::timestamp

without time zone)

(4 Zeilen)

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 22: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Partitionierung

Nutzung des Timestamp bei einer Anfrage

Beispiel (CONSTRAINTs in einer Anfrage nutzen)

EXPLAIN SELECT * FROM log_data

WHERE insert_at=’2009-01-23’;

QUERY PLAN

-----------------------------------------------------

Result (...)

-> Append (cost=0.00..27.75 rows=4 width=230)

-> Seq Scan on log_data (...)

Filter: (insert_at = ’2009-01-23

00:00:00’::timestamp

without time zone)

-> Seq Scan on log_data_200901 log_data ()

Filter: (insert_at = ’2009-01-23

00:00:00’::timestamp

without time zone)

(6 Zeilen)

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Partitionierung

Partitionierung – Nachteile und Wartung

Der partitionierte Schlussel muss in den (meisten) Anfragenverwendet werden

Andernfalls kann PostgreSQL nicht herausfinden, welcheTabellen ein- oder auszuschließen sind

Daten mussen entweder in die partitionierte Tabelle eingefugtoder mittels Trigger/Rules von der Master Tabelle umgeleitetwerden

Das Loschen alter Daten geht schnell: nur die entspechendeTabelle loschen

Hinweis: Rules mussen entfernt bzw. Trigger umgeschriebenwerden

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 23: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Partitionierung

Partitionierung – Ubung

Eigene partitionierte Tabellen erstellen

Testdaten erstellen

Daten aus partitionierten Tabellen und der Mastertabelleauslesen

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Tablespaces

Tablespaces – Vorteile gegenuber RAID

Tabellen und Indexes konnen gezielt (und getrennt) aufverschiedene Datentrager verteilt werden

Verschiedene Datenbanken oder Tabellen konnen sich aufverschieden schnellen Datentragern befinden

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 24: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Tablespaces

Tablespace erstellen

Beispiel (Tablespace anlegen)

CREATE TABLESPACE ts_neu LOCATION ’/mnt/db_neu’;

Der Name des Tablespace muss eindeutig sein und darf bishernicht vergeben sein

Das Verzeichnis ”/mnt/db neu” muss ”postgres” gehoren undleer sein, der absolute Pfad wird verlangt

Tablespaces konnen nur von einem Admin angelegt werden

Das Zuweisen an einen anderen User ist moglich (OWNER)

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Tablespaces

Tablespace nutzen

Tablespaces werden mit Hilfe der Option ”TABLESPACE”beim Erstellen eines Objekts angewandt:

Beispiel (Index auf Tablespace erstellen)

CREATE INDEX test1_index ON test1(id)TABLESPACE ts_neu;

Eine nachtragliche Zuweisung zu einem anderen Tablespace istmoglich:

Beispiel (Index nachtraglich verschieben)

ALTER INDEX test1_index SET TABLESPACE ts_neu;

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 25: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Tablespaces

Tablespace per Datenbank angeben

Eine Datenbank kann komplett auf einem anderen Tablespaceerzeugt werden:

Beispiel (Tablespace fur Datenbank angeben)

CREATE DATABASE neue_db TABLESPACE = ts_neu;

Der Default Tablespace fur neue Objekte lasst sich andern:

Beispiel (Default Tablespace andern)

SET default_tablespace = ts_neu;

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Tablespaces

Neu in PostgreSQL 8.4!

Eine ganze Datenbank kann nachtraglich auf einen anderenTablespace umgezogen werden:

Beispiel (Datenbank auf anderen Tablespace umziehen)

ALTER DATABASE neue_db SET TABLESPACE ts_neu;

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 26: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Tablespaces

Tablespaces – Ubung

Eigenen Tablespace anlegen

Eine Tabelle im neuen Tablespace anlegen

Tabelle ohne Tablespace anlegen

Index in neuen Tablespace verschieben

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Analyse von Anfragen

Analyse von Anfragen – Warum?

Langsame Anfragen schneller gestalten

Performance-Schwachstellen entdecken

Ungenutzte Indexes herausfinden

...

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 27: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Analyse von Anfragen

Analyse von Anfragen – Wie

EXPLAIN: liefert den Queryplan fur eine Anfrage

EXPLAIN ANALYZE: fuhrt die Anfrage zusatzlich aus und misstdie Laufzeiten

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Analyse von Anfragen

Analyse von Anfragen – Ubung

Die pg tables Tabelle mit EXPLAIN und EXPLAIN ANALYZEanalysieren

Bonus: Verwendung von Indexes erzwingen und die Analysewiederholen

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 28: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Analyse von Anfragen

Analyse von Anfragen – Losung

Beispiel (System-View pg tables)

EXPLAIN SELECT * FROM pg_tables;

EXPLAIN ANALYZE SELECT * FROM pg_tables;

SET enable_seqscan = off;

EXPLAIN SELECT * FROM pg_tables;

EXPLAIN ANALYZE SELECT * FROM pg_tables;

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Der Planer

Der Planer im Detail

Jede Anfrage wird vom Planer bearbeitet und in einenQueryplan ubersetzt

Zu einzelnen Teilen der Anfrage werden statistischeInformationen aus den Tabellen geholt

Aufgrund dieser Informationen wird entschieden, ob z.B. einIndex genutzt wird

Der Planer kann ggf. Anfragen intern umschreiben (JOINsauflosen, RULEs anwenden)

Der Datentyp spielt ebenfalls eine Rolle

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 29: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Der Planer

Beispiel Tabelle

Beispiel (Beispiel Tabelle)

CREATE TABLE planer_test (

id SERIAL NOT NULL UNIQUE,

inhalt VARCHAR NOT NULL

);

INSERT INTO planer_test (inhalt) VALUES (’Inhalt 001’);

INSERT INTO planer_test (inhalt) VALUES (’Inhalt 002’);

INSERT INTO planer_test (inhalt) VALUES (’Inhalt 003’);

INSERT INTO planer_test (inhalt) VALUES (’Inhalt 004’);

INSERT INTO planer_test (inhalt) VALUES (’Inhalt 005’);

Beispiel (Statistiken up to date)

VACUUM ANALYZE VERBOSE planer_test;

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Der Planer

Analyse von Anfragen

Beispiel (EXPLAIN Ausgabe)

postgres=# EXPLAIN SELECT id, inhalt FROM planer_test WHERE id=1;

QUERY PLAN

------------------------------------------------------------

Seq Scan on planer_test (cost=0.00..1.06 rows=1 width=18)

Filter: (id = 1)

(2 Zeilen)

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 30: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Der Planer

Analyse von Anfragen

Seq Scan on planer test (cost=0.00..1.06 rows=1width=18)

Sequentieller Scan auf die Tabelle

Gesamtkosten: 1.06

Kosten bis zum Lesen des ersten brauchbaren Wertes: 0.00

Erwartete Anzahl Spalten: 1

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Der Planer

Analyse von Anfragen

Frage: Warum ein sequentieller Scan, wenn wir doch einenIndex auf id haben?

Erzwingen wir die Nutzung des Index:

SET enable seqscan=0;

Einschatzung: Was wird passieren?

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 31: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Der Planer

Analyse von Anfragen

Beispiel (EXPLAIN Ausgabe)

postgres=# EXPLAIN SELECT id FROM planer_test WHERE id=1;

QUERY PLAN

---------------------------------------------------------

Index Scan using planer_test_id_key on planer_test

(cost=0.00..3.01 rows=1 width=4)

Index Cond: (id = 1)

(2 Zeilen)

Was ist passiert?

Index wird gelesen: Kosten 1-2

Da sich alle Daten in einem Block befinden, muss dieser Blockdanach sowieso gelesen werden

Resultat: Kosten 3

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Der Planer

Analyse von Anfragen – Erkentnisse

PostgreSQL erstellt jeden Queryplan dynamisch und abhangigvom Zustand der Daten

Zwei Anfragen auf die gleiche Tabelle, bei unterschiedlichenDatenmengen, konnen anders ausgefuhrt werden

Daraus resultiert: PostgreSQL sollte gute Informationen uberdie Daten in den Tabellen haben

Das wichtigste Hilfsmittel ist ANALYZE (bzw. VACUUMANALYZE)

Der Autovacuum Daemon ubernimmt die meiste Arbeit

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 32: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Der Planer

Analyse von Anfragen – Ausfuhrungszeit messen

Beispiel (EXPLAIN ANALYZE Ausgabe)

postgres=# EXPLAIN ANALYZE SELECT id FROM planer_test WHERE id=1;

QUERY PLAN

-------------------------------------------------------------------

Seq Scan on planer_test (cost=0.00..1.06 rows=1 width=4)

(actual time=0.017..0.025 rows=1 loops=1)

Filter: (id = 1)

Total runtime: 0.066 ms

(3 Zeilen)

EXPLAIN ANALYZE fuhrt die Anfrage aus und misst die Zeit

Die gemessenen Zeiten bewegen sich innerhalb der vorabgeschatzten Werte

Sollte es hier grobe Abweichungen geben, hat der Planerfalsche Daten!

Vorsicht: Es werden Daten verandert!

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Der Planer

Analyse von Anfragen – Negativbeispiel

Beispiel (EXPLAIN ANALYZE Ausgabe)

postgres=# EXPLAIN ANALYZE SELECT id FROM planer_test WHERE id=10;

QUERY PLAN

-------------------------------------------------------------------

Seq Scan on planer_test (cost=0.00..1.06 rows=1 width=4)

(actual time=0.022..0.022 rows=0 loops=1)

Filter: (id = 10)

Total runtime: 0.060 ms

(3 Zeilen)

Eine sequentielle Suche nach einem nicht vorhandenen Wert

Die Datenbank muss die gesamte Tabelle lesen (minimal0.022 gleich 0.022)

Ein Index hatte hier womoglich schneller Auskunft gegeben

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 33: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Der Planer

Analyse von Anfragen – großere Tabelle

Beispiel (Tabelle mit vielen Inhalten erzeugen)

CREATE TABLE planer_test2 (

id INTEGER NOT NULL PRIMARY KEY,

inhalt FLOAT NOT NULL

);

INSERT INTO planer_test2 (id, inhalt)

SELECT generate_series (1, 10000000), RANDOM();

Beispiel (Statistiken up to date)

VACUUM ANALYZE VERBOSE planer_test2;

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Der Planer

Analyse von Anfragen – großere Tabelle

Beispiel (einen bestimmten Wert suchen)

postgres=# EXPLAIN SELECT id, inhalt FROM planer_test2

WHERE id=800000;

QUERY PLAN

----------------------------------------------------

Index Scan using planer_test2_pkey on planer_test2

(cost=0.00..9.14 rows=1 width=12)

Index Cond: (id = 800000)

(2 Zeilen)

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 34: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Der Planer

Analyse von Anfragen – großere Tabelle

Beispiel (Laufzeit messen)

postgres=# EXPLAIN ANALYZE SELECT id, inhalt FROM planer_test2

WHERE id=800000;

QUERY PLAN

----------------------------------------------------

Index Scan using planer_test2_pkey on planer_test2

(cost=0.00..9.14 rows=1 width=12) (actual time=0.029..0.032 rows=1 loops=1)

Index Cond: (id = 800000)

Total runtime: 0.077 ms

(3 Zeilen)

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Der Planer

Analyse von Anfragen – großere Tabelle

Beispiel (Nutzung der Indicies verbieten)

SET enable_indexscan = off;

SET enable_bitmapscan = off;

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 35: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Der Planer

Analyse von Anfragen – großere Tabelle

Beispiel (Laufzeit messen)

postgres=# EXPLAIN ANALYZE SELECT id, inhalt FROM planer_test2

WHERE id=800000;

QUERY PLAN

----------------------------------------------------

Seq Scan on planer_test2

(cost=0.00..174020.00 rows=1 width=12)

(actual time=245.986..2740.600 rows=1 loops=1)

Filter: (id = 800000)

Total runtime: 2740.645 ms

(3 Zeilen)

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Transaktionen?

Transaktionen

Transaktionen kapseln beliebig viele Aktionen in derDatenbank zu einer einzelnen Aktion nach außen

Beispiel: Bankuberweisung

Schritt 1: Geld wird von Ihrem Konto abgebucht

Schritt 2: Geld wird auf das andere Konto gebucht

Was passiert, wenn zwischen Schritt 1 und 2 ein Fehlerauftritt?

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 36: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Transaktionen?

Transaktionen – ACID

A C I D

A: Atomaritat (Atomicity) – ganz oder gar nicht

C: Konsistenz (Consistency) – Datenbestand ist vor und nachder Transaktion konsistent

I: Isolation (Isolation) – alle Aktionen (Transaktionen) sindvoneinander abgekapselt

D: Dauerhaftigkeit (Durability) – bestatigte Anderungenbleiben erhalten

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Wie werden Transaktionen genutzt?

Transaktionen nutzen

Beispiel (Transaktion starten)

BEGIN;

START TRANSACTION;

Beispiel (Transaktion abschließen)

COMMIT;

Beispiel (Transaktion zuruckrollen)

ROLLBACK;

Hinweis: PHP bietet keine eingebauten Funktionen furTransaktionen

Perl DBI kennt begin work(), commit() und rollback()

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 37: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Isolation von Transaktionen

Isolation von Transaktionen

Beispiel:

Transaktion 1 startet mit eigener aktueller Ansicht derDatenbank (I – Isolation)

Transaktion 2 startet

Transaktion 2 andert einen Wert in einer Tabelle

Transaktion 2 committed ihre Anderungen, diese werdensichtbar

Aber: Transaktion 1 muss weiterhin den alten Wert sehenkonnen, da dieser beim Start der Transaktion gultig war

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Isolation von Transaktionen

Isolation von Transaktionen – Ubung

Zwei Verbindungen zur Datenbank offnen

Eine Tabelle erstellen

In beiden Verbindungen eine Transaktion starten

Den Inhalt der Tabelle in beiden Verbindungen anzeigen lassen

In einer Transaktion einen Datensatz einfugen

Den Inhalt der Tabelle in beiden Verbindungen anzeigen lassen

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 38: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Isolation von Transaktionen

Isolation von Transaktionen – Ubung

Beispiel (Beispieltabelle erstellen)

CREATE TABLE transaktion_test (

id SERIAL NOT NULL

PRIMARY KEY,

wert VARCHAR NOT NULL

);

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Isolation von Transaktionen

Isolation von Transaktionen – Ubung

Beispiel (Beispiel)

T1: BEGIN;

T2: BEGIN;

T1: SELECT * FROM transaktion_test;

T2: SELECT * FROM transaktion_test;

T1: INSERT INTO transaktion_test (wert) VALUES (’etwas Inhalt’);

T1: SELECT * FROM transaktion_test;

T2: SELECT * FROM transaktion_test;

T1: COMMIT;

T1: SELECT * FROM transaktion_test;

T2: SELECT * FROM transaktion_test;

T2: COMMIT;

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 39: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Isolation von Transaktionen

Isolation von Transaktionen – Ubung

Beispiel (Beispiel)

T1: BEGIN;

T2: BEGIN;

T1: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

T2: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

-- Ubung von vorheriger Folie ab SELECT ... wiederholen

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Isolation von Transaktionen

Isolation von Transaktionen – die Nachteile

Das notwendige Vorhalten alterer Versionen eines Datensatzeswird Multiversion Concurrency Control (kurz: MVCC)genannt

Diese alten Versionen belegen Platz auf der Festplatte und imIndex

Diese Uberreste konnen mit dem Befehl VACUUM aufgeraumtwerden, Syntax:

Beispiel (VACUUM fur eine Tabelle aufrufen)

VACUUM ANALYZE tabelle;

Hinweis: VACUUM kann nicht innerhalb einer Transaktion aufgerufenwerden

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 40: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Isolation von Transaktionen

Isolation von Transaktionen – mogliche Probleme

Innerhalb von Transaktionen kann es zu vielfaltigen Problemenkommen:

Dirty Read: Andere Transaktionen konnen Daten deraktuellen Transaktion lesen, obwohl die Anderungen noch nichtcommitted wurdenNon-Repeatable Read: Bei mehrfachen, gleichenLesezugriffen innerhalb einer Transaktion gibt esunterschiedliche ErgebnissePhantom Read: Durch Einfugen, Andern oder Loschen gibt esin anderen Transaktionen bei gleichen Bedingungenunterschiedliche Ergebnisse

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Isolation von Transaktionen

Isolation von Transaktionen – Transaktionslevel

SQL definiert 4 verschiedene Transaktionslevel:

READ UNCOMMITTED: Anderungen innerhalb einer Transaktionsind von außerhalb zu sehen (in PG: READ COMMITTED)READ COMMITTED: Anderungen sind nur nach einem COMMIT zusehenREPEATABLE READ: Die Datenbank merkt sich den Zeitpunktdes ersten Lesens eines Datensatzes, dies trifft jedoch nicht aufzwischenzeitlich eingefugte Datensatze zu (in PG:SERIALIZABLE)SERIALIZABLE: Die Transaktionen sind vollig gekapselt

PostgreSQL nutzt nur READ COMMITTED und SERIALIZABLE

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 41: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Isolation von Transaktionen

Isolation von Transaktionen – Probleme und Isolationslevel

Level Dirty Read Non-Repeatable Read Phantom ReadRead Uncommitted Moglich Moglich Moglich

Read Committed Unmoglich Moglich MoglichRepeatable Read Unmoglich Unmoglich Moglich

Serializable Unmoglich Unmoglich Unmoglich

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Isolation von Transaktionen

Isolation von Transaktionen – Transaktionslevel

Unterschiede zwischen READ COMMITTED und SERIALIZABLE:

READ COMMITTED: Daten, die vor dem Beginn des Query, abernach Beginn der Transaktion sichtbar waren, werden angezeigt

SERIALIZABLE: Nur Daten, die vor Beginn der Transaktionsichtbar waren, werden angezeigt

Hinweis: bei SERIALIZABLE kann es zuTransaktionsabbruchen kommen, die Applikation muss diesabfangen!

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 42: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Isolation von Transaktionen

Isolation von Transaktionen – Transaktionslevel

PostgreSQL Default: READ COMMITTED

Andern mit: SET TRANSACTION ISOLATION LEVELSERIALIZABLE

Befehl muss nach START TRANSACTION/BEGIN aufgerufenwerden

Die Einstellung kann nach der ersten Daten-anderndenAnweisung (inkl. SELECT) nicht mehr geandert werden

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Isolation von Transaktionen

Transaktionen – Savepoints

Ein Savepoint ist ein Punkt innerhalb einer Transaktion, biszu dem zuruckgerollt werden kann

Mehrere Savepoints sind moglich

Savepoints sind nur in einer Transaktion moglich

Ein ROLLBACK zerstort auch alle spateren Savepoints

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 43: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Isolation von Transaktionen

Transaktionen – Savepoints

Beispiel (Savepoint erstellen)

SAVEPOINT bis_hierhin;

Beispiel (Zu einem Savepoint zuruckkehren)

ROLLBACK TO bis_hierhin;

Beispiel (Einen Savepoint freigeben)

RELEASE SAVEPOINT bis_hierhin;

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Isolation von Transaktionen

Transaktionen – Savepoints – Ubung

Eine Transaktion starten

Einen Savepoint erstellen

Eine Tabelle loschen

Zum Savepoint zuruckkehren

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 44: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Information Schema

information schema

Das Information Schema stellt einen standardisierten Wegbereit, Informationen uber die Struktur der Datenbankauszulesen

Dazu gibt es Views im Schema information schema

Z.B. Tabellen, Spalten, Views, User, Sequencen, Trigger,Privilegien u.v.m.

http://www.postgresql.org/docs/current/static/information-schema.html

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Information Schema

information schema

tables: Enthalt Tabellen und Views

columns: Enthalt alle Spalten jeder Tabelle

schemata: Enthalt alle Schemata

routines: Enthalt alle Funktionen

sql features: Unterstutzte (oder nicht unterstutzte) SQLFunktionalitaten

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 45: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Information Schema

information schema – Ubung

Herausfinden wie man alle Spalten einer Tabelle anzeigen kann

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Information Schema

information schema – Beispiel

Beispiel (Alle Spalten von allen Tabellen)

SELECT table_schema,table_name,column_name,data_type

FROM information_schema.columns

ORDER BY table_schema, table_name;

Beispiel (Alle Spalten von einer Tabelle)

SELECT table_schema,table_name,column_name,data_type

FROM information_schema.columns

WHERE table_schema=’<schema name>’

AND table_name=’<tabellenname>’;

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 46: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Systemtabellen

pg * Systemtabellen

Nicht SQL-konform, eine PostgreSQL-Erweiterung

Seit vielen Versionen vorhanden

Struktur kann sich verandern

Wesentlich weitreichendere Informationen als iminformation schema

Anderungen konnen die Datenbank unbrauchbar werdenlassen!

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Systemtabellen

pg * Systemtabellen

pg tables: Listet alle Tabellen auf

pg views: Listet alle Views auf

pg attribute: Enthalt Informationen uber alleTabellenspalten

pg namespace: Enthalt Schemata

pg proc: Enthalt Funktionen

pg statistics: Enthalt Planer Statistiken

pg stat * und pg statio *: Views mit aufbereitetenStatistikdaten

...

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 47: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Systemtabellen

pg * Systemtabellen – Ubung

Herausfinden wie man alle Spalten einer Tabelle anzeigen kann

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Systemtabellen

pg * Systemtabellen – Losung

Beispiel (Alle Spalten einer Tabelle)

psql mit den Optionen -eE starten

\d <tabelle>

Ausgabe des Queries nutzen

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 48: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Was ist VACUUM?

VACUUM – ein Staubsauger?

Durch MVCC bleiben alte Daten nach Abschluss einerTransaktion in einer Tabelle zuruck

VACUUM gibt diesen Platz wieder frei

ANALYZE aktualisiert die Statistiken fur den Planer

Shortcut: VACUUM ANALYZE

Der Autovacuum Daemon kann die Arbeit automatisierterledigen

Neu in PG 8.3: HOT – Heap-Only-Tuples

quasi ein kleines Vacuum innerhalb des Blocks

Voraussetzung: kein Wert im Index wird geandert

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Was ist VACUUM?

HOT – Beispiele

Beispiel (Beispieltabelle fur HOT)

CREATE TABLE hot_test (id INTEGER PRIMARY KEY, daten TEXT);

INSERT INTO hot_test (id, daten) VALUES (1, ’Datensatz’);

Beispiel (HOT – Ja)

UPDATE hot_test SET daten = ’etwas anderes’;

Beispiel (HOT – Nein)

UPDATE hot_test SET id = 2;

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 49: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Autovacuum

VACUUM automatisiert

PostgreSQL besitzt einen eingebauten Daemon namensautovacuum

Dieser uberpruft regelmaßig alle Datenbanken und enthalteneTabellen

Die Zeit zwischen zwei Laufen wird mittelsautovacuum naptime eingestellt

Der Daemon selbst wird mittels autovacuum ein- undausgeschaltet

Einzelne Tabellen in einer Datenbank konnen uber diepg autovacuum Tabelle konfiguriert werden

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Autovacuum

Konfiguration – kostenbasiertes VACUUM

vacuum cost delay: Anzahl Millisekunden fur die Ruhephasedes VACUUM-Befehls, 0 zum Deaktivieren (Default)

vacuum cost page hit: erwartete Kosten fur das VACUUMeines Blocks, der sich im Shared RAM befindet (1)

vacuum cost page miss: erwartete Kosten fur das VACUUMeines Blocks auf der Festplatte (10)

vacuum cost page dirty: erwartete Kosten, wenn ein vorhersauberer Block geschrieben werden muss (20)

vacuum cost limit: Kostenlimit fur eine Runde (200)

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 50: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Autovacuum

Konfiguration – kostenbasiertes Auto-VACUUM

autovacuum und track counts mussen aktiviert sein

autovacuum max workers: Anzahl gleichzeitiger VACUUMProzesse (3)

autovacuum naptime: Zeit zwischen Beenden einer und demPrufen der nachsten Datenbank (1min)

autovacuum vacuum cost delay: Anzahl Millisekunden furdie Ruhepause. Der Wert -1 fuhrt zur Nutzung vonvacuum cost delay (20)

autovacuum vacuum cost limit: Kostenlimit fur eineRunde, wird uber alle aktiven Worker verteilt. -1 fuhrt zurNutzung von vacuum cost limit (-1)

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Autovacuum

Konfiguration – kostenbasiertes Auto-VACUUM

autovacuum vacuum threshold: Anzahl der notwendigengeanderten Tuples fur VACUUM (50)

autovacuum analyze threshold: Anzahl der notwendigengeanderten Tuples fur ANALYZE (50)

autovacuum vacuum scale factor: Prozentwert uber dieTabellengroße, der zu autovacuum vacuum thresholdaddiert wird (0.2 – 20%)

autovacuum analyze scale factor: Prozentwert uber dieTabellengroße, der zu autovacuum analyze thresholdaddiert wird (0.1 – 10%)

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 51: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Autovacuum

VACUUM – Ubung

Die Datenbank mittels VACUUM ANALYZE VERBOSE aufraumen

Auf die Ausgaben (am Ende) fur die Anzahl benotigterEintrage fur die Free-Space-Map achten

Hinweis: In PostgreSQL 8.4 sind die FSM Einstellungen entfallen.

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Wichtiger Termin

Wichtiger Termin

FrOSCon 2010

21./22. August 2010

St. Augustin (bei Bonn)

Webseite: http://www.froscon.de/

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 52: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Wichtiger Termin

Wichtiger Termin

PGDay 2010

irgendwann im 2. Halbjahr (wahrscheinlich Septemter)

irgendwo in den Niederlanden (wahrscheinlich Amsterdam)

Webseite: http://www.pgday.eu/

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

PostgreSQL Buch

PostgreSQL – Datenbankpraxisfur Anwender, Administratorenund Entwickler

Erschien im Juli 2009 imVerlag Open Source PressUmfang: ca. 520 Seiten

Andreas ’ads’ Scherbaum PostgreSQL optimieren

Page 53: PostgreSQL optimieren · INFO: free space map contains 1368 pages in 117 relations DETAIL: A total of 2912 page slots are in use (including overh ead). 2912 page slots are required

Intro Konfiguration Performance Transaktionen Informationen VACUUM Fragen & Antworten

Ende

http://andreas.scherbaum.la/

Fragen?

Andreas ’ads’ Scherbaum <[email protected]>PostgreSQL User Group GermanyEuropean PostgreSQL User Group

PostgreSQL Service & Support

Andreas ’ads’ Scherbaum PostgreSQL optimieren