Warum puffert eine SELECT-Anweisung den Cache in Postgres?


8

Ich laufe EXPLAIN (ANALYZE, BUFFERS) SELECT ...auf meinem Postgres 9.3-Server. Am Ende sehe ich so etwas wie Buffers: shared hit=166416 dirtied=2in der Ausgabe.
Aus der Dokumentation geht hervor , dass "schmutzig":

Die Anzahl der verschmutzten Blöcke gibt die Anzahl der zuvor unveränderten Blöcke an, die durch diese Abfrage geändert wurden. Die Anzahl der geschriebenen Blöcke gibt die Anzahl der zuvor verschmutzten Blöcke an, die von diesem Backend während der Abfrageverarbeitung aus dem Cache entfernt wurden.

Dies klingt für mich so, als ob der Vorgang des Markierens eines verschmutzten Blocks nur beim Aktualisieren von Daten stattfinden sollte. Meine Abfrage ist jedoch eine SELECTund liest nur Daten. Ich würde mir vorstellen, dass nur Treffer oder Lesungen gemeldet werden. Ich irre mich offensichtlich. Was genau passiert in dieser Situation?

Antworten:


10

Dies hat einen einfachen Grund.

In PostgreSQL muss eine Zeile eine Sichtbarkeitsprüfung durchlaufen. Beim ersten Lesen prüft das System, ob eine Zeile für alle sichtbar ist. Wenn dies der Fall ist, wird es "eingefroren". Hierher kommen die Schriften. In ähnlicher Weise werden VACUUMauch Bits gesetzt.

Es gibt eine ausführliche Erklärung: http://www.cybertec.at/speeding-up-things-with-hint-bits/ .


1
Ihr Blog ist eine Quelle wirklich wertvoller Informationen. Fügen Sie dieser Antwort gleichzeitig die Hauptpunkte Ihres Beitrags hinzu, damit sie den hier angegebenen Regeln entspricht.
Dekso

die sache ist: in postgresql muss eine zeile eine sichtbarkeitsprüfung durchlaufen. Beim ersten Lesen prüft das System, ob eine Zeile für alle sichtbar ist. Wenn dies der Fall ist, wird es "eingefroren". Hierher kommen die Schriften. Übrigens setzt Vakuum auch Bits. es ist ein ähnliches Problem.
Hans-Jürgen Schönig

Ich habe eine Beschwerde. Sie meinten hier sicherlich "Hinweisbits". "Frozen" ist in PostgreSQL etwas ganz anderes, und Tupel werden während eines Zeitraums nie eingefroren SELECT.
Laurenz Albe
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.