Oracle 8 und prozesse/sitzungen

hallo,

unsere datenbank ist auf 200 prozesse beschränkt –
unser db-admin kam heute mit dieser frage zu mir, warum ein programm von mir 3 prozesse verwenden würde??

gute frage dacht ich mir — ein anderes fremdes programm(gekauft!) verwendet 10 prozesse!!!
widderum andere programm kommen mit 1nem prozess ganz und gar aus

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.

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

ist meine vermutung richtig – oder wie ist es wirklich?

gruß

rasta

hi!

unser db-admin kam heute mit dieser frage zu mir, warum ein
programm von mir 3 prozesse verwenden würde??

3 connections?

gute frage dacht ich mir — ein anderes fremdes
programm(gekauft!) verwendet 10 prozesse!!!
widderum andere programm kommen mit 1nem prozess ganz und gar
aus

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)

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.

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

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“

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 …

grüße,
tomh

ps: 200 prozesse sollten „im normalfall“ eigentlich ausreichend sein - es kommt natürlich darauf an, wieviele user gleichzeitig am werken sind, wieviele scripts gleichzeitig laufen etc. und vor allem, was die maschine verträgt

pps: es ist noch sehr früh und etwaige falsche vermutungen möge man mir verzeihen

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 :wink:

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.

Hallo Ihr beiden, und ebenfalls einen schönen guten… --ähem … guten mittag

Vielen Dank für eure Antworten. Haben mir schon geholfen.

zum pl/sql developer:

ist ein meiner meinung nach sehr gutes programm.

http://www.allroundautomations.nl/plsqldev.html

schaut es euch an-- 1000% besser als z.b. das dba-studio von oracle.

ich habe das verhalten über die sessions über das dba-tool meines db-administrators gesehen. wollte auch nur testen, wann eine neue session erstellt wird.

das programm macht sicher nicht für jeden sql eine eigene session auf.
nur wenn du ein „neues sql“-fenster öffnest und einen sql oder was auch immer absetzt, wird vermutlich ein eigener connect getätigt. daher weht der wind…
wenn das sql-fenster-objekt wieder geschlossen wird, verschwindet auch die session

mein db-admin hat die session pro client-programm auf 350 erhöht und ihn „waffelts“ immer noch auf die nase… und zwar schon bei einem kleineren wert-- sprich die max anzahl an sessions wird nicht erreicht.

irgendwo muss noch ein limit eingestellt sein. das kann natürlich viele ursachen haben. aber vielleicht fällt dir ja zufällig ein tip ein - mein db-admini wirds dir danken

danke nochmal
viele grüße

rasta

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo RASTA!

Vielen Dank für eure Antworten. Haben mir schon geholfen.

Gerne doch!

schaut es euch an-- 1000% besser als z.b. das dba-studio von
oracle.

Kunststück :wink:

ich habe das verhalten über die sessions über das dba-tool
meines db-administrators gesehen. wollte auch nur testen, wann
eine neue session erstellt wird.

das programm macht sicher nicht für jeden sql eine eigene
session auf.
nur wenn du ein „neues sql“-fenster öffnest und einen sql oder
was auch immer absetzt, wird vermutlich ein eigener connect
getätigt. daher weht der wind…
wenn das sql-fenster-objekt wieder geschlossen wird,
verschwindet auch die session

Na dann passt ja alles! Ich verwende übrigens so ein billigis aber dafür unglaublich funktionales Shareware-Tool von Benthic . Dem kann man mitteilen, ob man die Tabs jeweils in einer eigenen Session haben will oder alle gemeinsam. Wollte ich nur mal gesagt haben, und nein, ich bin mit dem Herrn Mark Ford weder verwandt noch verschwägert…

mein db-admin hat die session pro client-programm auf 350
erhöht und ihn „waffelts“ immer noch auf die nase… und zwar
schon bei einem kleineren wert-- sprich die max anzahl an
sessions wird nicht erreicht.

Was sagt denn die Fehlermeldung? Wie bitteschön hat er die Sessions pro Client-Programm erhöht? Bitte mir auch sagen!

irgendwo muss noch ein limit eingestellt sein. das kann
natürlich viele ursachen haben. aber vielleicht fällt dir ja
zufällig ein tip ein - mein db-admini wirds dir danken

Da gäbe es noch folgende Parameter, die ich für in Frage kommend halte (mit Fehlermeldung wär’s aber einfacher):
sessions
license_max_sessions (sollte bei 9i 0 sein)
shared_server_sessions (sollte bei dedicated server 0 sein)
processes
resource_limit
shared_pool_size
sga_max_size
large_pool_size
java_pool_size
session_max_open_files

Ich hoffe ich hab’ da nix übersehen. Ich weiss auch nicht auswendig, ob alle diese Parameter eine Fehlermeldung erzwingen, mehr kann man wirklich nur mit der Fehlermeldung sagen.

Gruß,
Martin

Na dann passt ja alles! Ich verwende übrigens so ein billiges
aber dafür unglaublich funktionales Shareware-Tool von
Benthic .
Dem kann man mitteilen, ob man die Tabs jeweils in einer
eigenen Session haben will oder alle gemeinsam. Wollte ich nur
mal gesagt haben, und nein, ich bin mit dem Herrn Mark Ford
weder verwandt noch verschwägert…

Da schickt man einmal ohne Vorschau ab… eh klar. Hier der funktionierenden Link:
http://www.benthicsoftware.com

Gruß nochmal,
Martin

P.S: Kann man hier eigentlich Links nur mit dem http… darstellen oder funktioniert irgendwas ähnliches wie Der Text zum Anklicken auch?

hallo martin,

ohne dein tool und seine funktionen schmälern zu wollen-- kenn ich ja ned- davon abgesehen siehts nicht so arg professionell aus, imho
probier doch mal das tool aus, das ich angegeben hatte – kostet ebensoviel und der download ist auch kostenlos(30 tage, mit entsprechendem registry-eintrag unendlich, aber psst) – meiner meinung nach unschlagbar
ich glaube, das du begeistert sein wirst!

auf jeden fall habe ich deine und tomh antwort weitergegeben und werde dir nochmal antworten sobald sie mir antwortet

vielleicht funzt es ja so
[Der Text zum Anklicken](abc://www.abc.org)

man verwende den „pre“-tag – dann wird anscheinend von der www-engine der text nicht umgesetzt

denn ein "[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

ps: 200 prozesse sollten „im normalfall“ eigentlich
ausreichend sein

da ist natürlich die Frage, was „Normalfall“ ist und was für Anwendungen überhaupt laufen. Wenn ich unsere DAtenbank auf 200 Prozesse runterdrehen würde, dann würde bald das Telefon klingeln :smile:

Holla! Ich hab’ zwar mit dem PL/SQL Developer noch nicht
gearbeitet aber das wäre wirklich heftig.

Ich halte das durchaus für möglich und macht auch Sinn. Wenn ich mich mit einem solchen Tool (ich nehme den SQLNavigator) an die Datenbank connecte und einen länger dauernden Select ausführe, wäre ich sonst blockiert, bis mein Select-Ergebnis da ist. Der SQLNavigator meldet das in diesem Fall und fragt ordentlich nach, ob er für das nächste Select nicht vielleicht eine zweite Session aufmachen sollte. Ich kann mir aber durchaus auch tools vorstellen, die das ohne Nachfrage machen.

genau deswegen auch doppelten hochkomma - wenn ich bei manchen servern auf 200 raufdrehe, würde die kiste eingehen, bei manchen auf 200 runter und ich würde sofort feierabend machen :wink:

grüße,
tomh

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]