großer postgres Prozess

ich habe PostgreSQL 9.2.2 32 bit auf einem Windows 2003 Server laufen

Konfiguration:
shared_buffers = 512MB
temp_buffers = 128MB
work_mem = 32MB
maintenance_work_mem = 64MB

in 2 Datenbankinstanzen ist jeweils eine Tabelle vorhanden (gleiches Schema)
Tab1 ca. 1.000.000 und Tab2 ca. 3.000.000 Datensätze
Tab1 ca. 130MB und Tab2 ca. 330MB

öffne ich im PGAdmin das Abfragefenster und schicke das Statement “SELECT COUNT(*) FROM Tab1;” ab, wächst der Speicherverbrauch der postgres.exe auf über 140 MB
das gleiche bei der zweiten Tabelle ca. 11 MB

beide Tabellen haben nur einen Index - auf der Schlüsselspalte (integer)

WORAN kann das liegen?

Was genau gefällt Dir nicht daran, daß der Speicher genutzt wird?


Ein count(*) ohne weitere WHERE-Condition führt zu einem kompletten sequentellen Scan der Tabelle - da ist also alles einmal quer durch den RAM zu ziehen, JEDER EINZELNE DATENSATZ.

  1. Der Server geht in die Knie, wenn dass bei 100 gleichzeitigen Verbindungen passiert
  2. Die Speichernutzng nimmt nur bei einer Tabelle solche Ausmaße an

Dir ist schon klar, dass jede dieser 100 Verbindungen die 32MB work_mem pro Sortieroperation verwenden darf? Ein einzelnes Statement kann mehr als eine Sortieroperation benötigen (z.B. ein Sort, ein Hash-Join).

Wieviel Speicher da verbraucht wird kannst Du ja ausrechnen…

Selbst wenn es normal ist, dass der Speicher genutzt wird, warum nur bei einer Tabelle und noch dazu bei der kleineren?