21
Einführung Cache-Hits Cache-Maintenance Summary PostgreSQL und memcached Building a generic Query Cache Björn Häuser imos GmbH 07.12.2010 / PGDays Stuttgart 2010 Björn Häuser PostgreSQL und memcached

PostgreSQL und memcached · 2010. 12. 9. · Einführung Cache-Hits Cache-Maintenance Summary PostgreSQL und memcached Building a generic Query Cache Björn Häuser imos GmbH 07.12.2010

  • Upload
    others

  • View
    12

  • Download
    0

Embed Size (px)

Citation preview

Page 1: PostgreSQL und memcached · 2010. 12. 9. · Einführung Cache-Hits Cache-Maintenance Summary PostgreSQL und memcached Building a generic Query Cache Björn Häuser imos GmbH 07.12.2010

EinführungCache-Hits

Cache-MaintenanceSummary

PostgreSQL und memcachedBuilding a generic Query Cache

Björn Häuser

imos GmbH

07.12.2010 / PGDays Stuttgart 2010

Björn Häuser PostgreSQL und memcached

Page 2: PostgreSQL und memcached · 2010. 12. 9. · Einführung Cache-Hits Cache-Maintenance Summary PostgreSQL und memcached Building a generic Query Cache Björn Häuser imos GmbH 07.12.2010

EinführungCache-Hits

Cache-MaintenanceSummary

Outline

1 Einführung

2 Cache-Hits

3 Cache-Maintenance

Björn Häuser PostgreSQL und memcached

Page 3: PostgreSQL und memcached · 2010. 12. 9. · Einführung Cache-Hits Cache-Maintenance Summary PostgreSQL und memcached Building a generic Query Cache Björn Häuser imos GmbH 07.12.2010

EinführungCache-Hits

Cache-MaintenanceSummary

Einteilung von Caches

Tradeoff zwischenMaintenanceKomplexität der AnfragenDirty-Cache-Hit / Cache-Miss

TransparenzBeeinflussung des Programmieraufwandes

Björn Häuser PostgreSQL und memcached

Page 4: PostgreSQL und memcached · 2010. 12. 9. · Einführung Cache-Hits Cache-Maintenance Summary PostgreSQL und memcached Building a generic Query Cache Björn Häuser imos GmbH 07.12.2010

EinführungCache-Hits

Cache-MaintenanceSummary

Zielsetzung

Häufig auftretende Queries speichernSelbstständige MaintenanceCache-MissMinimaler Einfluss auf ApplikationJederzeit zu- und abschaltbar

Björn Häuser PostgreSQL und memcached

Page 5: PostgreSQL und memcached · 2010. 12. 9. · Einführung Cache-Hits Cache-Maintenance Summary PostgreSQL und memcached Building a generic Query Cache Björn Häuser imos GmbH 07.12.2010

EinführungCache-Hits

Cache-MaintenanceSummary

Komplexität vs. Häufigkeit

Björn Häuser PostgreSQL und memcached

Page 6: PostgreSQL und memcached · 2010. 12. 9. · Einführung Cache-Hits Cache-Maintenance Summary PostgreSQL und memcached Building a generic Query Cache Björn Häuser imos GmbH 07.12.2010

EinführungCache-Hits

Cache-MaintenanceSummary

Grundlegende Arbeitsweise

Tabellen werden nach Zugehörigkeit gruppiertJede 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 7: PostgreSQL und memcached · 2010. 12. 9. · Einführung Cache-Hits Cache-Maintenance Summary PostgreSQL und memcached Building a generic Query Cache Björn Häuser imos GmbH 07.12.2010

EinführungCache-Hits

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 8: PostgreSQL und memcached · 2010. 12. 9. · Einführung Cache-Hits Cache-Maintenance Summary PostgreSQL und memcached Building a generic Query Cache Björn Häuser imos GmbH 07.12.2010

EinführungCache-Hits

Cache-MaintenanceSummary

Aufbau der Schlüssel

Ein Handle speichert die aktuelle Revision$rev = "{$handle}_rev"

Cache-Key bestehend aus:QueryParameterRevision des Handles

Björn Häuser PostgreSQL und memcached

Page 9: PostgreSQL und memcached · 2010. 12. 9. · Einführung Cache-Hits Cache-Maintenance Summary PostgreSQL und memcached Building a generic Query Cache Björn Häuser imos GmbH 07.12.2010

EinführungCache-Hits

Cache-MaintenanceSummary

Beispiel

Query:

SELECT user_id, login, firstname, lastnameFROM usersWHERE user_id = ?

Handle:users

Abfragen der Revision des Handles:$rev = memcache_get("{$handle}_rev");

Zusammenbauen des Keys:

$key = $handle . md5($query, implode(",", $params)) ."_rev_" . $rev;

Björn Häuser PostgreSQL und memcached

Page 10: PostgreSQL und memcached · 2010. 12. 9. · Einführung Cache-Hits Cache-Maintenance Summary PostgreSQL und memcached Building a generic Query Cache Björn Häuser imos GmbH 07.12.2010

EinführungCache-Hits

Cache-MaintenanceSummary

Cache-Maintenance

Bei Änderungen an Tabellen müssen die zugeordnetenHandles inkrementiert werdenFolgen:

Alle zwischengespeicherten Queries werden automatischungültig

On-Commit-Event-Problematik

Björn Häuser PostgreSQL und memcached

Page 11: PostgreSQL und memcached · 2010. 12. 9. · Einführung Cache-Hits Cache-Maintenance Summary PostgreSQL und memcached Building a generic Query Cache Björn Häuser imos GmbH 07.12.2010

EinführungCache-Hits

Cache-MaintenanceSummary

On-Commit-Problematik

Cache nur invalidieren wenn Transaktion COMMITedwurdeCache und Datenbank synchronisieren

Race-Conditions

Björn Häuser PostgreSQL und memcached

Page 12: PostgreSQL und memcached · 2010. 12. 9. · Einführung Cache-Hits Cache-Maintenance Summary PostgreSQL und memcached Building a generic Query Cache Björn Häuser imos GmbH 07.12.2010

EinführungCache-Hits

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 13: PostgreSQL und memcached · 2010. 12. 9. · Einführung Cache-Hits Cache-Maintenance Summary PostgreSQL und memcached Building a generic Query Cache Björn Häuser imos GmbH 07.12.2010

EinführungCache-Hits

Cache-MaintenanceSummary

Maintenance per Trigger

FOR p_memcached_handle INSELECT mt . memcached_handleFROM memcached_tables mtWHERE mot . table_name = TG_RELNAME

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 14: PostgreSQL und memcached · 2010. 12. 9. · Einführung Cache-Hits Cache-Maintenance Summary PostgreSQL und memcached Building a generic Query Cache Björn Häuser imos GmbH 07.12.2010

EinführungCache-Hits

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 15: PostgreSQL und memcached · 2010. 12. 9. · Einführung Cache-Hits Cache-Maintenance Summary PostgreSQL und memcached Building a generic Query Cache Björn Häuser imos GmbH 07.12.2010

EinführungCache-Hits

Cache-MaintenanceSummary

Maintenance per LISTEN / NOTIFY

NOTIFYSeit PostgreSQL 9.0 mit PayloadWird erst beim COMMIT zugestellt

Handler übernimmt das Inkrementieren der HandlesNachricht vs. Event transportierenVorteile:

Keine Abhänigkeit 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 16: PostgreSQL und memcached · 2010. 12. 9. · Einführung Cache-Hits Cache-Maintenance Summary PostgreSQL und memcached Building a generic Query Cache Björn Häuser imos GmbH 07.12.2010

EinführungCache-Hits

Cache-MaintenanceSummary

Maintenance per LISTEN / NOFITY

NOTIFY:

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 17: PostgreSQL und memcached · 2010. 12. 9. · Einführung Cache-Hits Cache-Maintenance Summary PostgreSQL und memcached Building a generic Query Cache Björn Häuser imos GmbH 07.12.2010

EinführungCache-Hits

Cache-MaintenanceSummary

Maintenance per LISTEN / NOFITY

Wartezeiten bis NOTIFY die Destination erreichtWenig Kontrolle über die Nachricht

Björn Häuser PostgreSQL und memcached

Page 18: PostgreSQL und memcached · 2010. 12. 9. · Einführung Cache-Hits Cache-Maintenance Summary PostgreSQL und memcached Building a generic Query Cache Björn Häuser imos GmbH 07.12.2010

EinführungCache-Hits

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 19: PostgreSQL und memcached · 2010. 12. 9. · Einführung Cache-Hits Cache-Maintenance Summary PostgreSQL und memcached Building a generic Query Cache Björn Häuser imos GmbH 07.12.2010

EinführungCache-Hits

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 20: PostgreSQL und memcached · 2010. 12. 9. · Einführung Cache-Hits Cache-Maintenance Summary PostgreSQL und memcached Building a generic Query Cache Björn Häuser imos GmbH 07.12.2010

EinführungCache-Hits

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 21: PostgreSQL und memcached · 2010. 12. 9. · Einführung Cache-Hits Cache-Maintenance Summary PostgreSQL und memcached Building a generic Query Cache Björn Häuser imos GmbH 07.12.2010

EinführungCache-Hits

Cache-MaintenanceSummary

Summary

Leicht integrierbare Lösung um Antwortzeiten zu erhöhenWenig Einfluss auf ProgrammierflussRace-Conditions

ZukunftRace-Conditions minimierenUmstellung auf Queueing-Lösung

Leave Feedback!http://2010.pgday.eu/feedback

Björn Häuser PostgreSQL und memcached