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
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.235 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Deadlockopfer bei TDataset.Refresh

  Alt 15. Jun 2022, 18:11
Beim MS SQL Server muss man auf DB-Ebene die richtige Einstellung machen, damit er nicht bescheuerte Locks beim Lesen setzt.
Geht seit der 7er Version, ist aber Standardmäßig deaktiviert.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

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

AW: Deadlockopfer bei TDataset.Refresh

  Alt 16. Jun 2022, 05:40
Danke für die vielen Infos...
Zitat:
Der MSSQL Server lockt beim Lesen


Zitat:
Beim MS SQL Server muss man auf DB-Ebene die richtige Einstellung machen, damit er nicht bescheuerte Locks beim Lesen setzt.
Kannst du mir die Einstellung sagen? Was, wo?

Zitat:
Sicher, dass es nicht das "Post" davor ist, dass den Deadlock auslöst?
Ich habe ein eigenes "System" was die doppelte Speicherung "verhindert" (eigene Lock Tabelle). Leider ist das auf die betroffene Tabelle noch nicht ausgeweitet. Deshalb kann ich es nicht ausschließen. Aber das Refresh wird im "AfterPost" ausgelöst...das sollte das Post fertig sein.
  Mit Zitat antworten Zitat
Benutzerbild von TigerLilly
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.257 Beiträge
 
Delphi 12 Athens
 
#3

AW: Deadlockopfer bei TDataset.Refresh

  Alt 16. Jun 2022, 08:38
Danke für die vielen Infos...
Zitat:
Der MSSQL Server lockt beim Lesen
Das Locken beim Lesen ist schon sinnvoll. Wer das nicht will, kann mit WITH (NOLOCK) lesen + daran denken, was uU passieren kann. Das Problem bei der Eskalation ist, dass Sätze gesperrt werden, die mit der ursprünglichen Anforderung nichts zu tun haben und nur zufällig auf der gleichen Page (oder in derselben Tabelle) liegen.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

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

AW: Deadlockopfer bei TDataset.Refresh

  Alt 16. Jun 2022, 09: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 09:42 Uhr)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.014 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Deadlockopfer bei TDataset.Refresh

  Alt 17. Jun 2022, 10: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.481 Beiträge
 
Delphi 12 Athens
 
#6

AW: Deadlockopfer bei TDataset.Refresh

  Alt 29. Jul 2022, 06: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.752 Beiträge
 
Delphi 12 Athens
 
#7

AW: Deadlockopfer bei TDataset.Refresh

  Alt 29. Jul 2022, 10: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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

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

AW: Deadlockopfer bei TDataset.Refresh

  Alt 2. Aug 2022, 08: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 08:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Deadlockopfer bei TDataset.Refresh

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

https://stackoverflow.com/questions/...er-connections
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von TigerLilly
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.257 Beiträge
 
Delphi 12 Athens
 
#10

AW: Deadlockopfer bei TDataset.Refresh

  Alt 2. Aug 2022, 12: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
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 03:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz