Ergebnis 1 bis 6 von 6

Thema: Durchsuchen der Tabellen manuell erzwingen

  1. #1
    Thunderstorm ist offline Neuer Benutzer
    Registriert seit
    15.03.2011
    Beiträge
    5

    Frage Durchsuchen der Tabellen manuell erzwingen

    Heyho,

    ich habe folgendes Problem: Aus Performancegründen benutze ich für meine Functions IMMUTABLE, wobei STABLE eigentlich besser wäre (... aber das ist halt wesentlich langsamer).

    Es würde reichen, wenn Postgres nur alle 1-2 Wochen die Tabelllen neu durchsucht. Gibt es da eine Möglichkeit das von Hand anzustoßen? Dann könnte ich das nämlich prima auf IMMUTABLE lassen.

    Weiß da jemand etwas zu?

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.465

    Standard

    Zitat Zitat von Thunderstorm Beitrag anzeigen
    Heyho,

    ich habe folgendes Problem: Aus Performancegründen benutze ich für meine Functions IMMUTABLE, wobei STABLE eigentlich besser wäre (... aber das ist halt wesentlich langsamer).

    Es würde reichen, wenn Postgres nur alle 1-2 Wochen die Tabelllen neu durchsucht. Gibt es da eine Möglichkeit das von Hand anzustoßen? Dann könnte ich das nämlich prima auf IMMUTABLE lassen.

    Weiß da jemand etwas zu?
    Materialized Views, Cron.


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.055

    Standard

    Vielleicht kannst du uns erst mal konkret erklären, was du da machst.
    Dann können wir dir bei deinem Problem helfen, und nicht bei den Workarounds.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  4. #4
    Thunderstorm ist offline Neuer Benutzer
    Registriert seit
    15.03.2011
    Beiträge
    5

    Standard

    Zitat Zitat von ads Beitrag anzeigen
    Vielleicht kannst du uns erst mal konkret erklären, was du da machst.
    Dann können wir dir bei deinem Problem helfen, und nicht bei den Workarounds.
    Naja, ich habe mir eine Function geschrieben, die ein SELECT (mit 4-5 Joins) auf eine etwas größere Tabelle (momentan etwa 10 GB) macht. Diese Function hatte bisher immer das Attribute STABLE. Die Ausführungszeit der (selben) Query (bzw. der Aufruf der Function mit selben Parametern) belief sich immer auf 2000-5000ms (vermutlich je nach dem ob es schon im Cache lag oder nicht). Wenn ich das allerdings auf IMMUTABLE setze, dann ist zwar die erste Query langsam, aber bei der zweiten sind es dann nur noch 300-500ms. So wie ich das verstanden habe, optimiert Postgres bei IMMUTABLE gewisse Dinge aggressiver.

    Es kommen zwar jeden Tag mindestens 100.000 Datensätze in die besagte Tabelle hinzu, aber die Aktualität der Daten spielt hierbei eine nicht sehr große Rolle. Deshalb würde es theoretisch reichen wenn ich der Datenbank alle 1-2 Wochen mal mitteile, dass sich die Daten doch geändert haben. Dann sind die Ergebnisse trotzdem aktuell genug und die Anfragen brauchen nicht zu lange.

  5. #5
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.055

    Standard

    Das kommt daher, das PostgreSQL das Ergebnis deiner Anfrage speichert, und bei folgenden Aufrufen die Funktion gar nicht mehr ausführt.

    Wie lange braucht deine Anfrage selbst, und wieviele Ergebnisse lieferst du zurück?
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  6. #6
    Thunderstorm ist offline Neuer Benutzer
    Registriert seit
    15.03.2011
    Beiträge
    5

    Standard

    Zitat Zitat von ads Beitrag anzeigen
    Das kommt daher, das PostgreSQL das Ergebnis deiner Anfrage speichert, und bei folgenden Aufrufen die Funktion gar nicht mehr ausführt.

    Wie lange braucht deine Anfrage selbst, und wieviele Ergebnisse lieferst du zurück?
    Ich habe das mal eben ausprobiert:
    Das reine SQL-Statement brauchte beim ersten Durchlauf 2124.695 ms, bei allen weiteren ca. 200ms. Ich beschränke die Ergebnismenge mit LIMIT auf 50.

Ähnliche Themen

  1. Frage Arrays durchsuchen
    Von Kaptain Iglo im Forum SQL
    Antworten: 6
    Letzter Beitrag: 23.03.2011, 11:03
  2. spaltenwert in abfrage manuell zuweisen
    Von michi4004 im Forum SQL
    Antworten: 1
    Letzter Beitrag: 19.10.2009, 14:51
  3. Polygon-Schließung erzwingen
    Von TobWen im Forum PostGIS
    Antworten: 4
    Letzter Beitrag: 13.05.2009, 20:30
  4. Frage manuell zum nächsten WAL segment switchen?
    Von Job im Forum Allgemeines
    Antworten: 18
    Letzter Beitrag: 07.01.2009, 18:03
  5. Funktionen nach text durchsuchen
    Von hafi im Forum Trigger und Funktionen
    Antworten: 4
    Letzter Beitrag: 01.04.2008, 11:55

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum