Subject | deadlock |
---|---|
Author | mieke janson |
Post date | 2009-01-08T08:47:48Z |
Hi,
Firebird 2.0, delphi2007, dbexpress
I encounter a problem, the firebird log file tells me:
lock conflict on no wait transaction
deadlock
update conflicts with concurrent update
operation was cancelled
internal gds software consistency check (error during savepoint
backout (290), file: exe.cpp line: 3711)
A restart iof the fbserver and a backup/restore solved the problem..
When I look in Helens book I see the following:
Lock Timeout for WAIT Transactions
Karyakin, D. Yemanov
All Firebird versions provide two transaction wait modes: NO WAIT and WAIT.
NO WAIT mode means that
lock conflicts and deadlocks are reported immediately, while WAIT performs a
blocking wait which times out
only when the conflicting concurrent transaction ends by being committed or
rolled back.
So,
Would it be a solution for me to use the 'WAIT' mode in my transaction? Or
could there be an underlying problem? At the moment, I use the defaults:
var
TD : TTransactionDesc;
begin
TD.TransactionID := 1;
TD.IsolationLevel := xilReadCommitted;
try
fDatabase.DatabasedbExpress.StartTransaction(TD);
...
fDatabase.DatabasedbExpress.Commit(TD);
except
fDatabase.DatabasedbExpress.Rollback(TD);
end;
Another question: here I use TD.TransactionID := 1; Is that right? If I have
multiple users, don't they all use the same transactionID now? Could that be
the problem?
Thank you,
Mieke
[Non-text portions of this message have been removed]
Firebird 2.0, delphi2007, dbexpress
I encounter a problem, the firebird log file tells me:
lock conflict on no wait transaction
deadlock
update conflicts with concurrent update
operation was cancelled
internal gds software consistency check (error during savepoint
backout (290), file: exe.cpp line: 3711)
A restart iof the fbserver and a backup/restore solved the problem..
When I look in Helens book I see the following:
Lock Timeout for WAIT Transactions
Karyakin, D. Yemanov
All Firebird versions provide two transaction wait modes: NO WAIT and WAIT.
NO WAIT mode means that
lock conflicts and deadlocks are reported immediately, while WAIT performs a
blocking wait which times out
only when the conflicting concurrent transaction ends by being committed or
rolled back.
So,
Would it be a solution for me to use the 'WAIT' mode in my transaction? Or
could there be an underlying problem? At the moment, I use the defaults:
var
TD : TTransactionDesc;
begin
TD.TransactionID := 1;
TD.IsolationLevel := xilReadCommitted;
try
fDatabase.DatabasedbExpress.StartTransaction(TD);
...
fDatabase.DatabasedbExpress.Commit(TD);
except
fDatabase.DatabasedbExpress.Rollback(TD);
end;
Another question: here I use TD.TransactionID := 1; Is that right? If I have
multiple users, don't they all use the same transactionID now? Could that be
the problem?
Thank you,
Mieke
[Non-text portions of this message have been removed]