SlideShare ist ein Scribd-Unternehmen logo
1 von 31
Downloaden Sie, um offline zu lesen
Die PostgreSQL Performance Schnelldiagnose
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
Performance Probleme diagnostizieren
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
Unser Ziel
Finden der h¨aufigsten Bottlenecks
L¨osen der wichtigsten Probleme
Viele Probleme k¨onnen mit wenigen Handgriffen gel¨ost
werden.
Diese Anleitung ist in keinster Weise vollst¨andig!
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
Langsame Abfragen
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
pg stat statements: Queries tracken
pg stat statements hilft, langsame Abfragen zu finden.
Eines der wichtigsten Module ¨uberhaupt
Sollte in jeder Database aktiviert sein
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
pg stat statements aktivieren
postgresql.conf editieren:
“‘bash shared preload libraries = ‘pg stat statements’ -
PostgreSQL muss neu gestartet werden
Die Extension installieren:
CREATE EXTENSION pg_stat_statements;
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
Wertvolle Information (1)
test=# d pg_stat_statements
View "public.pg_stat_statements"
Column | Type | Modifiers
---------------------+------------------+-----------
...
query | text |
calls | bigint |
total_time | double precision |
min_time | double precision |
max_time | double precision |
mean_time | double precision |
stddev_time | double precision |
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
Ausf¨uhrungszeiten
total time sagt uns, wieviel Zeit eine Art von Query in Summe
ben¨otigt hat.
Viele kurze Abfragen machen oft viel mehr Aufwand als
wenige große Queries.
Die Standardabweichung (stddev time) sagt, wie gleichm¨aßig
die Database antwortet.
Eine hohe Standardabweichung kann viele Ursachen haben:
Ungleiche Verteilung der Daten
Probleme im Zusammenhang mit Locking
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
Wertvolle Information (2)
rows | bigint |
shared_blks_hit | bigint |
shared_blks_read | bigint |
shared_blks_dirtied | bigint |
shared_blks_written | bigint |
local_blks_hit | bigint |
local_blks_read | bigint |
local_blks_dirtied | bigint |
local_blks_written | bigint |
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
Speichermanagement
*blkshit und *blksread k¨onnen zur Berechnung der Cache Hit
Rate verwendet werden.
Interessante Fragen:
Ist die Anzahl der Bl¨ocke pro Query sinnvoll?
Ist die Cache Hit Rate brauchbar?
Werden viele lokale Buffer verwendet?
Gibt eine Query unnat¨urlich viele Zeilen zur¨uck?
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
Wertvolle Information (3)
temp_blks_read | bigint |
temp_blks_written | bigint |
blk_read_time | double precision |
blk_write_time | double precision |
Hohe temp * Werte k¨onnen auf falsche work mem Settings
oder fehlende Indices hinweisen
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
I/O Timing
blk * time ist in den Default-Settings deaktiviert.
track io timing in postgresql.conf kann eingeschaltet werden.
Das Messen der Zeit kann etwas Overhead erzeugen.
Um diesen Overhead zu bestimmen, gibt es ein Tool names
pg test timing.
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
pg test timing
Ergebnisse zwischen 19 und 1400 ns
iMac:~ hs$ pg_test_timing
Testing timing overhead for 3 seconds.
Per loop time including overhead: 39.18 nsec
Histogram of timing durations:
< usec % of total count
1 96.14291 73610005
2 3.85010 2947759
4 0.00032 248
8 0.00012 92
16 0.00636 4866
32 0.00016 123
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
Relevanz erzeugen
pg stat statements sollte sortiert abgefragt werden.
Idealerweise immer im Context:
SELECT query, total_time, calls, sum(total_time) OVER ()
FROM pg_stat_statements
ORDER BY total_time DESC
LIMIT 20;
Ein Beispiel:
http://www.cybertec.at/2015/10/pg stat statements-the-
way-i-like-it/
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
Indexing . . .
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
Der ¨ubliche Bottleneck
Indices haben bei der Optimierung das gr¨oßte Potential
Indices sind oft der einfachste Weg, die Performance zu
verbessern
Nichts wird so oft vergessen wie ein Index
Nicht ist so “uncool” wie ein Index
Leute optimieren lieber RAID Level, Filesystem Settings,
Kernel Parameter, Speicher, etc.
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
Was passieren kann
Man stelle sich vor:
Wir haben eine Tabelle mit 60.000 Eintr¨agen
Es fehlt ein einziger Index
Wir haben 1.000 Requests / Sekunde
Das System liest 60.000.000 Zeilen vollkommen umsonst.
Liest Du gerne das ganze Telefonbuch, um eine einzige
Nummer zu finden?
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
Wie findet man das?
Fehlenden Indices kann auf die Spur gekommen werden:
Durch das Auffinden langsamer Statements in
pg stat statements
Durch geschicktes Auswerten von pg stat user tables
Oft sind die problematischen Spalten offensichtlich
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
Die wichtigste Query
Die wichtigste Query eures Lebens:
SELECT schemaname, relname, seq_scan, seq_tup_read,
idx_scan, seq_tup_read / seq_scan AS avg
FROM pg_stat_user_tables
WHERE seq_scan > 0
ORDER BY seq_tup_read DESC
LIMIT 25;
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
Interpretation der Daten
Wieso liest jemand 5 Millionen Zeilen 5 Millionen mal?
Im “Problemfall” sieht man in seq tup read so etwas wie
einen “Hockeystick”
Es wird immer Sequential Scans geben
Viele teure Scans sind das Problem
Die Daten sind alle da
Oft werden die Daten ignoriert oder falsch interpretiert
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
Zu viele Indexes (1)
Auch zu viele Indexes sind ein Problem
pg stat user indexes hilft bei der Diagnose:
test=# d pg_stat_user_indexes
View "pg_catalog.pg_stat_user_indexes"
Column | Type | Modifiers
---------------+--------+-----------
schemaname | name |
relname | name |
indexrelname | name |
idx_scan | bigint |
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
Zu viele Indexes (2)
Zu viele Indexes sind viel “subtiler” als fehlende Indexes
Bedenke: Schreibzugriffe m¨ussen auch die Indexes updaten
Indexes f¨uhren sehr oft zu Random I/O
Random I/O ist teuer
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
Typische Probleme mit Abfragen
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
LIKE: Der klassische Killer
LIKE Abfragen f¨uhren in vielen Anwendungen zu Sequential
Scans
Abfragen k¨onnen sehr leicht beschleunigt werden:
CREATE EXTENSION pg_trgm;
CREATE INDEX idx ON tab USING gist (spalte gist_trgm_ops);
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
UNION vs. UNION ALL
SELECT 1 AS n UNION ALL SELECT 1;
n
---
1
1
(2 rows)
test=# SELECT 1 AS n UNION SELECT 1;
n
---
1
(1 row)
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
Semantische Fehler
Meistens ist es ein semantisches Problem, das als Performance
Problem daher kommt.
Bedenke: UNION filtert doppelte Eintr¨age.
Beachte: Kann es ¨uberhaupt doppelte Eintr¨age geben?
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
I/O Performance
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
Schreibperformance
Wer kennt diese Meldung?
checkpoints are occurring too frequently (%d second apart)
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
Checkpoints
Checkpoints sind teuer
Die Default Distanz zwischen zwei Checkpoints ist sehr sehr
niedrig
H¨ohere Checkpoint Distanzen beschleunigen Schreibzugriffe
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
Finally . . .
Hans-J¨urgen Sch¨onig
www.postgresql-support.de
Contact us . . .
Cybertec Sch¨onig & Sch¨onig GmbH
Gr¨ohrm¨uhlgasse 26
A-2700 Wiener Neustadt Austria
More than 15 years of PostgreSQL experience:
Training
Consulting
24x7 support
Hans-J¨urgen Sch¨onig
www.postgresql-support.de

