This talk describes how somebody can write his or her own PostgreSQL custom aggregation functions.
Hans also shows, how to run windowing functions and analytics to handle data in PostgreSQL.
In PostgreSQL kann man sich mit "explain" ansehen, welchen Execution Plan PostgreSQL für eine Query verwendet. Das hilft beim Suchen von Performance Problemen und hilft, den Durchsatz der Database zu steigern.
Performance Tuning muss in PostgreSQL nicht schwer sein. Oft reichen einige einfache Veränderung, um die Datenbank massiv zu beschleunigen.
VIele Performance Probleme sind einfach zu lösen. Diese Präsentation zeigt die gängigsten Methoden, um einfache Probleme schnell und effizient zu beseitigen
Markus Winand – IT-Tage 2015 – Den Suchraum des Optimizers gestaltenInformatik Aktuell
Auf seiner Suche nach dem optimalen Ausführungsplan ist der Optimizer in einen Käfig gesperrt, der von den SQL-Abfragen und dem physischen Datenbank-Design vorgegeben ist. Per Definition kann der Optimizer nur den besten Ausführungsplan innerhalb dieses Käfigs finden – auch wenn außerhalb bessere Ausführungspläne sind. In diesem Vortrag werden wir sehen, wie Indizierung diesen Käfig beeinflusst und lernen, wie man durch kluge Indizierung den Käfig so gestaltet, dass der absolut beste Ausführungsplan in der Reichweite des Optimizers liegt.
nagiosplugin - eine Python-Bibliothek für Monitoring-Plugins Christian Kauhaus
Auch wenn in der letzten Zeit sehr viel Bewegung in die Monitoring-Szene gekommen ist (#monitoringsucks etc.), werden die Platzhirsche Nagios/Icinga und ihre Standards auf absehbare Zeit nicht verschwinden. Das Nagios-Plugin-API stellt eine sehr weit verbreitete Schnittstelle zur Anbindung einzelner Checks an Monitoring-Systeme dar. Obwohl das API in den Grundzügen sehr einfach ist, ist der Programmieraufwand für vollständig konforme Plugins erstaunlich hoch.
Die nagiosplugin-Bibliothek nimmt dem Entwickler viele Details ab, so dass er sich auf den Inhalt seiner Checks konzentrieren kann. Der Vortrag führt in das Schreiben von Nagios-kompatiblen Plugins ein, zeigt den typischen Aufbau von Nagios-Plugins und das Grundprinzip eigener Plugins. Die Konfiguration und der Betrieb von Monitoring-Systemen im Großen sollen nicht thematisiert werden.
Video: http://pyvideo.org/video/1460/nagiosplugin-eine-python-bibliothek-fur-monitor
Konferenzseite: https://2012.de.pycon.org/programm/schedule/sessions/45/
Projekt-Homepage: https://projects.gocept.com/projects/nagiosplugin/wiki
OSMC 2008 | Nagios & OTRS Integration by Jens BotheNETWAYS
Der Workshop beschäftigt sich damit Nagiosmeldungen im OTRS zu verarbeiten, aus dem OTRS Acknowledges an das meldende Nagiossystem abzusetzen.
Im 2. Teil des Workshops wird auf die Möglichkeit eingegangen OTRS spezifische Daten zu überwachen, z.B. Eskalationen oder die Anzahl von Tickets in bestimmten Queues. Als Schnittstelle kommt das erweiterte offene Systemmonitoringmodul von OTRS zum Einsatz, dessen Release während der Nagios Konferenz geplant ist.
OSMC 2021 | SNMP Monitoring mit Prometheus / OIDs dynamisch auswählen und im ...NETWAYS
SNMP und Prometheus sind mittlerweile ein eingespieltes Team wenn es um das einsammlen von Metriken via SNMP geht. Doch vor den bunten Dashboards steht die Herausforderung für jedes Device den passende Satz an Metriken bzw. OID zu finden. Bei einem Mix aus den unterschiedlichsten Herstellern mit jeweils verschiedenen Produkten keine leichte Aufgabe.
In diesem Vortrag zeige ich, wie mittels eines SNMP discovery die interessanten OIDs ermittelt und alle für Prometheus notwendigen Konfigurationen anschließend automatisiert erzeugt und deployed werden können.
In PostgreSQL kann man sich mit "explain" ansehen, welchen Execution Plan PostgreSQL für eine Query verwendet. Das hilft beim Suchen von Performance Problemen und hilft, den Durchsatz der Database zu steigern.
Performance Tuning muss in PostgreSQL nicht schwer sein. Oft reichen einige einfache Veränderung, um die Datenbank massiv zu beschleunigen.
VIele Performance Probleme sind einfach zu lösen. Diese Präsentation zeigt die gängigsten Methoden, um einfache Probleme schnell und effizient zu beseitigen
Markus Winand – IT-Tage 2015 – Den Suchraum des Optimizers gestaltenInformatik Aktuell
Auf seiner Suche nach dem optimalen Ausführungsplan ist der Optimizer in einen Käfig gesperrt, der von den SQL-Abfragen und dem physischen Datenbank-Design vorgegeben ist. Per Definition kann der Optimizer nur den besten Ausführungsplan innerhalb dieses Käfigs finden – auch wenn außerhalb bessere Ausführungspläne sind. In diesem Vortrag werden wir sehen, wie Indizierung diesen Käfig beeinflusst und lernen, wie man durch kluge Indizierung den Käfig so gestaltet, dass der absolut beste Ausführungsplan in der Reichweite des Optimizers liegt.
nagiosplugin - eine Python-Bibliothek für Monitoring-Plugins Christian Kauhaus
Auch wenn in der letzten Zeit sehr viel Bewegung in die Monitoring-Szene gekommen ist (#monitoringsucks etc.), werden die Platzhirsche Nagios/Icinga und ihre Standards auf absehbare Zeit nicht verschwinden. Das Nagios-Plugin-API stellt eine sehr weit verbreitete Schnittstelle zur Anbindung einzelner Checks an Monitoring-Systeme dar. Obwohl das API in den Grundzügen sehr einfach ist, ist der Programmieraufwand für vollständig konforme Plugins erstaunlich hoch.
Die nagiosplugin-Bibliothek nimmt dem Entwickler viele Details ab, so dass er sich auf den Inhalt seiner Checks konzentrieren kann. Der Vortrag führt in das Schreiben von Nagios-kompatiblen Plugins ein, zeigt den typischen Aufbau von Nagios-Plugins und das Grundprinzip eigener Plugins. Die Konfiguration und der Betrieb von Monitoring-Systemen im Großen sollen nicht thematisiert werden.
Video: http://pyvideo.org/video/1460/nagiosplugin-eine-python-bibliothek-fur-monitor
Konferenzseite: https://2012.de.pycon.org/programm/schedule/sessions/45/
Projekt-Homepage: https://projects.gocept.com/projects/nagiosplugin/wiki
OSMC 2008 | Nagios & OTRS Integration by Jens BotheNETWAYS
Der Workshop beschäftigt sich damit Nagiosmeldungen im OTRS zu verarbeiten, aus dem OTRS Acknowledges an das meldende Nagiossystem abzusetzen.
Im 2. Teil des Workshops wird auf die Möglichkeit eingegangen OTRS spezifische Daten zu überwachen, z.B. Eskalationen oder die Anzahl von Tickets in bestimmten Queues. Als Schnittstelle kommt das erweiterte offene Systemmonitoringmodul von OTRS zum Einsatz, dessen Release während der Nagios Konferenz geplant ist.
OSMC 2021 | SNMP Monitoring mit Prometheus / OIDs dynamisch auswählen und im ...NETWAYS
SNMP und Prometheus sind mittlerweile ein eingespieltes Team wenn es um das einsammlen von Metriken via SNMP geht. Doch vor den bunten Dashboards steht die Herausforderung für jedes Device den passende Satz an Metriken bzw. OID zu finden. Bei einem Mix aus den unterschiedlichsten Herstellern mit jeweils verschiedenen Produkten keine leichte Aufgabe.
In diesem Vortrag zeige ich, wie mittels eines SNMP discovery die interessanten OIDs ermittelt und alle für Prometheus notwendigen Konfigurationen anschließend automatisiert erzeugt und deployed werden können.
Oracle LDAP-Integration für SQL*Net
Ja, wo laufen Sie denn? LDAP-Integration für SQL*Net
Überblick SQL*Net
LDAP-Integration
Das `LDAP`-Prinzip
Oracle OID
Active Directory
OpenLDAP
PostgreSQL is a strong relational database which is highly capable of replication. As of PostgreSQL 9.4 streaming replication is only able to replicate an entire database instance.
Walbouncer allows to filter the PostgreSQL WAL and partial replicate single databases.
In SQL joins are a fundamental concepts and many database engines have serious problems when it comes to joining many many tables.
PostgreSQL is a pretty cool database - the question is just: How many joins can it take?
It is known that Oracle does not accept insanely long queries and MySQL is known to core dump with 2000 tables.
This talk shows how to join 1 million tables with PostgreSQL.
By default PostgreSQL will store data on disk in its standard format. However, in many cases business or legal requirements require data to on disk be encrypted.
On disk-encryption was paid for by German industry and is a classical case showing how business and Open Source can coexist. This talk shows, that it can be actually cheaper to implement a feature into an Open Source product than to license a commercial product such as Oracle, DB2, Informix, or MS SQL Server.
Open Source can make a valuable contribution to save costs for everybody.
PostgreSQL is one of the most advanced relational databases. It offers superb replication capabilities. The most important features are: Streaming replication, Point-In-Time-Recovery, advanced monitoring, etc.
This one is about advanced indexing in PostgreSQL. It guides you through basic concepts as well as through advanced techniques to speed up the database.
All important PostgreSQL Index types explained: btree, gin, gist, sp-gist and hashes.
Regular expression indexes and LIKE queries are also covered.
This talk shows, how business intelligence can be performed with PostgreSQL. It features advanced SQL including aggregations, analytics as well as more sophisticated joins such as LATERAL.
In addition to that loading data as well as optimizing storage are discussed.
Auf der DOAG 2010 hielt Stephan Engel einen Vortrag zum Thema "ApEx effektiv" und zeigt Lösungen für Standardanforderungen mit Köpfchen auf. Application Express (kurz ApEx) ist eine Entwicklungsumgebung für Oracle Datenbanken.
Mit Java 8 haben endlich Lambdas in den Sprachumfang von Java Einzug gehalten. Mittels Lambdas lassen sich viele Probleme kurz und prägnant ausdrücken. Vorliegende Auskopplung aus Handouts zur Vorlesung Programmieren I führt Lambdas und Streams ein und erläutert den Einsatz an vielen kleineren Beispielen.
Oracle LDAP-Integration für SQL*Net
Ja, wo laufen Sie denn? LDAP-Integration für SQL*Net
Überblick SQL*Net
LDAP-Integration
Das `LDAP`-Prinzip
Oracle OID
Active Directory
OpenLDAP
PostgreSQL is a strong relational database which is highly capable of replication. As of PostgreSQL 9.4 streaming replication is only able to replicate an entire database instance.
Walbouncer allows to filter the PostgreSQL WAL and partial replicate single databases.
In SQL joins are a fundamental concepts and many database engines have serious problems when it comes to joining many many tables.
PostgreSQL is a pretty cool database - the question is just: How many joins can it take?
It is known that Oracle does not accept insanely long queries and MySQL is known to core dump with 2000 tables.
This talk shows how to join 1 million tables with PostgreSQL.
By default PostgreSQL will store data on disk in its standard format. However, in many cases business or legal requirements require data to on disk be encrypted.
On disk-encryption was paid for by German industry and is a classical case showing how business and Open Source can coexist. This talk shows, that it can be actually cheaper to implement a feature into an Open Source product than to license a commercial product such as Oracle, DB2, Informix, or MS SQL Server.
Open Source can make a valuable contribution to save costs for everybody.
PostgreSQL is one of the most advanced relational databases. It offers superb replication capabilities. The most important features are: Streaming replication, Point-In-Time-Recovery, advanced monitoring, etc.
This one is about advanced indexing in PostgreSQL. It guides you through basic concepts as well as through advanced techniques to speed up the database.
All important PostgreSQL Index types explained: btree, gin, gist, sp-gist and hashes.
Regular expression indexes and LIKE queries are also covered.
This talk shows, how business intelligence can be performed with PostgreSQL. It features advanced SQL including aggregations, analytics as well as more sophisticated joins such as LATERAL.
In addition to that loading data as well as optimizing storage are discussed.
Auf der DOAG 2010 hielt Stephan Engel einen Vortrag zum Thema "ApEx effektiv" und zeigt Lösungen für Standardanforderungen mit Köpfchen auf. Application Express (kurz ApEx) ist eine Entwicklungsumgebung für Oracle Datenbanken.
Mit Java 8 haben endlich Lambdas in den Sprachumfang von Java Einzug gehalten. Mittels Lambdas lassen sich viele Probleme kurz und prägnant ausdrücken. Vorliegende Auskopplung aus Handouts zur Vorlesung Programmieren I führt Lambdas und Streams ein und erläutert den Einsatz an vielen kleineren Beispielen.
Was kann man machen, um Angular-1.x-Code auf Angular 2 vorzubereiten? Welche Möglichkeiten werden in der nächsten Zeit aufkommen, um einen Parallelbetrieb zu realisieren.
It is obvious that for bulk data processing performance is the key factor. It often means balancing well structured, maintainable, reusable and high-performance code.
Even though there are more features and optimizations that support bulk processing with each release of PL/SQL, the "Pure SQL" approach often leads to better performance.
Best practices, tips and tricks. How do I develop a complex SQL? How can Subquery Factoring help to increase readability? How does this help to test complex SQLs? What is a Row Generator? How do I change the cardinality of the original data set?
Funktionale Programmierung und mehr mit Scalathoherr
Anhand von Beispielen werden einige Konzepte der funktionalen Programmierung im Allgemeinen und die objekt-funktionale Sprache Scala im Besonderen vorgestellt.
Vortrag von 42ways im Rahmen der IT-Weiterbildungsveranstaltungen bei der SwissLife AG, Niederlassung für Deutschland, München.
Ähnlich wie PostgreSQL: Eigene Aggregate schreiben (20)
3. Worum es gehen wird
Wie funktionieren PostgreSQL Aggregates?
Wie kann man einfache Aggregates schreiben?
Wie können Windowing Functions optimiert werden?
Wie schreibt man Hypothetical Aggregates?
Hans-Jürgen Schönig
www.postgresql-support.de
4. Ein einfaches Aggregate
Ein Aggregate ist “etwas anders”
Eine “normale” Funktion gibt eine Zelle pro Aufruf retour
Ein Aggregate gibt eine Zeile pro Gruppe zurück
Hans-Jürgen Schönig
www.postgresql-support.de
5. Ein einfache Beispiele:
“Normale” Funktionen geben eine Zeile pro Aufruf zurück:
SELECT md5(x::text) FROM generate_series(1, 3) AS x;
md5
----------------------------------
c4ca4238a0b923820dcc509a6f75849b
c81e728d9d4c2f636f067f89cc14862c
eccbc87e4b5ce2fe28308fd9f2a7baf3
(3 rows)
Hans-Jürgen Schönig
www.postgresql-support.de
6. Einfache Beispiele:
Ein Aggregate macht aus vielen Zeilen eine Zeile:
SELECT sum(x) FROM generate_series(1, 3) AS x;
sum
-----
6
(1 row)
Hans-Jürgen Schönig
www.postgresql-support.de
8. Unser erstes Ziel
Wir beginnen mit einfachen Stringoperationen
Damit lässt sich der Workflow einfach verdeutlichen
Komplexere Prozesse laufen nach dem selben Schema
Hans-Jürgen Schönig
www.postgresql-support.de
9. Eine einfache Funktion
CREATE FUNCTION xagg(text, text) RETURNS text AS
$$
BEGIN
RAISE NOTICE 'xagg: "%" - adding %', $1, $2;
RETURN $1 || $2;
END;
$$ LANGUAGE 'plpgsql';
Hans-Jürgen Schönig
www.postgresql-support.de
10. Daraus kann man ein Aggregate machen
xagg wird für jede Zeile aufgerufen
CREATE AGGREGATE simpleagg(text) (
INITCOND = '',
SFUNC = xagg,
STYPE = text
);
Hans-Jürgen Schönig
www.postgresql-support.de
12. Kompliziertere Berechnungen
Zeilenoperationen reichen oft nicht aus
Um Berechnungen abzuschließen, kann eine FINALFUNC
definiert werden.
Beispiel: avg dividiert am Ende die Summe durch die Anzahl
Hans-Jürgen Schönig
www.postgresql-support.de
13. Eine einfache FINALFUNC
CREATE FUNCTION sample_final(text) RETURNS text AS
$$
SELECT $1 || 'X';
$$ LANGUAGE 'sql';
CREATE AGGREGATE simpleagg(text) (
INITCOND = '',
SFUNC = xagg,
FINALFUNC = sample_final,
STYPE = text
);
Hans-Jürgen Schönig
www.postgresql-support.de
16. Aggregate und Analytics
Alle Aggregate können auch als Windows verwendet werden
Effizienz kann bei komplexeren Frame Clauses ein Thema
werden
SELECT ...
OVER (ORDER BY ...
ROWS BETWEEN x PREDECING AND y FOLLOWING) ...
Hans-Jürgen Schönig
www.postgresql-support.de
17. Ein Beispiel für schlechte Performance (1):
test=# SELECT x, simpleagg(x::text)
OVER (ORDER BY x ROWS BETWEEN
3 PRECEDING AND 0 FOLLOWING )
FROM generate_series(1, 6) AS x;
NOTICE: xagg: "" - adding 1
NOTICE: xagg: "1" - adding 2
NOTICE: xagg: "12" - adding 3
NOTICE: xagg: "123" - adding 4
Hans-Jürgen Schönig
www.postgresql-support.de
19. Ein Beispiel für schlechte Performance (3):
x | simpleagg
---+-----------
1 | 1X
2 | 12X
3 | 123X
4 | 1234X
5 | 2345X
6 | 3456X
(6 rows)
=> Die Anzahl der Funktionsaufrufe ist explodiert
Hans-Jürgen Schönig
www.postgresql-support.de
20. Funktionsaufrufe reduzieren
Das Ziel ist, die Anzahl der Funktionsaufrufe zu reduzieren.
Transition Functions helfen in diesem Fall.
Transition Functions sind seit PostgreSQL 9.4 möglich
Hans-Jürgen Schönig
www.postgresql-support.de
21. Wie das funktioniert
Wir benötigen eine MSFUNC und eine MINVFUNC
CREATE FUNCTION x_msfunc(text, text) RETURNS text AS $$
BEGIN
RAISE NOTICE 'x_msfunc: % / %', $1, $2;
RETURN $1 || $2;
END;
$$ LANGUAGE 'plpgsql';
Hans-Jürgen Schönig
www.postgresql-support.de
22. Der zweite Teil des Aggregates
CREATE FUNCTION x_minvfunc(text, text) RETURNS text AS $$
BEGIN
RAISE NOTICE 'x_minvfunc: previous % / removing %',
$1, $2;
RETURN substring($1, 2, length($1) - 1);
END;
$$ LANGUAGE 'plpgsql';
Hans-Jürgen Schönig
www.postgresql-support.de
23. Das Aggregat definieren
CREATE AGGREGATE myagg(text) (
stype = text,
sfunc = xagg,
initcond = '',
msfunc = x_msfunc,
minvfunc = x_minvfunc,
mstype = text,
MINITCOND = ''
);
Die Logik ist sehr ähnlich wie vorher
Eine der Funktionen wird für jede Zeile aufgerufen.
Ein optionaler Funktionsaufruf passiert am Ende.
Hans-Jürgen Schönig
www.postgresql-support.de
24. Eine Demo-Abfrage
SELECT x, myagg(x::text) OVER (
PARTITION BY x % 2 ORDER BY x::text
ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING)
FROM generate_series(1, 9) AS x
ORDER BY x;
Hans-Jürgen Schönig
www.postgresql-support.de
29. Was sind Hypothetical Aggregates?
Hypothetical Aggregates beantworten die “what if” Frage
Wie wäre das Ergebnis, würde ein bestimmter Wert existieren?
Ein klassisches Beispiel:
test=# SELECT x % 2 AS odd_even,
rank(5) WITHIN GROUP (ORDER BY x)
FROM generate_series(1, 10) AS x
GROUP BY 1;
odd_even | rank
----------+------
0 | 3
1 | 3
(2 rows)
Hans-Jürgen Schönig
www.postgresql-support.de
31. Weitere Funktionen werden benötigt
Wieder benötigen wir eine SFUNC:
CREATE FUNCTION hypo_sfunc(text, text) RETURNS text AS
$$
BEGIN
RAISE NOTICE 'hypo_sfunc: % / %', $1, $2;
RETURN $1 || $2;
END;
$$ LANGUAGE 'plpgsql';
Hans-Jürgen Schönig
www.postgresql-support.de
32. Eine FINALFUNC
Eine Funktion wird wieder am Ende aufgerufen
CREATE FUNCTION hypo_final(text, text, text)
RETURNS text AS
$$
BEGIN
RAISE NOTICE 'hypo_final: % / % / %', $1, $2, $3;
RETURN $1 || $2;
END;
$$ LANGUAGE 'plpgsql';
Hans-Jürgen Schönig
www.postgresql-support.de
33. Die Definition des Aggregates
CREATE AGGREGATE whatif(text ORDER BY text) (
INITCOND = '',
STYPE = text,
SFUNC = hypo_sfunc,
FINALFUNC = hypo_final,
FINALFUNC_EXTRA = true,
HYPOTHETICAL
);
Hans-Jürgen Schönig
www.postgresql-support.de
34. Ein Beispiel
SELECT (x % 2)::text, whatif('abc')
WITHIN GROUP (ORDER BY x::text )
FROM generate_series(1, 4) AS x
GROUP BY 1;
Hans-Jürgen Schönig
www.postgresql-support.de