AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Blockade anderer Anwender

Ein Thema von MPirnstill · begonnen am 19. Apr 2006 · letzter Beitrag vom 5. Mai 2006
Antwort Antwort
Benutzerbild von MPirnstill
MPirnstill

Registriert seit: 19. Jul 2004
Ort: Burgdorf
197 Beiträge
 
Delphi XE8 Enterprise
 
#1

Blockade anderer Anwender

  Alt 19. Apr 2006, 14:43
Datenbank: MS-SQL-Server • Version: 2000 • Zugriff über: BDE - TTable
Hi!

Bei einer älteren Client-/Server-Anwendung tritt folgendes Problem auf:

Sofern ein Anwender in einem Eingabedialog nacheinander mehrere Datensätze bearbeitet/vervollständigt, werden nach einer unbestimmten Zeit die anderen Anwender blockiert. Wenn der blockierende Anwender die Anwendung kurz verläßt, läuft für eine Weile wieder alles normal. Doch nach einer unbestimmten Zeit tritt die Blockade wieder auf.

Jetzt habe mir die Anwender noch gesagt, daß dieses Problem schon früher aufgetreten ist, nur scheint da das Programm nicht komplett blockiert zu haben, sondern es lief nur langsamer. Aber seit wir jetzt CITRIX im Einsatz habe, soll es wohl voll blockieren.

Ich vermute ja, daß da irgend ein Speicher voll läuft, aber ich weiß nicht wie ich dem Problem auf die Schliche kommen soll. Vor allem weil sehr unregelmäßig auftritt.
Insgesamt sind vielleicht 15 Anwender in dem System.

Hat von euch einer eine Idee wo und wie ich am besten suchen könnte, um dies Problem zu lokalisieren.

Gruß
Micha
Ich habe fertig!

DP - hier werden Sie geholfen!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Blockade anderer Anwender

  Alt 19. Apr 2006, 15:32
Hi Micha,

Ressourcen-Verknappung könntest du durch internes (MemCheck) oder externes (PerfMon) Monitoring verifizieren. Aber vielleicht musst du einfach nur mal den Locking-Mechanismus im Zusammenspiel von BDE und MSSQL studieren.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von MPirnstill
MPirnstill

Registriert seit: 19. Jul 2004
Ort: Burgdorf
197 Beiträge
 
Delphi XE8 Enterprise
 
#3

Re: Blockade anderer Anwender

  Alt 19. Apr 2006, 16:30
Hi Marabu!

Vielen Dank für deine Antwort.

Zitat von marabu:
Ressourcen-Verknappung könntest du durch internes (MemCheck) oder externes (PerfMon) Monitoring verifizieren.
Den Performance-Monitor kenne ich ja, aber was meinst du mit MemCheck? Windows XP kennt MemCheck nicht und in der Delphi-Hilfe (Delphi 2.0) habe ich auch nichts gefunden.

Zitat von marabu:
Aber vielleicht musst du einfach nur mal den Locking-Mechanismus im Zusammenspiel von BDE und MSSQL studieren.
Bin gerade am gerade dabei die SQL-Server-2000-Dokumentation betr. Sperren zu lesen und hab etwas gefunden, was der Grund für die Blockade sein könnte. Da steht, daß der SQL-Server, bei Transaktionssperren für mehrere Datensätze diese ggfs. auf eine Tabellensperre ausweitet. Wenn das so ist muß ich sehen wie ich das abstellen kann. Wobei ich der Meinung bin, daß einen "Dirty-Read" mache und das ja eigentlich nicht blockieren dürfte.

Gruß
Micha
Ich habe fertig!

DP - hier werden Sie geholfen!
  Mit Zitat antworten Zitat
Benutzerbild von MPirnstill
MPirnstill

Registriert seit: 19. Jul 2004
Ort: Burgdorf
197 Beiträge
 
Delphi XE8 Enterprise
 
#4

Re: Blockade anderer Anwender

  Alt 26. Apr 2006, 12:55
Hallo Leute!

Haben heute mal eine Test gemacht und es ist tatsächlich so, daß nach einer gewissen Anzahl an Änderung der SQL-Server 2000 auf Tabellensperre umschaltet, obwohl ich vom Programm aus nur einzelne Datensätze sperre. Es ist z.B. so:

Zitat:
Master-Tabelle:
P1ST
___Details:
+-> P1STKL
+-> P1STMP
+-> P1STHA
Detail-Tabellen sind mit der Master über Foreign-Key verknüpft.
Auf einen Datensatz aus P1ST kommen 4 in P1STKL, 4 in P1STMP und einer in P1STHA. Die Datensätze wurde zuvor angelegt und erst bei der Vervollständigung (EDIT) passiert es das nach einer gewissen Anzahl bearbeiteter Datensätze die Tabelle P1STKL plötzlich komplett gesperrt ist und damit alle anderen Benutzer, welche in der gleichen Dialogformular arbeiten gesperrt sind bis es zum SQLTimeout kommt bzw. der sperrende Benutzer in seinem Formular auf Speichern klickt.

