sql >> Database >  >> RDS >> PostgreSQL

Hoe cachet PostgreSQL statements en data in de cache?

Over het algemeen wordt alleen de inhoud van tabel- en indexbestanden in de cache opgeslagen in de gedeelde bufferruimte.

Queryplannen worden in sommige gevallen in de cache opgeslagen. De beste manier om hier zeker van te zijn, is door de vraag één keer voor te bereiden en deze vervolgens elke keer UIT te voeren.

De resultaten van een zoekopdracht worden niet automatisch in de cache opgeslagen. Als u dezelfde query opnieuw uitvoert -- zelfs als deze letter-voor-letter identiek is en er geen updates zijn uitgevoerd op de DB -- zal hij toch het hele plan uitvoeren. Het zal natuurlijk gebruik maken van alle tabel-/indexgegevens die zich al in de cache van de gedeelde buffers bevinden; dus het hoeft niet per se alle gegevens van de schijf opnieuw te lezen.

Update over caching van plannen

Plancaching gebeurt over het algemeen per sessie. Dit betekent dat alleen de verbinding die het plan maakt, de gecachte versie kan gebruiken. Andere verbindingen moeten hun eigen gecachte versies maken en gebruiken. Dit is niet echt een prestatieprobleem, want de besparing die je krijgt door een abonnement opnieuw te gebruiken, is bijna altijd minuscuul in vergelijking met de kosten om toch verbinding te maken. (Tenzij uw vragen echt zijn ingewikkeld.)

Het doet cache als je PREPARE gebruikt:http://www.postgresql.org /docs/current/static/sql-prepare.html

Het doet cache wanneer de query zich in een PL/plSQL-functie bevindt:http://www.postgresql.org/docs/current/static/plpgsql-implementation.html#PLPGSQL-PLAN-CACHING

Het niet cache ad-hoc zoekopdrachten ingevoerd in psql.

Hopelijk kan iemand anders ingaan op andere gevallen van caching van queryplannen.




  1. PostgreSQL-prestaties van ad-hoc SQL versus functies

  2. Kan ik LINEFEED als scheidingsteken gebruiken in de CONCAT_WS-functie van mySQL?

  3. SQLSTATE[23000]:Integriteitsbeperkingsschending:1048 Kolom 'post' kan niet null zijn

  4. Aangepast geformatteerde JSON van MYSQL PDO voor gebruik in NVD3.js