Еще раз про DeadLock на Insert'е.

Leslie
Дата: 20.09.2004 23:04:50
Прошу помощи в разборе с данной ситуацией.
Есть DeadLock. В стандартной ситуации, особенно при наличии trace-файла, с разбором ситуации проблем не было. А вот тут, я пока не совсем понимаю, что происходит:

Итак trace:
Oracle8i Release 8.1.7.4.0 - Production
JServer Release 8.1.7.4.0 - Production
ORACLE_HOME = /opt/oracle
System name:	SunOS
Node name:	snail
Release:	5.9
Version:	Generic_112233-11
Machine:	sun4u
Instance name: ADM
Redo thread mounted by this instance: 1
Oracle process number: 85
Unix process pid: 21005, image: oracle@snail (TNS V1-V3)

*** 2004-09-20 17:33:37.554
*** SESSION ID:(227.27480) 2004-09-20 17:33:37.552
DEADLOCK DETECTED
Current SQL statement for this session:
INSERT INTO DE (/*Куча полей*/)
VALUES (/*куча значений*/)

----- PL/SQL Call Stack -----
  object      line  object
  handle    number  name
c99e9c94      1557  procedure A.PA_DE
c20ef64c      2245  package body A.PKG_AUTO
c1e0ce64       865  package body A.PKG_D
c1e0ce64      1813  package body A.PKG_D
c02fefe8         2  anonymous block


                       ---------Blocker(s)--------  ---------Waiter(s)---------
Resource Name          process session holds waits  process session holds waits
TX-00840015-00000bcd        85     227     X            121     191           S
TX-00110060-000070a3       121     191     X             85     227           S
session 227: DID 0001-0055-00000002	session 191: DID 0001-0079-00000002
session 191: DID 0001-0079-00000002	session 227: DID 0001-0055-00000002
Rows waited on:
Session 191: no row
Session 227: no row

Вот почему No Row понять не могу. И теперь как определить объекты вошедшие в "клинч" не понятно.

Ситуацию, с initrans'ами, я думаю, можно исключить. В "DE" параметр initrans = 4. Я даже попробовал из TX-00840015-00000bcd "00840015" перевести из 16-ричной в 10-ную ситему (хотя не для ТМ-блокировки не имеет смысла) и поискать в dba_objects - ничего не нашел.

Да, таблица DE не входит в кластер, так что и тут все должно быть гладко.

Еще вопрос. Металинк советует включить в init.ora
event="60 trace name errorstack level 3; name systemstate level 10"
Стоит включать? Поможет?
SY
Дата: 21.09.2004 00:44:48
That tells me most likely you have index deadlock. Check http://asktom.oracle.com/pls/ask/f?p=4950:8:::::F4950_P8_DISPLAYID:1528515465282

If you run Tom's sample you will get trace file with deadlock graph:

                       ---------Blocker(s)--------  ---------Waiter(s)---------
Resource Name process session holds waits process session holds waits
TX-00140015-00000ebe 13 9 X 12 10 S
TX-000c001d-00000eb4 12 10 X 13 9 S
session 9: DID 0001-000D-00000002 session 10: DID 0001-000C-00000002
session 10: DID 0001-000C-00000002 session 9: DID 0001-000D-00000002
Rows waited on:
Session 10: no row
Session 9: no row


Find cursor dump area in trace file:

********************   Cursor Dump   ************************
Current cursor: 1, pgadep: 0
pgactx: 66ba6004 ctxcbk: 66ba6270 ctxqbc: 0 ctxrws: 66ba1400
Explain plan:
Plan Table
--------
-------------------------------------------------------------------------------------------------------------------------
| Operation | Name | Rows | Bytes | Cost | TQ |IN-OUT| PQ Distrib |Pstart| Pstop |
-------------------------------------------------------------------------------------------------------------------------
| UPDATE STATEMENT | | 0 | 0 | 0 | | | | | |
| UPDATE | | 0 | 0 | 0 | | | | | |
| INDEX UNIQUE SCAN | OBJ#(30484) | 0 | 0 | 0 | | | | | |
-------------------------------------------------------------------------------------------------------------------------


And object 30484 is underlying index for PK on table T in Tom's sample.

SY.