Weitere ähnliche Inhalte

Ähnlich wie 5min analyse

Angelika Gallwitz – IT-Tage 2015 – Statistische Auswertungen in Oracle mit S...
Angelika Gallwitz  – IT-Tage 2015 – Statistische Auswertungen in Oracle mit S...Angelika Gallwitz  – IT-Tage 2015 – Statistische Auswertungen in Oracle mit S...
Angelika Gallwitz – IT-Tage 2015 – Statistische Auswertungen in Oracle mit S...Informatik Aktuell
 
nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins
nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins
nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins Christian Kauhaus
 
Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...
Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...
Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...Informatik Aktuell
 
JMeter + ELK - Event-basierte Daten != Logfiles in ELK
JMeter + ELK - Event-basierte Daten != Logfiles in ELKJMeter + ELK - Event-basierte Daten != Logfiles in ELK
JMeter + ELK - Event-basierte Daten != Logfiles in ELKinovex GmbH
 
OSMC 2014: Monitoring von Netzwerkkomponenten mit check_nwc_health | Gerhard ...
OSMC 2014: Monitoring von Netzwerkkomponenten mit check_nwc_health | Gerhard ...OSMC 2014: Monitoring von Netzwerkkomponenten mit check_nwc_health | Gerhard ...
OSMC 2014: Monitoring von Netzwerkkomponenten mit check_nwc_health | Gerhard ...NETWAYS
 
