Einzelnen Beitrag anzeigen

TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.893 Beiträge
 
Delphi 12 Athens
 
#2

Re: [Firebird] Alte Daten aus Tabelle löschen->deadlock

  Alt 25. Jun 2009, 12:24
Moin,

als erstes Mal löscht diese Anweisung alle Datensätze der Tabelle:

SQL-Code:
delete from xmlbuffer
  where id in (
    select first 500 id from xmlbuffer
    )
Das passiert deshalb, weil für jeden Datensatz separat nachgeguckt wird, ob er sich in den ersten 500 befindet. Dies ist immer der Fall, da der zuvor gelöschte Datensatz ja in der neuen Ergebnismenge nicht mehr vorkommt.

Deinen Deadlock erhälst Du also vermutlich, weil Du einer anderen Transaktion da Datensätze unter dem Allerwertesten klaust.

Vermeiden kannst Du das, indem Du den 500. Datensatz ermittelst und dann alle DS <= diesem löschst.

Das hat also nichts mit Deinen Triggern zu tun.

Aber dazu mal die Frage: Warum diese Verrenkung? Ist ein COUNT zu langsam?
Auf diese Weise die Anzahl der Datensätze vorzuhalten ist zumindest ungewöhnlich.

Gruß

Thomas
Thomas Breitkreuz
Gruß Thomas
- Admin DelphiPRAXIS
- Admin Delphi-Treff
- Embarcadero MVP
  Mit Zitat antworten Zitat