Montag Jan. 16, 2006

PostgreSQL: Sortiert die Datenbank auf der Festplatte?

Wenn eine Datenbank auf Festplatte sortieren muss, dann zieht das die Gesamtperformance u.U. ziemlich in den Boden, wenn viele dieser Sortieranfragen gleichzeitig laufen. Klassiker sind dabei Join's, die jeweils einige tausend Zeilen zurückliefern und der SQL-Programmierer die dann auch noch sortiert haben will (ORDER BY). Der Sysadmin sieht vielleicht blos, das plötzlich viel I/O Last auf der Maschine ist und weiß nicht, was los ist. Nun, wenn die hohe I/O Last von der Postgres durch solche komischen Query's erzeugt wird, dann findet man das relativ leicht. Man wechselt dazu in das Postgres-Datenverzeichnis (da wo Postgres seine Daten wie Tabellen, Indizies, usw. speichert) und sucht wie folgt:

[postgres@testrechner] # find . -name "pgsql_tmp" -ls
3188641    8 drwx------   2 postgres postgres     4096 Jan 16 18:19 ./base/17959969/pgsql_tmp

In dieses Verzeichnis wechselt man rein und läßt sich laufend den Inhalt anzeigen. Wenn ständig viele neue Dateien da drin erzeugt werden, dann sortiert die Datenbank auf der Festplatte, was eher ziemlich schlecht ist auf die Dauer. Man kann nun den entsprechenden Sortbuffer der Postgres erhöhen, aber man muss bedenken, das dieser Speicherwert PRO SORTIERUNG alloziert wird! Wenn man schon knapp bei Speicher ist oder der Wert ohnehin schon größer als 512 oder 1024 KByte ist, dann sollten die SQL-Programmierer schleunigst die Query optimieren...

Kommentare:

Senden Sie einen Kommentar:
  • HTML Syntax: Ausgeschaltet