Oracle workshop sessiontracing
Oracle workshop sessiontracingOracle workshop sessiontracing
Oracle workshop sessiontracingciganek
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptSebastian Springer
 
OSMC 2014: Plugin Entwicklung für Einsteiger | Alexander Wirt
OSMC 2014: Plugin Entwicklung für Einsteiger | Alexander WirtOSMC 2014: Plugin Entwicklung für Einsteiger | Alexander Wirt
OSMC 2014: Plugin Entwicklung für Einsteiger | Alexander WirtNETWAYS
 
Differenzial Analyse in der Praxis (Florian Walther)
Differenzial Analyse in der Praxis (Florian Walther)Differenzial Analyse in der Praxis (Florian Walther)
Differenzial Analyse in der Praxis (Florian Walther)GEEKcon
 
Markus Winand – IT-Tage 2015 – Den Suchraum des Optimizers gestalten
Markus Winand – IT-Tage 2015 – Den Suchraum des Optimizers gestaltenMarkus Winand – IT-Tage 2015 – Den Suchraum des Optimizers gestalten
Markus Winand – IT-Tage 2015 – Den Suchraum des Optimizers gestaltenInformatik Aktuell
 
Python in Computational Neuroscience & Modular toolkit for Data Processing (MDP)
Python in Computational Neuroscience & Modular toolkit for Data Processing (MDP)Python in Computational Neuroscience & Modular toolkit for Data Processing (MDP)
Python in Computational Neuroscience & Modular toolkit for Data Processing (MDP)nwilbert
 
Oracle Performance-Analyse mit frei verfügbaren Mitteln
Oracle Performance-Analyse mit frei verfügbaren Mitteln Oracle Performance-Analyse mit frei verfügbaren Mitteln
Oracle Performance-Analyse mit frei verfügbaren Mitteln OPITZ CONSULTING Deutschland
 
bccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-admins
bccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-adminsbccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-admins
bccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-adminsICS User Group
 
Tipps und Skripts aus dem Leben eines Connections Admins
Tipps und Skripts aus dem Leben eines Connections AdminsTipps und Skripts aus dem Leben eines Connections Admins
Tipps und Skripts aus dem Leben eines Connections AdminsKlaus Bild
 
OSMC 2008 | Monitoring Microsoft SQL Server by Michael Streb
OSMC 2008 | Monitoring Microsoft SQL Server by Michael StrebOSMC 2008 | Monitoring Microsoft SQL Server by Michael Streb
OSMC 2008 | Monitoring Microsoft SQL Server by Michael StrebNETWAYS
 
Java Streams und Lambdas
Java Streams und LambdasJava Streams und Lambdas
Java Streams und LambdasNane Kratzke
 
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?Marc Müller
 
Agile Planung (Vortrag beim QS-Tag 2014 in Nürnberg)
Agile Planung (Vortrag beim QS-Tag 2014 in Nürnberg)Agile Planung (Vortrag beim QS-Tag 2014 in Nürnberg)
Agile Planung (Vortrag beim QS-Tag 2014 in Nürnberg)Stefan ROOCK
 

Ähnlich wie 5min analyse (20)

Angelika Gallwitz – IT-Tage 2015 – Statistische Auswertungen in Oracle mit S...
Angelika Gallwitz  – IT-Tage 2015 – Statistische Auswertungen in Oracle mit S...Angelika Gallwitz  – IT-Tage 2015 – Statistische Auswertungen in Oracle mit S...
Angelika Gallwitz – IT-Tage 2015 – Statistische Auswertungen in Oracle mit S...
 
nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins
nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins
nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins
 
Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...
Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...
Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...
 
JMeter + ELK - Event-basierte Daten != Logfiles in ELK
JMeter + ELK - Event-basierte Daten != Logfiles in ELKJMeter + ELK - Event-basierte Daten != Logfiles in ELK
JMeter + ELK - Event-basierte Daten != Logfiles in ELK
 
Digicomp sqlday admin
Digicomp sqlday adminDigicomp sqlday admin
Digicomp sqlday admin
 
OSMC 2014: Monitoring von Netzwerkkomponenten mit check_nwc_health | Gerhard ...
OSMC 2014: Monitoring von Netzwerkkomponenten mit check_nwc_health | Gerhard ...OSMC 2014: Monitoring von Netzwerkkomponenten mit check_nwc_health | Gerhard ...
OSMC 2014: Monitoring von Netzwerkkomponenten mit check_nwc_health | Gerhard ...
 
Oracle workshop sessiontracing
Oracle workshop sessiontracingOracle workshop sessiontracing
Oracle workshop sessiontracing
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScript
 
OSMC 2014: Plugin Entwicklung für Einsteiger | Alexander Wirt
OSMC 2014: Plugin Entwicklung für Einsteiger | Alexander WirtOSMC 2014: Plugin Entwicklung für Einsteiger | Alexander Wirt
OSMC 2014: Plugin Entwicklung für Einsteiger | Alexander Wirt
 
Differenzial Analyse in der Praxis (Florian Walther)
Differenzial Analyse in der Praxis (Florian Walther)Differenzial Analyse in der Praxis (Florian Walther)
Differenzial Analyse in der Praxis (Florian Walther)
 
Markus Winand – IT-Tage 2015 – Den Suchraum des Optimizers gestalten
Markus Winand – IT-Tage 2015 – Den Suchraum des Optimizers gestaltenMarkus Winand – IT-Tage 2015 – Den Suchraum des Optimizers gestalten
Markus Winand – IT-Tage 2015 – Den Suchraum des Optimizers gestalten
 
Python in Computational Neuroscience & Modular toolkit for Data Processing (MDP)
Python in Computational Neuroscience & Modular toolkit for Data Processing (MDP)Python in Computational Neuroscience & Modular toolkit for Data Processing (MDP)
Python in Computational Neuroscience & Modular toolkit for Data Processing (MDP)
 
Oracle Performance-Analyse mit frei verfügbaren Mitteln
Oracle Performance-Analyse mit frei verfügbaren Mitteln Oracle Performance-Analyse mit frei verfügbaren Mitteln
Oracle Performance-Analyse mit frei verfügbaren Mitteln
 
bccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-admins
bccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-adminsbccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-admins
bccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-admins
 
Tipps und Skripts aus dem Leben eines Connections Admins
Tipps und Skripts aus dem Leben eines Connections AdminsTipps und Skripts aus dem Leben eines Connections Admins
Tipps und Skripts aus dem Leben eines Connections Admins
 
OSMC 2008 | Monitoring Microsoft SQL Server by Michael Streb
OSMC 2008 | Monitoring Microsoft SQL Server by Michael StrebOSMC 2008 | Monitoring Microsoft SQL Server by Michael Streb
OSMC 2008 | Monitoring Microsoft SQL Server by Michael Streb
 
Java Streams und Lambdas
Java Streams und LambdasJava Streams und Lambdas
Java Streams und Lambdas
 
Microbenchmarks - Wer nicht weiß, was er misst misst Mist
Microbenchmarks - Wer nicht weiß, was er misst misst MistMicrobenchmarks - Wer nicht weiß, was er misst misst Mist
Microbenchmarks - Wer nicht weiß, was er misst misst Mist
 
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
 
Agile Planung (Vortrag beim QS-Tag 2014 in Nürnberg)
Agile Planung (Vortrag beim QS-Tag 2014 in Nürnberg)Agile Planung (Vortrag beim QS-Tag 2014 in Nürnberg)
Agile Planung (Vortrag beim QS-Tag 2014 in Nürnberg)
 

