postgresql und memcached · postgresql und memcached building a query cache björn häuser imos...
TRANSCRIPT
![Page 1: PostgreSQL und memcached · PostgreSQL und memcached Building a Query Cache Björn Häuser imos GmbH 11.11.2011 / PGconf.DE Björn Häuser PostgreSQL und memcached. Einführung Hitting](https://reader030.vdocuments.pub/reader030/viewer/2022040105/5e18396d95fc7d296254c24b/html5/thumbnails/1.jpg)
EinführungHitting
Cache-MaintenanceSummary
PostgreSQL und memcachedBuilding a Query Cache
Björn Häuser
imos GmbH
11.11.2011 / PGconf.DE
Björn Häuser PostgreSQL und memcached
![Page 2: PostgreSQL und memcached · PostgreSQL und memcached Building a Query Cache Björn Häuser imos GmbH 11.11.2011 / PGconf.DE Björn Häuser PostgreSQL und memcached. Einführung Hitting](https://reader030.vdocuments.pub/reader030/viewer/2022040105/5e18396d95fc7d296254c24b/html5/thumbnails/2.jpg)
EinführungHitting
Cache-MaintenanceSummary
Outline
1 Einführung
2 Hitting
3 Cache-Maintenance
Björn Häuser PostgreSQL und memcached
![Page 3: PostgreSQL und memcached · PostgreSQL und memcached Building a Query Cache Björn Häuser imos GmbH 11.11.2011 / PGconf.DE Björn Häuser PostgreSQL und memcached. Einführung Hitting](https://reader030.vdocuments.pub/reader030/viewer/2022040105/5e18396d95fc7d296254c24b/html5/thumbnails/3.jpg)
EinführungHitting
Cache-MaintenanceSummary
Szenario
WebapplikationPro Request viele, größtenteils einfache, Queries
Björn Häuser PostgreSQL und memcached
![Page 4: PostgreSQL und memcached · PostgreSQL und memcached Building a Query Cache Björn Häuser imos GmbH 11.11.2011 / PGconf.DE Björn Häuser PostgreSQL und memcached. Einführung Hitting](https://reader030.vdocuments.pub/reader030/viewer/2022040105/5e18396d95fc7d296254c24b/html5/thumbnails/4.jpg)
EinführungHitting
Cache-MaintenanceSummary
Einteilung von Caches
Tradeoff zwischenMaintenanceKomplexität der AnfragenDirty-Cache-Hit / Cache-Miss
TransparenzBeeinflussung des Programmierflusses
Björn Häuser PostgreSQL und memcached
![Page 5: PostgreSQL und memcached · PostgreSQL und memcached Building a Query Cache Björn Häuser imos GmbH 11.11.2011 / PGconf.DE Björn Häuser PostgreSQL und memcached. Einführung Hitting](https://reader030.vdocuments.pub/reader030/viewer/2022040105/5e18396d95fc7d296254c24b/html5/thumbnails/5.jpg)
EinführungHitting
Cache-MaintenanceSummary
Zielsetzung
Häufig auftretende Queries speichernSelbstständige MaintenanceCache-Miss anstatt Dirty-Cache-HitMinimaler Einfluss auf ApplikationJederzeit zu- und abschaltbar
Björn Häuser PostgreSQL und memcached
![Page 6: PostgreSQL und memcached · PostgreSQL und memcached Building a Query Cache Björn Häuser imos GmbH 11.11.2011 / PGconf.DE Björn Häuser PostgreSQL und memcached. Einführung Hitting](https://reader030.vdocuments.pub/reader030/viewer/2022040105/5e18396d95fc7d296254c24b/html5/thumbnails/6.jpg)
EinführungHitting
Cache-MaintenanceSummary
Cache
In-Memory-Key-Value-StoreMemcached
Björn Häuser PostgreSQL und memcached
![Page 7: PostgreSQL und memcached · PostgreSQL und memcached Building a Query Cache Björn Häuser imos GmbH 11.11.2011 / PGconf.DE Björn Häuser PostgreSQL und memcached. Einführung Hitting](https://reader030.vdocuments.pub/reader030/viewer/2022040105/5e18396d95fc7d296254c24b/html5/thumbnails/7.jpg)
EinführungHitting
Cache-MaintenanceSummary
Komplexität vs. Häufigkeit
Björn Häuser PostgreSQL und memcached
![Page 8: PostgreSQL und memcached · PostgreSQL und memcached Building a Query Cache Björn Häuser imos GmbH 11.11.2011 / PGconf.DE Björn Häuser PostgreSQL und memcached. Einführung Hitting](https://reader030.vdocuments.pub/reader030/viewer/2022040105/5e18396d95fc7d296254c24b/html5/thumbnails/8.jpg)
EinführungHitting
Cache-MaintenanceSummary
Aufbau
Björn Häuser PostgreSQL und memcached
![Page 9: PostgreSQL und memcached · PostgreSQL und memcached Building a Query Cache Björn Häuser imos GmbH 11.11.2011 / PGconf.DE Björn Häuser PostgreSQL und memcached. Einführung Hitting](https://reader030.vdocuments.pub/reader030/viewer/2022040105/5e18396d95fc7d296254c24b/html5/thumbnails/9.jpg)
EinführungHitting
Cache-MaintenanceSummary
Grundlegende Arbeitsweise
Tabellen werden in logische Gruppen unterteiltJede Gruppe bekommt einen eindeutigen Bezeichner:Handle
Beziehung zwischen Tabellen und Handle wird gespeichert
Query wird mindestens einem Handle zugeordnet
Björn Häuser PostgreSQL und memcached
![Page 10: PostgreSQL und memcached · PostgreSQL und memcached Building a Query Cache Björn Häuser imos GmbH 11.11.2011 / PGconf.DE Björn Häuser PostgreSQL und memcached. Einführung Hitting](https://reader030.vdocuments.pub/reader030/viewer/2022040105/5e18396d95fc7d296254c24b/html5/thumbnails/10.jpg)
EinführungHitting
Cache-MaintenanceSummary
Schema
memcache_tables
Row
0R
ow
1
memcache_handle table_name
users
users
users_data
memcache_handles
Row
0R
ow
1
memcache_handle
users users
Björn Häuser PostgreSQL und memcached
![Page 11: PostgreSQL und memcached · PostgreSQL und memcached Building a Query Cache Björn Häuser imos GmbH 11.11.2011 / PGconf.DE Björn Häuser PostgreSQL und memcached. Einführung Hitting](https://reader030.vdocuments.pub/reader030/viewer/2022040105/5e18396d95fc7d296254c24b/html5/thumbnails/11.jpg)
EinführungHitting
Cache-MaintenanceSummary
Aufbau der Schlüssel
Ein Handle speichert die aktuelle Revision$handleRevision = "{$handle}_rev"
Key zusammengesetzt aus:QueryParameterRevision des Handles
Björn Häuser PostgreSQL und memcached
![Page 12: PostgreSQL und memcached · PostgreSQL und memcached Building a Query Cache Björn Häuser imos GmbH 11.11.2011 / PGconf.DE Björn Häuser PostgreSQL und memcached. Einführung Hitting](https://reader030.vdocuments.pub/reader030/viewer/2022040105/5e18396d95fc7d296254c24b/html5/thumbnails/12.jpg)
EinführungHitting
Cache-MaintenanceSummary
Beispiel
Query:
SELECT user_id, login, firstname, lastnameFROM usersWHERE user_id = ?
Handle:users
Abfragen der Revision des Handles:$handleRevision = memcache_get("{$handle}_rev");
Zusammenbauen des Keys:
$key = $handle . "_" . md5($query . implode(",",$params)) . "_rev_" . $handleRevision;
Björn Häuser PostgreSQL und memcached
![Page 13: PostgreSQL und memcached · PostgreSQL und memcached Building a Query Cache Björn Häuser imos GmbH 11.11.2011 / PGconf.DE Björn Häuser PostgreSQL und memcached. Einführung Hitting](https://reader030.vdocuments.pub/reader030/viewer/2022040105/5e18396d95fc7d296254c24b/html5/thumbnails/13.jpg)
EinführungHitting
Cache-MaintenanceSummary
Ergebnisse
Memcache-Key:
"users_e5c18e041e700d90717a634fb9751207_rev_1"
Björn Häuser PostgreSQL und memcached
![Page 14: PostgreSQL und memcached · PostgreSQL und memcached Building a Query Cache Björn Häuser imos GmbH 11.11.2011 / PGconf.DE Björn Häuser PostgreSQL und memcached. Einführung Hitting](https://reader030.vdocuments.pub/reader030/viewer/2022040105/5e18396d95fc7d296254c24b/html5/thumbnails/14.jpg)
EinführungHitting
Cache-MaintenanceSummary
Cache-Maintenance
Bei Änderungen an Tabellen müssen die zugeordnetenHandles inkrementiert werdenFolgen:
Alle zwischengespeicherten Queries werden automatischungültigVorher:users_e5c18e041e700d90717a634fb9751207_rev_1Nachher:users_e5c18e041e700d90717a634fb9751207_rev_2
On-Commit-Event-Problematik
Björn Häuser PostgreSQL und memcached
![Page 15: PostgreSQL und memcached · PostgreSQL und memcached Building a Query Cache Björn Häuser imos GmbH 11.11.2011 / PGconf.DE Björn Häuser PostgreSQL und memcached. Einführung Hitting](https://reader030.vdocuments.pub/reader030/viewer/2022040105/5e18396d95fc7d296254c24b/html5/thumbnails/15.jpg)
EinführungHitting
Cache-MaintenanceSummary
On-Commit-Event-Problematik
Cache nur invalidieren wenn Transaktion COMMITedwurdeCache und Datenbank synchronisieren
Race-Conditions
Björn Häuser PostgreSQL und memcached
![Page 16: PostgreSQL und memcached · PostgreSQL und memcached Building a Query Cache Björn Häuser imos GmbH 11.11.2011 / PGconf.DE Björn Häuser PostgreSQL und memcached. Einführung Hitting](https://reader030.vdocuments.pub/reader030/viewer/2022040105/5e18396d95fc7d296254c24b/html5/thumbnails/16.jpg)
EinführungHitting
Cache-MaintenanceSummary
Maintenance per Trigger
Reagiert auf Veränderungen der Tabelle (INSERT,UPDATE und DELETE)Zugeordnete Handles auslesen und inkrementierenVorteile:
Einfach umzusetzenNur Abhänigkeit auf pg_memcache
Nachteile:Reset auch bei ROLLBACKRace-Conditions
Björn Häuser PostgreSQL und memcached
![Page 17: PostgreSQL und memcached · PostgreSQL und memcached Building a Query Cache Björn Häuser imos GmbH 11.11.2011 / PGconf.DE Björn Häuser PostgreSQL und memcached. Einführung Hitting](https://reader030.vdocuments.pub/reader030/viewer/2022040105/5e18396d95fc7d296254c24b/html5/thumbnails/17.jpg)
EinführungHitting
Cache-MaintenanceSummary
Maintenance per Trigger
FOR p_memcached_handle INSELECT mt . memcached_handleFROM memcached_tables mtWHERE mt . table_name = TG_TABLE_NAME
LOOPp_rev_name = p_memcached_handle .
memcached_handle | | ’ _rev ’ ;p_rev = memcache_get ( p_rev_name ) ;IF p_rev IS NOT NULL THEN
PERFORM memcache_incr ( p_rev_name ) ;END IF ;
END LOOP;
Björn Häuser PostgreSQL und memcached
![Page 18: PostgreSQL und memcached · PostgreSQL und memcached Building a Query Cache Björn Häuser imos GmbH 11.11.2011 / PGconf.DE Björn Häuser PostgreSQL und memcached. Einführung Hitting](https://reader030.vdocuments.pub/reader030/viewer/2022040105/5e18396d95fc7d296254c24b/html5/thumbnails/18.jpg)
EinführungHitting
Cache-MaintenanceSummary
Maintenance per Trigger
Race-Condition 1:Transaktion A resettet HandlesTransaktion B hinterlegt alte Daten unter neuer RevisionTransaktion A COMMITed seine DatenFolge: Alte Daten liegen im Cache
Race-Condition 2:Transaktion A resettet HandlesTransaktion B hinterlegt alte Daten unter neuer RevisionTransaktion A zerstört die Transaktion und ROLLBACKedFolge: Richtige Daten im Cache, aber unnötigerCache-Miss
Björn Häuser PostgreSQL und memcached
![Page 19: PostgreSQL und memcached · PostgreSQL und memcached Building a Query Cache Björn Häuser imos GmbH 11.11.2011 / PGconf.DE Björn Häuser PostgreSQL und memcached. Einführung Hitting](https://reader030.vdocuments.pub/reader030/viewer/2022040105/5e18396d95fc7d296254c24b/html5/thumbnails/19.jpg)
EinführungHitting
Cache-MaintenanceSummary
Maintenance per LISTEN / NOTIFY
NOTIFYSeit PostgreSQL 9.0 mit PayloadWird erst beim COMMIT zugestellt
Handler übernimmt das Inkrementieren der HandlesVorteile:
Keine Abhängigkeit in der DatenbankEine Nachricht kann mehreren Destinationen zugestelltwerdenGleiche Nachrichten werden zusammengefasst
Nachteile:Client muss entweder POLLen oder SELECTenKein Two-Phase-Commit möglich
Poor-Mans-Queue?
Björn Häuser PostgreSQL und memcached
![Page 20: PostgreSQL und memcached · PostgreSQL und memcached Building a Query Cache Björn Häuser imos GmbH 11.11.2011 / PGconf.DE Björn Häuser PostgreSQL und memcached. Einführung Hitting](https://reader030.vdocuments.pub/reader030/viewer/2022040105/5e18396d95fc7d296254c24b/html5/thumbnails/20.jpg)
EinführungHitting
Cache-MaintenanceSummary
Maintenance per LISTEN / NOFITY
NOTIFY (innerhalb eines Triggers):
EXECUTE pg_notify(TG_TABLE_SCHEMA,(SELECT string_agg(memcached_handle, ’,’)FROM memcached_tables
WHERE table_name = TG_TABLE_NAME));
LISTEN:http://rhodiumtoad.org.uk/junk/listen-min.pl.txt
Björn Häuser PostgreSQL und memcached
![Page 21: PostgreSQL und memcached · PostgreSQL und memcached Building a Query Cache Björn Häuser imos GmbH 11.11.2011 / PGconf.DE Björn Häuser PostgreSQL und memcached. Einführung Hitting](https://reader030.vdocuments.pub/reader030/viewer/2022040105/5e18396d95fc7d296254c24b/html5/thumbnails/21.jpg)
EinführungHitting
Cache-MaintenanceSummary
Maintenance per LISTEN / NOFITY
Wartezeiten bis NOTIFY die Destination erreichtWenig Kontrolle über die Nachricht
Björn Häuser PostgreSQL und memcached
![Page 22: PostgreSQL und memcached · PostgreSQL und memcached Building a Query Cache Björn Häuser imos GmbH 11.11.2011 / PGconf.DE Björn Häuser PostgreSQL und memcached. Einführung Hitting](https://reader030.vdocuments.pub/reader030/viewer/2022040105/5e18396d95fc7d296254c24b/html5/thumbnails/22.jpg)
EinführungHitting
Cache-MaintenanceSummary
Maintenance per Queue
Eleganteste LösungPgQ
Nachricht vs. Event transportierenConsumer übernimmt das Inkrementieren der Handles
Björn Häuser PostgreSQL und memcached
![Page 23: PostgreSQL und memcached · PostgreSQL und memcached Building a Query Cache Björn Häuser imos GmbH 11.11.2011 / PGconf.DE Björn Häuser PostgreSQL und memcached. Einführung Hitting](https://reader030.vdocuments.pub/reader030/viewer/2022040105/5e18396d95fc7d296254c24b/html5/thumbnails/23.jpg)
EinführungHitting
Cache-MaintenanceSummary
Maintenance per Queue
Vorteile:Volle Kontrolle über NachrichtenEine Nachricht kann mehreren Destinationen zugestelltwerdenPgQ übernimmt die Verteilung
Nachteile:Externer Dienst (Ticker)
Links:http://www.pgcon.org/2008/schedule/events/79.en.htmlhttp://wiki.postgresql.org/wiki/PGQ_Tutorial
Björn Häuser PostgreSQL und memcached
![Page 24: PostgreSQL und memcached · PostgreSQL und memcached Building a Query Cache Björn Häuser imos GmbH 11.11.2011 / PGconf.DE Björn Häuser PostgreSQL und memcached. Einführung Hitting](https://reader030.vdocuments.pub/reader030/viewer/2022040105/5e18396d95fc7d296254c24b/html5/thumbnails/24.jpg)
EinführungHitting
Cache-MaintenanceSummary
Allgemein
ProblemeVerdecken von langsamen Queries
MemcachedMonitoring
http://code.google.com/p/memcached/wiki/NewProgrammingFAQ
Tuninghttp://code.google.com/p/memcached/wiki/NewUserInternals
Expire setzen
Björn Häuser PostgreSQL und memcached
![Page 25: PostgreSQL und memcached · PostgreSQL und memcached Building a Query Cache Björn Häuser imos GmbH 11.11.2011 / PGconf.DE Björn Häuser PostgreSQL und memcached. Einführung Hitting](https://reader030.vdocuments.pub/reader030/viewer/2022040105/5e18396d95fc7d296254c24b/html5/thumbnails/25.jpg)
EinführungHitting
Cache-MaintenanceSummary
Summary
Leicht integrierbare Lösung um Antwortzeiten zuverbessernWenig Einfluss auf ProgrammierflussRace-Conditions
ZukunftRace-Conditions minimierenCache wärmen / vorbefüllen
Leave Feedbackhttps://www.postgresql.eu/events/feedback/pgconfde2011/
Björn Häuser PostgreSQL und memcached