In der Dokumentation des MS SQL-Server 2000 steht nun das die dynamische Sperrung automatisch unter gewissen Voraussetzungen die Sperre von Datensatz auf Datenseite auf Tabelle erweitert um Resource zu sparen. Hat die Version 6.5, welche wir früher im Einsatz hatten nicht gemacht.

Kann ich das irgendwie abschalten, darüber habe ich nämlich noch nichts gefunden, bzw. hat jemand evtl. ein andere Idee/Lösung?

Wie gesagt, im meinem Programm sage zu Beginn der Bearbeitung:
MyDatabaseObjekt.StartTransaction; und beim Post (sofern die Transaktion offen ist)
MyDatabaseObjekt.Commit; Da dürfte doch keine Sperre mehr offen sein.

[Edit]Noch vergessen! Vom meinem Programm her werden alle Benutzer unter dem gleichen SQL-Benutzer angemeldet. Haben es aber auch schon mit unterschiedlichen SQL-Benutzern getestet und da tritt die Blockade ebenfalls auf.[/Edit]
Gruß
Micha
Ich habe fertig!

DP - hier werden Sie geholfen!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Blockade anderer Anwender

  Alt 26. Apr 2006, 13:21
Hallo Micha,

hast du schon den Eintrag locks (Option) im Handbuch entdeckt? Damit kann der Mechanismus der Sperrenausweitung (lock escalation) beinflusst werden. Es macht mich aber schon ein wenig stutzig, dass du auf solche Probleme stößt.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#6

Re: Blockade anderer Anwender

  Alt 26. Apr 2006, 13:50
MemCheck ist eine unit die ins Projekt eingebunden wird und einen alternativen Speichermanager bietet, der prüft, ob Speicher korrekt wieder freigegeben wird.

Such mal Bei Google suchenMemCheck.Pas bei google.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von MPirnstill
MPirnstill

Registriert seit: 19. Jul 2004
Ort: Burgdorf
197 Beiträge
 
Delphi XE8 Enterprise
 
#7

Re: Blockade anderer Anwender

  Alt 26. Apr 2006, 14:02
hey, danke erstmal für die Antworten.

Zitat von marabu:
... . Es macht mich aber schon ein wenig stutzig, dass du auf solche Probleme stößt.
Was meinst du damit, daß Dich das stutzig macht?

Gruß
Micha
Ich habe fertig!

DP - hier werden Sie geholfen!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Blockade anderer Anwender

  Alt 26. Apr 2006, 14:04
Damit meine ich, dass ich keine Anzeichen erkenne, dass dein Projekt einen MS SQL Server 2000 an seine Grenzen bringen könnte.

marabu
  Mit Zitat antworten Zitat
Benutzerbild von MPirnstill
MPirnstill

Registriert seit: 19. Jul 2004
Ort: Burgdorf
197 Beiträge
 
Delphi XE8 Enterprise
 
#9

Re: Blockade anderer Anwender

  Alt 26. Apr 2006, 14:08
Zitat von jim_raynor:
MemCheck ist eine unit die ins Projekt eingebunden wird und einen alternativen Speichermanager bietet, der prüft, ob Speicher korrekt wieder freigegeben wird.

Such mal Bei Google suchenMemCheck.Pas bei google.
MemCheck wurde weiter oben im Thread auch schon mal vorgeschlagen, hab ich auch mal angeschaut, aber es scheint hier wohl doch eher um ein SQL-Server Problem zu gehen, was der heutige Test belegt hat. Und MemCheck ist eher für Speicherlecks, wobei ich auch noch Probleme damit hatte, da ich ja unter Delphi 2.0 arbeite.

Trotzdem Danke für den Tip.

Gruß
Micha
Ich habe fertig!

DP - hier werden Sie geholfen!
  Mit Zitat antworten Zitat
Benutzerbild von MPirnstill
MPirnstill

Registriert seit: 19. Jul 2004
Ort: Burgdorf
197 Beiträge
 
Delphi XE8 Enterprise
 
#10

Re: Blockade anderer Anwender

  Alt 5. Mai 2006, 07:58
Hi!

Will den Thread mal abschließen.

Ergebnis:
Wir hatten letztens einen von einer Hotline am Telefon, der dann meinte ich muß wohl mein Programm umschreiben, damit die Tranaktion nicht solange auf ist. Das Prog ist halt schon über 10 Jahre alt und so konzipiert gewesen. Werd mal sehen, was ich machen kann, aber verstehen tue ich das nicht. Mein Prog lief einwandfrei mit MS-SQL-Server 6.5 und dann kommt der 2000-er (schneller, breiter, größer ), und das Ding ist gleich wieder so super-schlau (z.B. dynamisches Sperren), daß es einem nur Probleme bereitet. Genau wie bei M$-Word, daß macht auch zu viel Dinge die stören.

Nochmals Danke für eure Hilfe.

Gruß
Micha
Ich habe fertig!

DP - hier werden Sie geholfen!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz