Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Why do deadlocks happen?

emersoklFeb 25 2010 — edited Apr 13 2010
Thanks for taking my questions!

I have a job that kicks off 20 threads of the below update statement. Each thread processes a unique range of EMPL_IDs. Every so often 1 or more of the threads fail with a deadlock error. I know this is a program problem but don't know how to fix it.

Why would I get a deadlock error when each thread processes a different range of EMPL_ID's?

Would creating a unique key help?


Thanks!
Kathie

11g/windows

UPDATE PS_EAUT_TRM001 SET TRM1_STATUS = ' ',TRM1_PROCESSED = 0 WHERE TRM1_EMPL_ID >= :1 AND TRM1_EMPL_ID < :2


CREATE TABLE PS_EAUT_TRM001
(
TRM1_I_DATE DATE,
TRM1_STATUS VARCHAR2(1 CHAR),
TRM1_PROCESSED NUMBER(15),
TRM1_EMPL_ID VARCHAR2(8 CHAR) NOT NULL,
TRM1_CAREER VARCHAR2(4 CHAR) NOT NULL,
TRM1_CAR_NBR NUMBER(3) NOT NULL,
TRM1_EFFDT DATE NOT NULL,
TRM1_STRM_PR_ADMIT VARCHAR2(4 CHAR),
TRM1_PLAN VARCHAR2(10 CHAR),
TRM1_PLAN2 VARCHAR2(10 CHAR),
TRM1_PLAN3 VARCHAR2(10 CHAR),
TRM1_PROG_ACTION VARCHAR2(4 CHAR),
TRM1_PROG_REASON VARCHAR2(4 CHAR),
TRM1_STAND_ACTION VARCHAR2(4 CHAR),
TRM1_WDRAW_ACTION VARCHAR2(4 CHAR),
TRM1_LEAVE_ACTION VARCHAR2(4 CHAR),
TRM1_STRM_PROG_REQ VARCHAR2(4 CHAR),
TRM1_STRM_CAR_REQ VARCHAR2(4 CHAR),
TRM1_STRM_GRAD VARCHAR2(4 CHAR),
TRM1_GRAD_EFFDT DATE,
TRM1_2ND_CAR_PLAN VARCHAR2(10 CHAR),
TRM1_DEG_GRANTED NUMBER(1),
TRM1_TERM NUMBER(6),
TRM1_PUBLIC_ID NUMBER(9),
TRM1_EFF_STRM VARCHAR2(4 CHAR),
PREPROC_NOTES VARCHAR2(128 CHAR)
)
TABLESPACE PSDEFAULT
PCTUSED 0
PCTFREE 10
INITRANS 1
MAXTRANS 255
STORAGE (
INITIAL 64K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
LOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
MONITORING;


CREATE INDEX IDX01_TRM001 ON PS_EAUT_TRM001
(TRM1_EMPL_ID, TRM1_CAREER, TRM1_CAR_NBR, TRM1_EFFDT)
NOLOGGING
TABLESPACE PSINDEX
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 40K
NEXT 104K
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
NOPARALLEL;


CREATE INDEX PS0EAUT_TRM001 ON PS_EAUT_TRM001
(TRM1_STATUS, TRM1_I_DATE, TRM1_EMPL_ID, TRM1_CAREER, TRM1_CAR_NBR,
TRM1_EFFDT)
LOGGING
TABLESPACE PSINDEX
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 40K
NEXT 104K
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
NOPARALLEL;


CREATE INDEX PS1EAUT_TRM001 ON PS_EAUT_TRM001
(TRM1_PROCESSED, TRM1_I_DATE, TRM1_EMPL_ID, TRM1_CAREER, TRM1_CAR_NBR,
TRM1_EFFDT)
LOGGING
TABLESPACE PSINDEX
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 40K
NEXT 104K
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
NOPARALLEL;


CREATE INDEX PS2EAUT_TRM001 ON PS_EAUT_TRM001
(TRM1_PLAN, TRM1_I_DATE, TRM1_EMPL_ID, TRM1_CAREER, TRM1_CAR_NBR,
TRM1_EFFDT)
LOGGING
TABLESPACE PSINDEX
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 40K
NEXT 104K
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
NOPARALLEL;


CREATE INDEX PS3EAUT_TRM001 ON PS_EAUT_TRM001
(TRM1_PLAN2, TRM1_I_DATE, TRM1_EMPL_ID, TRM1_CAREER, TRM1_CAR_NBR,
TRM1_EFFDT)
LOGGING
TABLESPACE PSINDEX
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 40K
NEXT 104K
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
NOPARALLEL;


CREATE INDEX PS4EAUT_TRM001 ON PS_EAUT_TRM001
(TRM1_PLAN3, TRM1_I_DATE, TRM1_EMPL_ID, TRM1_CAREER, TRM1_CAR_NBR,
TRM1_EFFDT)
LOGGING
TABLESPACE PSINDEX
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 40K
NEXT 104K
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
NOPARALLEL;


CREATE INDEX PS5EAUT_TRM001 ON PS_EAUT_TRM001
(TRM1_PROG_ACTION, TRM1_I_DATE, TRM1_EMPL_ID, TRM1_CAREER, TRM1_CAR_NBR,
TRM1_EFFDT)
LOGGING
TABLESPACE PSINDEX
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 40K
NEXT 104K
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
NOPARALLEL;


CREATE INDEX PS6EAUT_TRM001 ON PS_EAUT_TRM001
(TRM1_PUBLIC_ID, TRM1_I_DATE, TRM1_EMPL_ID, TRM1_CAREER, TRM1_CAR_NBR,
TRM1_EFFDT)
LOGGING
TABLESPACE PSINDEX
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 40K
NEXT 104K
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
NOPARALLEL;


CREATE UNIQUE INDEX PS_EAUT_TRM001 ON PS_EAUT_TRM001
(TRM1_I_DATE, TRM1_EMPL_ID, TRM1_CAREER, TRM1_CAR_NBR, TRM1_EFFDT)
LOGGING
TABLESPACE PSINDEX
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 40K
NEXT 104K
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
NOPARALLEL;
This post has been answered by Lakmal Rajapakse on Feb 25 2010
Jump to Answer
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on May 11 2010
Added on Feb 25 2010
6 comments
1,807 views