PostgreSQL und memcached · PostgreSQL und memcached Building a Query Cache Björn Häuser imos...

25
Einführung Hitting Cache-Maintenance Summary 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

Transcript of PostgreSQL und memcached · PostgreSQL und memcached Building a Query Cache Björn Häuser imos...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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