Datenbank öffnen wann?

Hier dreht es sich um den PostGre Server

Moderator: Moderatoren

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Datenbank öffnen wann?

Beitrag von Manfred »

ich weiß nicht, ob das Thema hier schonmal angesprochen wurde. Ich habe aber konkret nichts gefunden und außerdem liebe ich es Grundsatzdiskussionen und Glaubenskrisen zu entfachen. :badgrin:
Gibt es irgendeinen Ratschlag, wie man vorgehen sollte bzg. der Arbeit mit PostgrSQL? Immer Connection zur Datenbank, die öffnen, Daten auslesen und wieder schließen und Connection beenden?. Oder alles einmal am Programmanfang und offen lassen? Oder einfach nur am Anfang eine Connection erstellen, die Verbindung bis zum Ende des Programms halten aber immer wieder zwischendurch die DAtenbank schließen und bei Bedarf wieder öffnen? Wieviel Zeit geht dabei drauf, wenn jedesmal eine Connection aufgebaut und wieder beendet wird usw. usw.?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Datenbank öffnen wann?

Beitrag von Jan »

Manfred,

da kann ich zumindest zu PostgreSQL nichts zu sagen. Nur zwei Erfahrungen aus dem ADS:

- Das Öffnen von FOXCDX im ADS dauert sehr lange. Geschätzt 2x so lange wir reine FOXCDX.
- Zum Öffnen von Tabellen im ADS gibt es einen ewig offenen PDR 5993: Der verliert bei jedem Öffnen und schließen einer Tabelle 32 Bytes. Das kann sich dann eventuell schon mal läppern.

Das mag bei PostgreSQL anders sein. Zeigt aber, das es auch bei SQL schon mal klemmen kann. Das Geschwindigkeitsproblem kann man ja noch austesten. Das mit dem Speicherleck ginge ja auch noch. Aber es mag dort auch andere Probleme geben als beim ADS. Man muß da leider die Augen auch in ungewohntem Terrain offen haben.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Datenbank öffnen wann?

Beitrag von brandelh »

Jede offene Verbindung kostet Resourcen,
... wenn du 10.000 Angestellte hast, die den ganzen Tag zuerst Verbindungen aufmachen und abends wieder zumachen ... die Daten aber tatsächlich selten brauchen dann ist das unnötig.
... wenn du 10 Angestellte hast, die den ganzen Tag zuerst Verbindungen aufmachen und abends wieder zumachen ... die Daten aber tatsächlich selten brauchen dann ist völlig egal, bei 10 gehts immer ;-) .

wenn du dauernd Anfragen hast, könnte ich mir vorstellen, dass es schneller ist die Verbindung offen zu lassen.

Tatsächlich habe ich zum Testen aber zu wenige Anwender um das zur prüfen.
Gruß
Hubert
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: Datenbank öffnen wann?

Beitrag von Marcus Herz »

Rein API Technisch kann man die Connection offen lassen, benötigt auf dem Server nicht viel Speicher. Man sollte aber nicht gebrauchte Abfragen (was das Offenhalten einer Tabelle betrifft) wieder schliessen, den es wird je Abfrage (also für jeden User) eine Speicherkopie auf dem Server angelegt.
Das wird auch für die PGDBE nicht anderes sein. Connection öffnen dauert immer etwas, sowohl ADS als PostgrSQL. Ich öffne einmal eine Connection im Main (Egal ob ADS oder PostgrSQL) und die bleibt bis zum Schluss offen. Meine größte Applikation hat vielleicht 150 aktive gleichzeitige Anwender, davon öffnet jede App 2 Connections für jeweils einen Thread.

PS Manfred: Außerdem find ich es gut, Grundsatzfragen zu stellen und gemeinsam zu diskutieren.
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Datenbank öffnen wann?

Beitrag von Werner_Bayern »

Servus,

wir machen es ähnlich wie Marcus, wobei wir pro Thread eine Connection machen, obwohl eine am Programmanfang reichen würde. Das hat historische Gründe und Gründe der Kapselung, ähnlich wie bei dbfntx / Thread.

Insgesamt dauert nur der erste connect auf den PG-Server etwas, jeder weitere geht dann rasend schnell. Wenn Du Dir im Taskmanager den Speicherbedarf auf dem PG-Server anschaust wirst Du sehen, dass der marginal ist. Die Verbindung kann also offen bleiben, die lokalen Tabellen kannst öffnen und schließen, wie Du lustig bist.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Datenbank öffnen wann?

Beitrag von Manfred »

die lokalen Tabellen?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Datenbank öffnen wann?

Beitrag von Tom »

Ich nehme an, Werner meint hier "ISAM classic" (ohne PGDBE und alles). Man kann z.B. im ProcMon schön sehen, wie schnell das geht. Langsam wird das nur bei hyperaktivem bzw. schlecht konfiguriertem Virenscanner.
Herzlich,
Tom
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Datenbank öffnen wann?

Beitrag von ramses »

Ich arbeite seit einiger Zeit intensiv mit Postgres. Damit meine ich nicht die PGDBE sondern direkte Aufrufe der Funktionen aus der Postgres pqlib.dll. Die Alaska PG Geschichte verwende ich gar nicht.

Es ist absolut problemlos beim Start des Programms die Verbindung zum Postgres Server aufzubauen und diese dann während der ganzen Laufzeit des Programm zu nutzen wenn du:
a) nicht mehrere 10'000 User hast
b) vor jedem Aufruf zuerst den Verbinungsstatus prüfst ( PQStatus()) und ggf. die Verbinung erneuerst
c) sicherstellst dass du die Resultat-Sets auch konsequent löscht's ( PQClear(nResult) )

Dabei is C) ist besonders wichtig weil der Server diese sonst bis zum Verbindungsende vorhält und dies u. U. sehr viel Speicher belegt.

Wenn du die Verbinung immer schliesst und erneut öffnest verlierst du u.U. einiges an Zeit besonders wenn der Server auch noch andere User bedient.
Valar Morghulis

Gruss Carlo
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Datenbank öffnen wann?

Beitrag von Manfred »

das einzige Problem was mir ein Bekannter erzählt hat wäre, wenn die Verbindung immer bestehen bleibt, aber der schlaue User aus irgendwelchen auch immer vorhandenen Gründen den PC neu startet, dann bleiben wohl Leichen übrig, die man dann entsprechend behandeln muß.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Datenbank öffnen wann?

Beitrag von ramses »

Manfred hat geschrieben: Fr, 17. Apr 2020 8:28 das einzige Problem was mir ein Bekannter erzählt hat wäre, wenn die Verbindung immer bestehen bleibt, aber der schlaue User aus irgendwelchen auch immer vorhandenen Gründen den PC neu startet, dann bleiben wohl Leichen übrig, die man dann entsprechend behandeln muß.
Aber nicht auf dem Postgres Server. Wenn das Verbindungs-Timeout abgelaufen ist räumt der Server die Verbindung und alle überreste der abgebrochenen Verbinung weg.

Wenn das Programm natürlich lokal auf C:\ irgendwelche Dateien anlegt, dann musst du die entsprechend behandeln.
Valar Morghulis

Gruss Carlo
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: Datenbank öffnen wann?

Beitrag von Marcus Herz »

Auf Leichen auf dem Server hast du keinen Einfluss. Das ist Aufgabe der DBMS.
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Datenbank öffnen wann?

Beitrag von Manfred »

ok, dann war es wohl das System mit dem der Bekannte arbeitet. Bei ihm läuft progress und der Client dazu ist wohl auch proprietär.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Datenbank öffnen wann?

Beitrag von ramses »

Hallo Manfred


es ist so: progress <> postgreSQL
Valar Morghulis

Gruss Carlo
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Datenbank öffnen wann?

Beitrag von Manfred »

das ist schon klar, aber sind die alle so unterschiedlich von der Philosophie her?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Datenbank öffnen wann?

Beitrag von Jan »

Manfred,

im ADS mache ich beim Programmstart eine Connection auf. Und die bleibt stehen bis zum Programmende. Bislang gab das noch keine negativen Nebenwirkungen.

Wenn ich ein Programm per Taskmanager, ALT-C, Rechnerabsturz, ... gewaltsam abbreche, kann ich natürlich die Connection nicht sauber beenden. Der ADS quittiert das damit, das die Verbidnung noch steht. Und alle zu dem Zeitpunkt geöffneten Tabellen weiter offen sind. Daß das alles nicht der Realität entspricht merkt der erst nach dem eingestellten Timeout. Und bereinigt das dann automatisch. Aber so lange sind die Tabellen auch gesperrt. Das sind aber auch die einzigen Nebenwirkungen in dem Bezug.

Ich setze voraus das der PostgreSQL da ähnlich reagiert. Ansonsten würden sich ja weltweit millionen von PostgreSQL-Servern langsam zumüllen, weil solche ungeplanten Abbrüche ja ständig passieren (ich wiill gar nicht wissen wie viele Anwender heute noch ihre Programme beenden indem sie einfach den Rechern aus machen). Und garantiert sehr viele davon die Connection beim Programmstart öffnen und dann bis zum Programmende nicht mehr schließen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Datenbank öffnen wann?

Beitrag von ramses »

Ich setze voraus das der PostgreSQL da ähnlich reagiert.
Nein. Ganz und gar nicht. Es gibt gar keine Record und Filelocks wie unter DBF und ADS .....
Und garantiert sehr viele davon die Connection beim Programmstart öffnen und dann bis zum Programmende nicht mehr schließen.
Wenn du jeweils vor einer neuen Anforderung den Verbinungstatus prüfst ist das so.
Valar Morghulis

Gruss Carlo
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Datenbank öffnen wann?

Beitrag von Jan »

Carlo,

das ist schon klar. Aber in Bezug auf die Connection wird der sehr ähnlich reagieren. Auch die wird im ADS nach einem warumauchimmer-Absturz bis zum Timeout als offen angezeigt.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Datenbank öffnen wann?

Beitrag von Tom »

Es gibt bei SQL-Servern nichts wie "geöffnete Dateien", Jan. Und wenn eine Connection weg ist, ist sie weg.
Herzlich,
Tom
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Datenbank öffnen wann?

Beitrag von Jan »

Tom,

das weiß ich doch. Ich red ja auch hier von der Connection.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Datenbank öffnen wann?

Beitrag von Werner_Bayern »

ramses hat geschrieben: Fr, 17. Apr 2020 10:17 Nein. Ganz und gar nicht. Es gibt gar keine Record und Filelocks wie unter DBF und ADS .....
Selbstverständlich gibt es Row-locks, wir verwenden die tagtäglich:

Code: Alles auswählen

pg_try_advisory_lock()
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Datenbank öffnen wann?

Beitrag von Werner_Bayern »

Manfred hat geschrieben: Do, 16. Apr 2020 15:41 die lokalen Tabellen?
Ja klar, zum Server hast ja nur eine Connection und keine Tabellen. Aber Vorsicht, wenn Du die ISAM-Emulation benutzt, dann ist das Öffnen und Schließen bei großen Tabellen sehr langsam. Man sollte eh soweit wie irgendwie möglich Pass-Through nutzen. Siehe dazu in der Hilfe
Database Engines / PG-SQL / Data Access Methods
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Datenbank öffnen wann?

Beitrag von Manfred »

Klaus S. hat mir seine Sache mit DAcSession() gezeigt, die gefiel mir. Damit wollte ich es probieren.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Datenbank öffnen wann?

Beitrag von Werner_Bayern »

=D>
es grüßt

Werner

<when the music is over, turn off the lights!>
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Datenbank öffnen wann?

Beitrag von ramses »

Werner_Bayern hat geschrieben: Fr, 17. Apr 2020 20:37 Selbstverständlich gibt es Row-locks, wir verwenden die tagtäglich:

Code: Alles auswählen

pg_try_advisory_lock()
Hallo Werner

das sehe ich nicht so:
pg_try_advisory_lock() sind aber keine Reclocks auf Datenbankebene wie wir Sie von der DBF kennen die den Schreibzugriff auf einen Datensatz für ALLE sperren.
Sondern einfach ein System das Nummern (Schlüssel) als gesperrt markiert. Dabei wird kein Datenbank Eintrag selbst wie bei einer DBF gesperrt.
Anhand der als gesperrt markierten Nummer (Schlüssel) muss deine App entscheiden was Sie tun darf.
Ein andere App die sich nicht an deine Logik hinter pg_try_advisory_lock() hält kann jederzeit die Datenbank verändern.
Ganz im Gegensatz zur DBF hier kann KEINE andere App in einen gesperrten Record schreiben.
Du musst also dein Recordlocking App-Spezifisch selbst aufbauen.
Valar Morghulis

Gruss Carlo
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Datenbank öffnen wann?

Beitrag von Werner_Bayern »

Servus Carlo,

100% agree.

Klar, dem PG-Server ist das erstmal egal - wir sprechen hier von der Programmlogik und der Möglichkeit, sehr wohl Locking in Xbase++ unter PG zu implementieren. Der gleichzeitige Zugriff auf die Table außerhalb Xbase++ ist damit trotzdem möglich.
es grüßt

Werner

<when the music is over, turn off the lights!>
Antworten