Schönen Guten Morgen allerseits!
Wenn schon nach mir gerufen wird, dann gebe ich eben auch meinen Senf dazu (und fühle mich unendlich geschmeichelt
Grundsätzlich ist einmal zwischen Sessions und Processes zu unterscheiden. Auch auf einer Instance, auf der kein User eingeloggt ist laufen Prozesse (Logwriter, Process Monitor, Job Queues, Database Writer, etc.).
Ansonsten wird für jede User Session (also immer, wenn ein Connect zur DB gemacht wird, egal, ob der gleiche User schon eingeloggt ist oder nicht) ein neuer Prozess am Server gestartet (Ausnahme: Shared Server - da teilen sich mehrere Sessions einen oder mehrere Server Prozesse). Den zu einer Session gehörigen Prozess findest Du übrigens, wenn Du die „paddr“ in v$session mit der „addr“ in v$process joinst, aber da geht’s schon ziemlich ans eingemachte.
Soweit zum Grundsätzlichen. Zu Deinen Fragen.
unser db-admin kam heute mit dieser frage zu mir, warum ein
programm von mir 3 prozesse verwenden würde??
Das hast Du ja eigentlich schon beantwortet: Je eine Session für die beiden User (die allerdings nicht zwingend notwendig wäre, aber dafür müsste ich die dazugehörige Problemstellung in Deinem Programm besser kennen, um da eine fundierte Antwort geben zu können) und eine für Crystal Reports (die wiederum lässt sich meines Wissens nicht umgehen).
3 connections?
Das sollte bei dedicated server keinen Unterschied machen - siehe dazu ganz oben.
gute frage dacht ich mir — ein anderes fremdes
programm(gekauft!) verwendet 10 prozesse!!!
widderum andere programm kommen mit 1nem prozess ganz und gar
aus
In der Regel kommt man mit einer Session auch durch. In unserem Programm hier verwenden wir eine zweite Session eigentlich nur um zwei (bzw. drei) Probleme zu lösen:
a) Um einen längeren Task in einer Session zu starten, die dann über DBMS_PIPE mit der zweiten Session kommuniziert (Stichworte Progress Messages, Abbruch)
b) Um die Transaktionslogik auszutricksen (wäre aber mittlerweile auch in der gleichen Session möglich, Stichwort Autonomous Transactions)
[c) Crystal Reports etc.]
Natürlich gibt es Problemstellungen, die sich mit mehreren Sessions schöner lösen lassen, man muss sich halt nur im Klaren sein, dass damit eventuell unnötig Resourcen verbraten werden.
es kommt auf die komplexität der anwendung, auf
performancegewinnung durch parallelisierung usw. an (eine
applikation braucht 10 minuten einen prozess, eine andere
braucht für eine minute 10 prozesse)
Da geht’s aber dann RICHTIG ans Eingemachte. Man bedenke, dass die beiden Sessions in unterschiedlichen Transaktionen arbeiten. Viel mehr als einen SELECT würde ich mir da also aufgrund der Synchronisationsproblematik kaum zutrauen (vor allem weil es da mit Sicherheit effektivere und einfacher Mittel gibt Oracle in den Geschwindigkeitsrausch zu versetzen).
ich mich also mit meinem tool(PL/SQL Developer) an die
datenbank angemeldet und kontrolliert.
nach der anmeldung 1 prozess für mich offen
danach einen select auf eine tabelle abgesetzt, 1 weiterer
prozess offen
denselben sql nochmal abgesetzt, insgesamt 3 prozesse offen
meine vermutung ist:
das mein tool für jede aktion(wie sql, command oder anmeldung)
einen eigenen prozess startet.
Holla! Ich hab’ zwar mit dem PL/SQL Developer noch nicht gearbeitet aber das wäre wirklich heftig. Wo hast Du denn nachgesehen? Macht er die alten Sessions wieder zu, oder bleiben die bis in alle Ewigkeit stehen (genauer gesagt bis entweder der Listener meckert oder die DB runtergefahren wird)?
Wenn da wirklich ununterbrochen Sessions aufgemacht werden, dann verstehe ich Deinen Admin…
kenne pl/sql developer nicht, jedoch kann ich mir das schon so
vorstellen - mein toad startet nur einen - außer ich lege es
darauf an
Ich kann mir das ehrlich gesagt aber nicht vorstellen. Eine Session für jedes Statement? Da hätte dann jemand das Konzept von Sessions nicht verstanden, meine ich.
mein programm verwendet 3 prozesse da es mit 2 verschienden
datenbankuser-tabellen arbeitet. 1mal wird eine tabelle noch
von „extern“ abgefragt(crystal report) --> deswegen 3
prozesse
das ist „einleuchtend“
Das habe ich ja oben schon kommentiert.
ist meine vermutung richtig – oder wie ist es wirklich?
meiner meinung nach schon, allerdings würde ich da noch auf
eine stellungnahme von martin a la the beast warten …
Hier isser schon, hat aber nicht so wirklich viel zum Thema beitragen können. Ehrlich gesagt fehlt mir auch ein wenig die echte Frage dahinter. Wenn es darum geht, dem eigenen Programm die mehrfachen Sessions abzugewöhnen: Ganz einfach - musst nur die Programmlogik ändern. Bei Fremdprogrammen: Pech gehabt, ich würde das Verhalten, das Du oben beschrieben hast allerdings schon eher als Bug werten und infolge dessen den Support kontaktieren (das kann ja nicht gewollt sein).
Wie gross dein Admin den Parameter Processes festlegen sollte ist eigentlich ziemlich schlecht dokumentiert, weder in der Doku noch in Metalink wirst Du auf jeden Fall wirklich schlau. Ich persönlich tendiere hier dazu, den Parameter relativ hoch anzusetzen (also ruhig mal 3-4x die Anzahl der User, die auf die DB zugreifen, speziell wenn die das mit mehreren Programmen gleichzeitig tun). Natürlich sollte er aber wieder nicht so hoch sein, dass die DB ins stolpern kommt, nur weil der Server nichts mehr tut ausser Memory swappen. Das führt dann nämlich zum netten Effekt eines auf die HD ausgelagerten Caches, was auch nicht ganz im Sinne des Erfinders ist. Das schöne an den DB Parametern ist: Du findest für fast jeden beliebigen Wert im Web eine Begründung von Fachleuten (und zwar wirklich von Experten, nicht von irgendwelchen auf der Nudelsuppe dahergeschwommenen Besserwissern), die Dir erklärt, warum man das unbedingt so und nicht anders setzen soll. Fazit: Ausprobieren und Performance beobachten…
Gruß,
Martin
pps: es ist noch sehr früh und etwaige falsche vermutungen
möge man mir verzeihen
PS.: Es ist zwar nicht mehr ganz so früh, aber dieser frommen Bitte schliesse ich mich mangels Schlaf in der vergangenen Nacht an.