Einzelnen Beitrag anzeigen

jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#7

AW: TADOCommand - Delete Befehl von mehreren Benutzern zu gleichen Zeit

  Alt 1. Dez 2015, 23:19
Antworten, welche meine Vermutung bestätigt.
Was ist denn Deine Vermutung und wodurch siehst Du sie bestätigt?

Alles geschieht im Client. Keine SPs.
Verwendest Du lokale Transaktion? Verwendest Du unabsichtlich mehr als eine Connection?

Das heißt, ich habe eine aktive Verbindung und melde mich nicht erneut an.
Ok, wenn's wirklich so ist.

Meine Logik ist wie folgt.
.. snipp..
Wie kann ich denn meine Logik umbauen in Bezug auf die Tabellen mit den Zusatzinformation, wie Software, Memory, Storage oder Drucker? Ich muss doch irgendwie die alten Daten wieder löschen.
Dazu kann man so nicht viel sagen, kommt auf die Tabellenstruktur an. Paar Ideen
- Drucker, Softwaren und anderes existieren ja in limitierter Form, also vermutlich weniger Drucker als Rechner, viel weniger Software (Titel) als Rechner. Man könnte also nur Verweise auf bestehende Drucker und Software speichern, spart Platz, aber jenachdem nicht unbedingt Zeit, da die Verweise aufgebaut werden müssen
- Einfügen und später Löschen ist der schlechteste Weg (siehe auch Sir Rufo), lieber update, wo sich etwas wirklich(!) geändert hat, bei keiner Änderung nur Datum updaten (wie oft werden bei Euch Drucker und Software oder RAM neu gemacht je Rechner?!)

Gibt es eine Möglich, den Lock der Tabelle abzufragen und ggf. zu warten oder sollte das TADOCommand machen?
Muss ich den TimeOut von TADOCommand einfach erhöhen?
Bestimmt gibt's das, aber das solltest DU nur administrativ und nicht in der Anwendung machen! Du hast eh schon zu viel Last!
Nein, Du musst nicht den Timeout erhöhen, sondern die Arbeitsgeschwindigkeit des Systems. Dein Code muss schlanker werden.

Als wir nur knapp 800 Computer in unserer Anwendung hatte, gab es keine Probleme.
Jedenfalls Glückwunsch zu soviel neuen Kollegen


Ich bin kein MS SQL Admin, versuch mal
[code]
select * from sys.sysprocesses where blocked > 0
[code]

Und ein Alternativvorschlag zum Zeit und Locks sparen:
Dein Programm baut unverbunden ein komplettes SQL Script zusammen, das alle Operationen am Stück durchführt. Einmal verbinden, abschicken und fertig, ohne explizite Transaktionen, nur Fehler loggen.

Andererseits, 2000 User / (Haupt)Datensätze sind eigentlich nicht viel. Ich meine zwar, dass MSSQL nicht unbedingt lässig mit vielen Verbindungen umging (großer Resourcenverbrauch). Mglw. ist aber auch Dein Datenmodell nicht optimal, Deine Abfragen ungeschickt...
Gruß, Jo
  Mit Zitat antworten Zitat