5min analyse

  • 1. Die PostgreSQL Performance Schnelldiagnose Hans-J¨urgen Sch¨onig www.postgresql-support.de Hans-J¨urgen Sch¨onig www.postgresql-support.de
  • 2. Performance Probleme diagnostizieren Hans-J¨urgen Sch¨onig www.postgresql-support.de
  • 3. Unser Ziel Finden der h¨aufigsten Bottlenecks L¨osen der wichtigsten Probleme Viele Probleme k¨onnen mit wenigen Handgriffen gel¨ost werden. Diese Anleitung ist in keinster Weise vollst¨andig! Hans-J¨urgen Sch¨onig www.postgresql-support.de
  • 5. pg stat statements: Queries tracken pg stat statements hilft, langsame Abfragen zu finden. Eines der wichtigsten Module ¨uberhaupt Sollte in jeder Database aktiviert sein Hans-J¨urgen Sch¨onig www.postgresql-support.de
  • 6. pg stat statements aktivieren postgresql.conf editieren: “‘bash shared preload libraries = ‘pg stat statements’ - PostgreSQL muss neu gestartet werden Die Extension installieren: CREATE EXTENSION pg_stat_statements; Hans-J¨urgen Sch¨onig www.postgresql-support.de
  • 7. Wertvolle Information (1) test=# d pg_stat_statements View "public.pg_stat_statements" Column | Type | Modifiers ---------------------+------------------+----------- ... query | text | calls | bigint | total_time | double precision | min_time | double precision | max_time | double precision | mean_time | double precision | stddev_time | double precision | Hans-J¨urgen Sch¨onig www.postgresql-support.de
  • 8. Ausf¨uhrungszeiten total time sagt uns, wieviel Zeit eine Art von Query in Summe ben¨otigt hat. Viele kurze Abfragen machen oft viel mehr Aufwand als wenige große Queries. Die Standardabweichung (stddev time) sagt, wie gleichm¨aßig die Database antwortet. Eine hohe Standardabweichung kann viele Ursachen haben: Ungleiche Verteilung der Daten Probleme im Zusammenhang mit Locking Hans-J¨urgen Sch¨onig www.postgresql-support.de
  • 9. Wertvolle Information (2) rows | bigint | shared_blks_hit | bigint | shared_blks_read | bigint | shared_blks_dirtied | bigint | shared_blks_written | bigint | local_blks_hit | bigint | local_blks_read | bigint | local_blks_dirtied | bigint | local_blks_written | bigint | Hans-J¨urgen Sch¨onig www.postgresql-support.de
  • 10. Speichermanagement *blkshit und *blksread k¨onnen zur Berechnung der Cache Hit Rate verwendet werden. Interessante Fragen: Ist die Anzahl der Bl¨ocke pro Query sinnvoll? Ist die Cache Hit Rate brauchbar? Werden viele lokale Buffer verwendet? Gibt eine Query unnat¨urlich viele Zeilen zur¨uck? Hans-J¨urgen Sch¨onig www.postgresql-support.de
  • 11. Wertvolle Information (3) temp_blks_read | bigint | temp_blks_written | bigint | blk_read_time | double precision | blk_write_time | double precision | Hohe temp * Werte k¨onnen auf falsche work mem Settings oder fehlende Indices hinweisen Hans-J¨urgen Sch¨onig www.postgresql-support.de
  • 12. I/O Timing blk * time ist in den Default-Settings deaktiviert. track io timing in postgresql.conf kann eingeschaltet werden. Das Messen der Zeit kann etwas Overhead erzeugen. Um diesen Overhead zu bestimmen, gibt es ein Tool names pg test timing. Hans-J¨urgen Sch¨onig www.postgresql-support.de
  • 13. pg test timing Ergebnisse zwischen 19 und 1400 ns iMac:~ hs$ pg_test_timing Testing timing overhead for 3 seconds. Per loop time including overhead: 39.18 nsec Histogram of timing durations: < usec % of total count 1 96.14291 73610005 2 3.85010 2947759 4 0.00032 248 8 0.00012 92 16 0.00636 4866 32 0.00016 123 Hans-J¨urgen Sch¨onig www.postgresql-support.de
  • 14. Relevanz erzeugen pg stat statements sollte sortiert abgefragt werden. Idealerweise immer im Context: SELECT query, total_time, calls, sum(total_time) OVER () FROM pg_stat_statements ORDER BY total_time DESC LIMIT 20; Ein Beispiel: http://www.cybertec.at/2015/10/pg stat statements-the- way-i-like-it/ Hans-J¨urgen Sch¨onig www.postgresql-support.de
  • 15. Indexing . . . Hans-J¨urgen Sch¨onig www.postgresql-support.de
  • 16. Der ¨ubliche Bottleneck Indices haben bei der Optimierung das gr¨oßte Potential Indices sind oft der einfachste Weg, die Performance zu verbessern Nichts wird so oft vergessen wie ein Index Nicht ist so “uncool” wie ein Index Leute optimieren lieber RAID Level, Filesystem Settings, Kernel Parameter, Speicher, etc. Hans-J¨urgen Sch¨onig www.postgresql-support.de
  • 17. Was passieren kann Man stelle sich vor: Wir haben eine Tabelle mit 60.000 Eintr¨agen Es fehlt ein einziger Index Wir haben 1.000 Requests / Sekunde Das System liest 60.000.000 Zeilen vollkommen umsonst. Liest Du gerne das ganze Telefonbuch, um eine einzige Nummer zu finden? Hans-J¨urgen Sch¨onig www.postgresql-support.de
  • 18. Wie findet man das? Fehlenden Indices kann auf die Spur gekommen werden: Durch das Auffinden langsamer Statements in pg stat statements Durch geschicktes Auswerten von pg stat user tables Oft sind die problematischen Spalten offensichtlich Hans-J¨urgen Sch¨onig www.postgresql-support.de
  • 19. Die wichtigste Query Die wichtigste Query eures Lebens: SELECT schemaname, relname, seq_scan, seq_tup_read, idx_scan, seq_tup_read / seq_scan AS avg FROM pg_stat_user_tables WHERE seq_scan > 0 ORDER BY seq_tup_read DESC LIMIT 25; Hans-J¨urgen Sch¨onig www.postgresql-support.de
  • 20. Interpretation der Daten Wieso liest jemand 5 Millionen Zeilen 5 Millionen mal? Im “Problemfall” sieht man in seq tup read so etwas wie einen “Hockeystick” Es wird immer Sequential Scans geben Viele teure Scans sind das Problem Die Daten sind alle da Oft werden die Daten ignoriert oder falsch interpretiert Hans-J¨urgen Sch¨onig www.postgresql-support.de
  • 21. Zu viele Indexes (1) Auch zu viele Indexes sind ein Problem pg stat user indexes hilft bei der Diagnose: test=# d pg_stat_user_indexes View "pg_catalog.pg_stat_user_indexes" Column | Type | Modifiers ---------------+--------+----------- schemaname | name | relname | name | indexrelname | name | idx_scan | bigint | Hans-J¨urgen Sch¨onig www.postgresql-support.de
  • 22. Zu viele Indexes (2) Zu viele Indexes sind viel “subtiler” als fehlende Indexes Bedenke: Schreibzugriffe m¨ussen auch die Indexes updaten Indexes f¨uhren sehr oft zu Random I/O Random I/O ist teuer Hans-J¨urgen Sch¨onig www.postgresql-support.de
  • 23. Typische Probleme mit Abfragen Hans-J¨urgen Sch¨onig www.postgresql-support.de
  • 24. LIKE: Der klassische Killer LIKE Abfragen f¨uhren in vielen Anwendungen zu Sequential Scans Abfragen k¨onnen sehr leicht beschleunigt werden: CREATE EXTENSION pg_trgm; CREATE INDEX idx ON tab USING gist (spalte gist_trgm_ops); Hans-J¨urgen Sch¨onig www.postgresql-support.de
  • 25. UNION vs. UNION ALL SELECT 1 AS n UNION ALL SELECT 1; n --- 1 1 (2 rows) test=# SELECT 1 AS n UNION SELECT 1; n --- 1 (1 row) Hans-J¨urgen Sch¨onig www.postgresql-support.de
  • 26. Semantische Fehler Meistens ist es ein semantisches Problem, das als Performance Problem daher kommt. Bedenke: UNION filtert doppelte Eintr¨age. Beachte: Kann es ¨uberhaupt doppelte Eintr¨age geben? Hans-J¨urgen Sch¨onig www.postgresql-support.de
  • 28. Schreibperformance Wer kennt diese Meldung? checkpoints are occurring too frequently (%d second apart) Hans-J¨urgen Sch¨onig www.postgresql-support.de
  • 29. Checkpoints Checkpoints sind teuer Die Default Distanz zwischen zwei Checkpoints ist sehr sehr niedrig H¨ohere Checkpoint Distanzen beschleunigen Schreibzugriffe Hans-J¨urgen Sch¨onig www.postgresql-support.de
  • 30. Finally . . . Hans-J¨urgen Sch¨onig www.postgresql-support.de
  • 31. Contact us . . . Cybertec Sch¨onig & Sch¨onig GmbH Gr¨ohrm¨uhlgasse 26 A-2700 Wiener Neustadt Austria More than 15 years of PostgreSQL experience: Training Consulting 24x7 support Hans-J¨urgen Sch¨onig www.postgresql-support.de