You are here

Deadlock Situation

Ein Deadlock kommt dann zustande, wenn zwei Sessions einen Datensatz gesperrt haben,
auf den die jeweilig andere Session zugreifen will.

 

Beispiel
--------
- t=table, c=column, pk=Primary Key

 

Session A
---------
1. set lock mode to wait 60;
2. begin work;
3. update t set c = 'xxx' where pk = 1;
7. update t set c = 'xxx' where pk = 99;
--> LockWait, da Session B in Schritt 6. diesen DS gelockt hat

 

Session B:
----------
4. set lock mode to wait 60;
5. begin work;
6. update t set c = 'xxx' where pk = 99;
8. update t set c = 'xxx' where pk = 1;
9. -->Deadlock

 

--> DeadLock, da Session A auf die Freigabe eines Lock von Session B wartet und Session B jetzt ebenfalls auf die Freigabe eines Locks durch Session A warten würde. Aus dieser Situation gibt es keinen Ausweg mehr und sie wird von Informix unverzüglich - unabhängig von set lock mode to wait - aufgelöst.

In diesem Beispiel tritt an der rot markierten Stelle der Deadlock auf, da jeden der beiden Sessions jeweils den Datensatz bearbeiten
will, der von der anderen Session gesperrt wurde.
Informix sendet autom. an eine der beiden Sessions den Fehlercode -143 (deadlock detected).

Bei einer normalen LockWait-Situation wartet Session A lediglich auf die Freigabe eines Locks von Session B, hat jedoch
selbst keinen Datensatz gelockt auf den Session B auch zugreifen möchte.