AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Deadlockopfer bei TDataset.Refresh
Thema durchsuchen
Ansicht
Themen-Optionen

Deadlockopfer bei TDataset.Refresh

Ein Thema von haentschman · begonnen am 15. Jun 2022 · letzter Beitrag vom 2. Aug 2022
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#11

AW: Deadlockopfer bei TDataset.Refresh

  Alt 16. Jun 2022, 10:21
Zitat:
Wer das nicht will, kann mit WITH (NOLOCK) lesen
...ich werde mir jetzt bei den "ReadOnly" Datenmengen das WITH NOLOCK mal ausprobieren.

Code:
SET LOCK_TIMEOUT
...ist das eine Möglichkeit?
Nachtrag: mal auf 1000 gesetzt. Warten wir auf den nächsten Fehler...

Geändert von haentschman (16. Jun 2022 um 10:42 Uhr)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#12

AW: Deadlockopfer bei TDataset.Refresh

  Alt 17. Jun 2022, 11:19
So ein Zufall: heute ist mir dieser "Deadlockopfer"-Fall (ebenfalls MS SQL) begegnet.

Code:
Die Transaktion (Prozess-ID 790) befand sich auf Sperre Ressourcen aufgrund eines anderen Prozesses in einer Deadlocksituation und wurde als Deadlockopfer ausgewählt. Führen Sie die Transaktion erneut aus.
bzw.

Code:
Die Transaktion (Prozess-ID 871) befand sich auf Sperre | Kommunikationspuffer Ressourcen aufgrund eines anderen Prozesses in einer Deadlocksituation und wurde als Deadlockopfer ausgewählt. Führen Sie die Transaktion erneut aus.; nested exception is java.sql.SQLException: Die Transaktion (Prozess-ID 871) befand sich auf Sperre | Kommunikationspuffer Ressourcen aufgrund eines anderen Prozesses in einer Deadlocksituation und wurde als Deadlockopfer ausgewählt. Führen Sie die Transaktion erneut aus.
Danke an die Beitragenden, eventuell kann ich später auch etwas beisteuern.
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#13

AW: Deadlockopfer bei TDataset.Refresh

  Alt 29. Jul 2022, 07:51
Moin...

Update:
Delphi-Quellcode:
procedure TDMED.FDQAdrAfterPost(DataSet: TDataSet);
var
  Data: TDataSet;
begin
  Data := dmRepositories.EdRepoExtLookupAdr.Properties.DataController.DataSet;
  if Data.CanRefresh then
  begin
    Data.Refresh;
  end;
end;
...hat nicht funktioniert.

Delphi-Quellcode:
procedure TDMED.FDQAdrAfterPost(DataSet: TDataSet);
begin
  repeat
    Sleep(100);
  until not TFDQuery(DataSet).Connection.InTransaction;

  dmRepositories.EdRepoExtLookupAdr.Properties.DataController.DataSet.Refresh;
end;
...das hat bis dato keinen Deadlock mehr ausgelöst.

Da ich das an mehreren Stellen habe mache ich mir eine function in meinen Tools...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#14

AW: Deadlockopfer bei TDataset.Refresh

  Alt 29. Jul 2022, 11:38
Dann solltest du aber kein BeginTransaction in deinem Code haben, weil dann dieser Code hängen bleibt, weil diese Tansaction nicht nach dem Post automatisch beendet wird.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#15

AW: Deadlockopfer bei TDataset.Refresh

  Alt 2. Aug 2022, 09:08
Moin...

genervte Grüße... Kaum redet man drüber geht es nicht mehr.
Zitat:
exception class : EMSSQLNativeException
exception message : [FireDAC][Phys][ODBC][Microsoft][SQL Server Native Client 11.0][SQL Server]Die Transaktion (Prozess-ID 9515) befand sich auf Sperre Ressourcen aufgrund eines anderen Prozesses in einer Deadlocksituation und wurde als Deadlockopfer ausgewählt. Führen Sie die Transaktion erneut aus.
Wie kriege ich raus wer der Übeltäter ist?
Zitat:
aufgrund eines anderen Prozesses
@himitsu:
Logisch... Ich habe noch eine Abbruchbedingung mit drin...(Anzahl Versuche)

Geändert von haentschman ( 2. Aug 2022 um 09:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#16

AW: Deadlockopfer bei TDataset.Refresh

  Alt 2. Aug 2022, 13:40
wie rausfinden, wer noch läuft und an wem es dann wohl hängen könnte:

https://stackoverflow.com/questions/...er-connections
$2B or not $2B
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.211 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Deadlockopfer bei TDataset.Refresh

  Alt 2. Aug 2022, 13:53
Wie kriege ich raus wer der Übeltäter ist?
Lass den Profiler mitlaufen, dann siehst du, welche SQL Statements abgesetzt werden.
Und vielleicht hilft das auch:
http://etutorials.org/SQL/...
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#18

AW: Deadlockopfer bei TDataset.Refresh

  Alt 2. Aug 2022, 14:22
Zitat:
Wie kriege ich raus wer der Übeltäter ist?
Blöd ausgedrückt.
...ist mir eigentlich egal. Ich brauche eine Prüfung ob das Refresh ausgeführt werden kann.

Was ich probiert habe:

Query.Connection.InTransaction
Connection.InTransaction (was imho das gleiche ist)
Query.CanRefresh

Welche Möglichkeiten habe ich noch?

PS:
Das ist erst, seit ich das automatische Aktualisieren der Oberfäche eingebaut habe. Dadurch hat die Häufigkeit der Ausführung des Refresh deutlich zugenommen.

Zitat:
Lass den Profiler mitlaufen, dann siehst du, welche SQL Statements abgesetzt werden.
Da sehe ich doch nur welche Locks existieren. Aber nicht die "Konflikte" mit einem Refresh.
Trotzdem Danke.

Geändert von haentschman ( 2. Aug 2022 um 14:28 Uhr)
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.211 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Deadlockopfer bei TDataset.Refresh

  Alt 2. Aug 2022, 14:27
Das hat mit Transaktionen nur bedingt zu tun. Dein Problem sind LOCKs + die werden auch durch bloßes Lesen erzeugt. Die Locks können neben einzelnen ROWs auch ganze Seiten oder Tabellen umfassen + damit Sätze sperren, die mit der aktuellen Abfrage gar nichts zu tun haben. Siehe weiter vorne im Thread.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#20

AW: Deadlockopfer bei TDataset.Refresh

  Alt 2. Aug 2022, 14:44
Zitat:
Das hat mit Transaktionen nur bedingt zu tun. Dein Problem sind LOCKs
ich brauche Urlaub.

Ich kann um das Refresh einen leeren try/except Block machen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 15:26 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