Hallo,
habe in einer Transaktion mehrere Statements abzuarbeiten, wobei diese Transaktion unter PostgreSQL ca. 2 Minuten benötigt und als Vergleich mit der SQLBase von der wir Richtung PostgreSQL wechseln, die selbe Transaktion nur ca. 3 Sekunden benötigt.
Folgendes Statement wurde als der Flaschenhals identifiziert (habe mit der Entwicklungsumgebung im Debug/Animationsmodus jene Statements rausgepickt, bei denen die App auf das Ergebnis lange gewartet hat:
explain analyse select sum (coalesce(nettobetrag,0)-coalesce(rabattbetrag,0)), sum (coalesce(ustbetrag,0)),
sum (coalesce(bruttobetrag,0)), sum (1), sum(coalesce(is_ausgelifert,0)), sum(coalesce(is_fakturiert,0)),
sum (coalesce(ekwert,0)), sum (coalesce(anzeigenabgabe,0))
from sysadm.aufpos where auftraginr = 615404 and ebene = 0;
Wenn ich das Statement Analysiere komme ich auf Superkurze Antwortzeiten:
“Aggregate (cost=622.23…622.25 rows=1 width=75) (actual time=0.282…0.282 rows=1 loops=1)”
" -> Index Scan using xif23aufpos on aufpos (cost=0.00…619.01 rows=160 width=75) (actual time=0.026…0.033 rows=2 loops=1)"
" Index Cond: (auftraginr = 615404)"
" Filter: (ebene = 0)"
“Total runtime: 0.421 ms”
Die Anzahl der Datensätze die summiert werden sollen schwankt zwischen 1 - bis ca. 100, wobei der vorhandene Index benutzt wird.
Wie ist das möglich? Die PG läuft einem HP Dual Xenon 2,4GHz, 2GB Speicher auf einem Raid-1 System.
Das postgresql.conf File hat folgende Einstellungen:
port = 5432
max_connections = 100
shared_buffers = 256MB
maintenance_work_mem = 16MB
max_fsm_pages = 204800
fsync = on
effective_cache_size = 512MB
stats_start_collector = on
stats_row_level = on
autovacuum = on
Die restlichen Parameter sind auskommentiert.
Jeder Hinweis zur Beschleunigung der Kiste ist herzlich willkommen.
Hans