Einzelnen Beitrag anzeigen

sega84

Registriert seit: 18. Sep 2006
73 Beiträge
 
Delphi XE2 Professional
 
#1

ADO + Mehrbenutzerbetrieb + Transaktionen + SQL Server

  Alt 20. Mai 2009, 07:50
Datenbank: SQL Server • Version: 2000/2005/2008 • Zugriff über: ADO
Hallo zusammen,
habe ein Projekt mit etwa 120 Tabellen zu Betreuen.
Wir verbinden uns via ADO auf die Datenbank.
Da im Programm Transaktionen verwenden, kommt es mitlerweile zu sehr vielen Timeouts, da verschiedenste Locks auf den Datensätzen liegen.
Mit der Software arbeiten momentan maximal gleichzeitig 30 Leute auf einer Datenbank (Entweder SQL Server 2000 oder 2005, teilweise schon 2008).

Nun ist es mein Ziel, die Timeouts zu entfernen.
Der ADO-Provider ist:
Microsoft OLE DB Provider for SQL Server (dieser darf nicht geändert werden, er muss so bleiben!!!)

Momentan verwende ich folgende Einstellungen für die ADOConnection:
Code:

Delphi-Quellcode:
TAdoConnection(DB).Attributes := [xaCommitRetaining, xaAbortRetaining];
TAdoConnection(DB).IsolationLevel := ilReadUncommitted;
TAdoConnection(DB).LoginPrompt := False;
TAdoConnection(DB).ConnectionTimeout := 30;
TAdoConnection(DB).CommandTimeOut := 0;
TAdoConnection(DB).Connected := True;
Die Transaktionen werden wie folgt gestartet:
TAdoConnection(DB).BeginTrans; Sie werden so commited:
TAdoConnection(DB).CommitTrans; So läuft der Rollback:
TAdoConnection(DB).RollbackTrans; So läuft die Überprüfung, ob eine Transaktion gestartet ist
result := TAdoConnection(DB).InTransaction; Die Transaktionen werden immer so kurz wie möglich und so lang wie nötig offen gehalten. Leider kann es aber vorkommen, dass eine Nutzer halt einen Kaffee trinken gehen und somit eine Transaktion geöffnet bleibt (Das alte Leiden halt).

Nun meine Frage:
Welche Einstellungen, sollten für einen Mehrbenutzer-Betrieb einer SQL Server Datenbank mit Transaktionsnutzung, für die ADO-Connnection gelten? Wie sollten die Transaktionen gestartet und beendet werden? Was ist allgemein im Mehrbenutzerbetrieb mit ADO zu beachten? Es gibt viele Indizies auf den einzelnen Tabellen, haben diese damit was zu tun?

Vielen Dank für eure Mithilfe.
  Mit Zitat antworten Zitat