PostgreSQL auf vielen CPUs. Hans-Jürgen Schönig Hans-Jürgen Schönig

Ähnliche Dokumente
Explain verstehen. Hans-Jürgen Schönig.

Die PostgreSQL Performance Schnelldiagnose

Performance Probleme aufspüren

ANFRAGEOPTIMIERUNG IN POSTGRESQL

Indexing und Performance Tuning

Tuning von PostGIS mit Read- Only-Daten von OpenStreetMap

PostgreSQL in großen Installationen

PostgreSQL im Cluster. Hans-Jürgen Schönig Hans-Jürgen Schönig

PostgreSQL Ein Überblick

MySQL Performance Tuning für Entwickler

Eine Reise durch den PostgreSQL Optimizer

Performance in der Oracle Datenbank von Anfang an

Migration von Oracle zu PostgreSQL

Datenbanken Implementierungstechniken SS2015

Parallel Computing. Einsatzmöglichkeiten und Grenzen. Prof. Dr. Nikolaus Wulff

Typo3 & QFQ. Carsten Rose, I-MATH, University of Zurich, 2017

SQL-Analyse und Tuning

MySQL Performance Tuning für Entwickler

Anfrageoptimierung Ausführungspläne, Hints, Statistikinformationen, IDEs

Need for Speed: Indexierung unter MySQL

Gliederung. 1) Speicherplatz-Zuordnung und -Verwaltung 2) Indizes 3) Explain Plan 4) Join-Operationen 5) Der Optimizer 6) Parallelisieren

Berechnung von Kennzahlen mit der SQL Model Clause

Oracle 12cR1 In-Memory Real World POC and what s coming up with 12cR2 Christian Pfundtner DB Masters GmbH Stammersdorfer Str Gerasdorf

Performance Tuning mit Oracle 12c

Cilk Sprache für Parallelprogrammierung. IPD Snelting, Lehrstuhl für Programmierparadigmen

Dynamic Ressource Management

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Oracle Indexing Primer

PostgreSQL & Performance: Eine Landvermessung REDUX. Michael Renner. Metalab 22. September 2009

Partitionieren über Rechnergrenzen hinweg

Die IBM Netezza Architektur für fortgeschrittene Analysen

Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - SS Metadaten

SAP Business Information Warehouse mit Oracle Database

Oracle 9i Einführung. Performance Tuning. Kurs. Teil 10 Stored Outlines. Universität Hannover. Eigenschaften. Migration. Erstellen mit OEM.

5.8 Bibliotheken für PostgreSQL

Oracle 9i Einführung Performance Tuning

Microsoft Azure Deutschland ist jetzt verfügbar -

3 Query Language (QL) Einfachste Abfrage Ordnen Gruppieren... 7

Client - Server Architektur

Aggregatfunktionen in SQL

CAS coole Arbeitsumgebung für SAS Programme

Parallel Computing. Einsatzmöglichkeiten und Grenzen. Prof. Dr. Nikolaus Wulff

Dokumentenorientierte Datenbanken - MongoDB

4. Aufgabenblatt - Auswertung -

Lösen Sie (fast) alle ihre Probleme mit Oracle Advanced Queuing. Performance Lastverteilung

Zugriff aus Oracle via Proc SQL: Performanceprobleme

Migration von Oracle auf HANA Was bedeutet das? Peter Heintzen, Bereichsleiter SIG Oracle & SAP

Backup und Restore von Optimizer Statistiken. Peter Stalder

OpenCL. Programmiersprachen im Multicore-Zeitalter. Tim Wiersdörfer

DOAG Konferenz Was Sie bei modernen Datenbank-Systemen anders machen müssen!

Seminar 2. SQL - DML(Data Manipulation Language) und. DDL(Data Definition Language) Befehle.

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Performance Verbesserung BIRT-BERICHTE

Oracle native json Support. Erste Schritte

MySQL New Features 5.6

Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - WS Metadaten. Andreas Schmidt Metadaten 1/17

Neue Features Oracle Database 12.2 Wann denn endlich?

1 Einführung Ziele der Vorlesung Die Idee Lernkarte Selbsttest-Frage 3 Literaturhinweise 3

Oracle 11g Release 2: Änderungen unter der Haube. Dierk Lenz DOAG 2011 Konferenz und Ausstellung 16. November 2011

PostgreSQL High-Security

Optimiertes Laden in die F-Fakten-Tabelle des SAP BW

Milliarden in Sekunden: Demo zu PureData for Analytics. Marc Bastien Senior Technical Professional Big Data, IBM

Developing SQL Databases MOC 20762

IBM Informix Newsletter Ausgabe Februar 2016

Oracle Database 12c In-Memory Option 7/18/2014. Eckart Mader Oracle Deutschland B.V. & Co. KG. Karlsruhe, den

PostgreSQL Wartungsstrategien

Seminar: Multi-Core Architectures and Programming

Parallelisierung. Grundlagen und Nutzung. Stefan Seck Solution Engineer Inforsacom Logicalis GmbH. Düsseldorf,

Antwort auf QB ist Menge von Tupeln, i-e. selbst wieder Relation (wie bei rel. Algebra) in QB "Zugriff" auf Tupel mit Tupel-Variablen

RavenDB, schnell und skalierbar

Oracle OLAP 11g: Performance für das Oracle Data Warehouse

MapReduce. Julia Bergbauer - Ferienakademie 2009

SQL Optimizer und SQL Performance

Warum wird mein Index nicht benutzt?

SQL Tipps und Tricks Part II

Urs Meier Art der Info Technical Info (Februar 2002) Aus unserer Projekterfahrung und Forschung

2 Rechnerarchitekturen

Erfahrungen aus dem Betatest Oracle Database 11g

Foreign Data Wrappers

Cassandra Query Language (CQL)

Funktionen. Überblick über Stored Functions. Syntax zum Schreiben einer Funktion. Schreiben einer Funktion

SQL structured query language

Installation/setup notes

Roadshow - What s new in SQL Server 2016

CLR-Integration im SQL-Server. Alexander Karl

select DISTINCT Name, ort From Verkauf; selektiert Name und Ort von Tabelle Verkauf - DISTINCT steht dass keine Zeile mehrfach vorkommt

Einige Grundlagen zu OpenMP

samrestore - restore your SAM-FS files

MySQL Replikation. Erkan Yanar linsenraum.de linsenraum.de

Java Forum Stuttgart 2013 twitter.com/kspichale spichale.blogspot.de

Grundlagen von SQL. Informatik 2, FS18. Dr. Hermann Lehner (Material von Dr. Markus Dahinden) Departement Informatik, ETH Zürich

Skalierbare Webanwendungen

5/14/18. Grundlagen von SQL. Grundlagen von SQL. Google, Facebook und Co. setzen auf SQL. Whatsapp

Oracle 9i Einführung. Performance Tuning. Kurs. Teil 12 Materialized Views. Universität Hannover. Praxisbeispiel. Migration.

Chancen und Wachstumsfelder für PostgreSQL

Einleitung. Komplexe Anfragen. Suche ist teuer. VA-File Verfeinerungen. A0-Algo. GeVAS. Schluß. Folie 2. Einleitung. Suche ist teuer.

Cnlab/CSI Herbsttagung Apps und Sandboxen

Cnlab/CSI Herbstveranstaltung Apps und Sandboxen

Memory-Drilldown von der SGA über die PGA zum Database Buffer Advisor

Transkript:

PostgreSQL auf vielen CPUs

Ansätze zur Skalierung

PostgreSQL auf einer CPU Traditionell läuft eine Query auf nur einer CPU Historisch gesehen war das kein Problem Mittlerweile ist das ein großes Problem Anzahl der Cores steigt stärker als die Taktfrequenz

Hard facts Zwischen 1996 und 2004 ist die Single-Thread Performance bei SPECint und SPECfp Benchmarks um >50% Pro Jahr gestiegen. Zwischen 2004 und 2012: ~21% pro Jahr.

Skalierung auf viele CPUs Ziel ist die Skalierung einer Abfrage auf viele CPUs Herausforderungen: Lineare Skalierung Transparenz

Die Grenzen der Skalierung Wie gut kann die folgende Berechnung parallelisiert werden?: 1 + 2 + 3 + 4 1 Thread: 3 Schritte Optimum: 2 Schnitte Parallelisierung ist nicht unendlich

Verschiedene Ansätze Historisch: PL/Proxy PostgreSQL 9.5: Cybertec agg ab PostgreSQL 9.6: Core Support

PL/Proxy (1) PL/Proxy ist eine Sprache für Stored Procedures, die nur dazu dient, die Abfrage zu verteilen Einfacher Sharding Ansatz mittels Stored Procedures

PL/Proxy (2) Ein Beispiel: SELECT * FROM freunde('hans'); PL/Proxy hasht (üblicherweise) den Input Wert und berechnet daraus den Shard Die Query wird am Shard ausgeführt

PL/Proxy (3) PL/Proxy erlaubt auch Parallelisierung: SELECT sum(anzahl) FROM freunde(); PL/Proxy liefert Teilsummen, um die man sich selbst kümmern muss. PL/Proxy ist eher a thing of the past

Cybertec agg (1) Agg läuft speziell auf PostgreSQL 9.5 und bildet die Workload einiger spezieller Kunden exakt ab. Es wird vermutlich keine Version für 9.6 geben Das Modul wird via shared_preload_libraries geladen

Cybertec agg (2) Was tut agg? Es gibt in PostgreSQL zwei wichtige Schnittstellen: Customer Worker Processes Custom Plan API agg hängt sich zwischen Optimizer und Executor und verändert den Execution Plan

Cybertec agg (3) Einfache Aggregate werden auf mehrere Worker Prozesse verteilt Teilmengen werden wieder zusammen geführt Es geht primär um Aggregate auf große Fact Tables Die Builtin-Aggregate müssen komplett ersetzt werden

PostgreSQL 9.6 and beyond

In Core Support Multi-Core Support ist eine Menge Arbeit Man hat über Jahre die entsprechende Infrastruktur geschaffen Dynamische Worker Prozesse (9.4) Dynamischer Shared Memory (9.4) Shared Memory Message Queues (9.4) Error Propagation (9.5) Vieles mehr... 9.6 ist die erste Version, die eine Query auf viele Cores nativ verteilen kann.

Die Demo Daten 100 Millionen Zeilen 3 Verschiedene Namen 4.2 GB Daten, voll gecacht test=# \d t_small Table "public.t_small" Column Type Modifiers --------+---------+----------- id integer name text

Feature: Parallel Sequential Scans Viele Worker Prozesse können an einem Sequential Scan arbeiten Das ist speziell bei komplexen Filtern praktisch Ein Beispiel: test=# SELECT * FROM t_small WHERE cos(id) = 0; id name ----+------ (0 rows) Time: 14267.196 ms

Parallelität erhöhen test=# SET max_parallel_degree TO 4; SET test=# SELECT * FROM t_small WHERE cos(id) = 0; id name ----+------ (0 rows) Time: 4032.927 ms

Gather nodes explain SELECT * FROM t_small WHERE cos(id) = 0; QUERY PLAN -------------------------------------------------------- Gather (cost=1000.00..1029041.04 rows=500000 width=9) Workers Planned: 4 -> Parallel Seq Scan on t_small (cost=0.00..979291.04 rows=125000 width=9) Filter: (cos((id)::double) = '0'::double) (4 rows)

Feature: Parallel Aggreation (1) explain SELECT count(*) FROM t_small WHERE cos(id) = 0; QUERY PLAN -------------------------------------------------------- Finalize Aggregate (cost=979353.96..979353.97 rows=1) -> Gather (cost=979353.54..979353.95 rows=4 width=8) Workers Planned: 4 -> Partial Aggregate (... ) -> Parallel Seq Scan on t_small (... ) Filter: (cos((id)::double) = '0'::double) (6 rows)

Feature: Parallel Aggreation (2) explain SELECT name, count(*) FROM t_small WHERE cos(id) = 0 GROUP BY name; --------------------------------------------------------- Finalize GroupAggregate (... rows=3...) Group Key: name -> Sort (... rows=12...) Sort Key: name -> Gather (... rows=12...) Workers Planned: 4 -> Partial HashAggregate (... rows=3...) Group Key: name -> Parallel Seq Scan on t_small (... ) Filter: (cos((id)::double) = '0'::double)

Entscheidungsfindung im Optimizer #seq_page_cost = 1.0 #random_page_cost = 4.0 #cpu_tuple_cost = 0.01 #cpu_index_tuple_cost = 0.005 #cpu_operator_cost = 0.0025 #parallel_tuple_cost = 0.1 #parallel_setup_cost = 1000.0

Eigene Stored Procedures Um zu parallelisieren, muss eine Funktion korrekt markiert sein: PARALLEL UNSAFE: Erzwingt serielle Ausführung RESTRICTED: Parallelität ist möglich aber die Funktion darf nur vom Gruppen Leader ausgeführt werden. SAFE: Volle Parallelisierung ist möglich UNSAFE ist der Default Wert

Ausblick Volle Parallelisierung ist noch viel Arbeit Die Infrastruktur für viele Dinge ist vorhanden End User müssen sich noch überlegen, wie Queries geschrieben werden

Ein Beispiel test=# explain analyze SELECT name, count(*) FROM t_small GROUP BY name; Time: 5757.218 ms test=# explain analyze SELECT name, count(*) FROM t_small GROUP BY ROLLUP (name); Time: 94873.436 ms

Thank you for your attention Cybertec Schönig & Schönig GmbH Gröhrmühlgasse 26 A-2700 Wiener Neustadt