Prozesspriorität für Session verändern

Immer wieder stoße ich auf das Problem, dass in einer “Server”-Session Daten aufbereitet werden müssen (und das mitunter in erheblichem Umfang). Diese Prozesse sollen jedoch die Performance der Client-Sessions nicht beeinflussen, zumal die Server-Prozesse nicht zeitkritisch sind und damit eine geringere Priorität für die Ausführung wünschenswert ist.

Leider :frowning: habe ich dazu bisher nichts (und ich meine absolut NICHTS) finden können. Hat jemand bereits mit diesem Problem zu tun gehabt?

Freue mich auf hilfreiche Antworten. 8)

Das musst du mal genauer erklären.

Du hast einen Datenbestand, über den Auswertungen gefahren werden. Wie sind die implementiert? Per Trigger angestossene Funktionen in der DB? Extra Tool, das über TCP/Socket auf die DB zugreift und die Auswertungsergebnisse wieder in der DB ablegt? Irgendwas ganz andreas?

Die Clients, sind letztendlich einzelne Applikationen, die auf die DB zugreifen?

Der Zugriff der Clients leidet letztendlich darunter, das während der Client-Zugriffe die Zugriffe des Auswertungsprozesses die DB beschäftigen?

Domski

Domski > Danke, war wohl etwas dünn formuliert :wink:

Mit den Clients liegst Du richtig. Das ist eine stinknormale Java-App, die per JDBC eher kleinere Portionen Daten verdaut bzw. zurückschreibt.

Auf dem Host (Linux + Postgres) läuft auch ein Java-Programm, dass zahlreiche Aufgaben zu erledigen hat (oft nur Kleinigkeiten, die zentral laufen müssen z.B. automatischer Feiertagskalender etc.). Neben den Kleinigkeiten, besteht auch die Aufgabenstellung, dass basierend auf verschiedenen Stammtabellen (welche durch Aktionen der Clients verändert werden können), Daten für ein anderes System generiert werden müssen (erforderlich, da das andere System weder Performance noch Kapazität für solche Zwecke bereitstellt). Diese Generierung ist recht umfangreich und wird durch das Java-Programm auf dem Host initiiert per Funktionsaufruf (plpgsql) in der DB (SELECT generate()).

Was ich mir vorstelle, ist die Reduzierung der Prozesspriorität für:

:arrow: a)
eine einzelne Abfrage (hier: SELECT generiere())

:arrow: b)
den gesamten Prozess der DB-Session, da es mich nicht stören würde, wenn auch die anderen Kleinigkeiten, die auf dem Server laufen müssen, mit niedrigerer Priorität ausgeführt werden.

:idea: Ich habe bereits darüber nachgedacht einen eigenen Dämon zu schreiben, der anhand der Connection-Eigenschaften der Prozesse auf dem Host, den gesuchten Prozess ermittelt und dessen Priorität verändert (technisch dürfte das kein Problem darstellen, aber ich halte das für wenig elegant und darüber hinaus besitze ich kein detailiertes Wissen darüber, welche Seiteneffekte evtl. für den Prozess entstehen, zumal der Session-Prozess ja nicht allein läuft, sondern im Verbund mit den 3 Hauptprozessen der Datenbank steht).

Was ich mir wünschen würde: SET SESSION … PRIORITY IDLE; :smiley: Was bedeuten würde, dass ich innhalb der Session selbst bestimmen kann, mit welcher Priorität welche Aufgaben erledigt werden (also auch die gleiche Funktion mit verschiedener Priorität).

Experten helft! -> Freue mich schon auf die Antworten. :slight_smile: