Сообщение Oracle взаимная блокировка от 09.01.2023 12:04
Изменено 09.01.2023 12:06 Qt-Coder
Oracle взаимная блокировка
Есть таблица
Есть индекс
То есть составной уникальный индекс на F1+F2.
Из нескольких потоков производится обновление таблицы кодом вида
Условие WHERE для каждого потока уникально. То есть нет такого, чтобы 2 потока обновляли одну и ту же пару F1+F2.
Однако периодически прилетает ORA-00600 взаимная блокировка.
Подскажите в чем может быть дело? На каком ресурсе оно блокируется?
CREATE TABLE TABLE1
(
F1 NUMBER NOT NULL,
F2 NUMBER NOT NULL,
F3 NUMBER NOT NULL,
F4 NUMBER DEFAULT (1),
F5 TIMESTAMP(6) DEFAULT systimestamp,
F6 TIMESTAMP(6),
F7 NUMBER DEFAULT (0),
F8 NUMBER DEFAULT (0),
F9 TIMESTAMP(6),
F10 NUMBER DEFAULT (0),
F11 VARCHAR2(1000 BYTE),
F12 VARCHAR2(1000 BYTE),
F13 NUMBER DEFAULT (0),
F14 VARCHAR2(2000 BYTE)
)
TABLESPACE TBL_SPACE
RESULT_CACHE (MODE DEFAULT)
PCTUSED 40
PCTFREE 20
INITRANS 10
MAXTRANS 255
STORAGE (
INITIAL 64K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
FREELISTS 1
FREELIST GROUPS 1
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
NOLOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
MONITORING;
Есть индекс
CREATE UNIQUE INDEX IND_F1_F2_UNIQUE ON TABLE1
(F1, F2)
NOLOGGING
TABLESPACE IDX_SPACE
PCTFREE 20
INITRANS 10
MAXTRANS 255
STORAGE (
INITIAL 64K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
FREELISTS 1
FREELIST GROUPS 1
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
NOPARALLEL;
То есть составной уникальный индекс на F1+F2.
Из нескольких потоков производится обновление таблицы кодом вида
UPDATE TABLE1 SET F3=:1, F4=:2 WHERE F1=:2 AND F2=:3
Условие WHERE для каждого потока уникально. То есть нет такого, чтобы 2 потока обновляли одну и ту же пару F1+F2.
Однако периодически прилетает ORA-00600 взаимная блокировка.
Подскажите в чем может быть дело? На каком ресурсе оно блокируется?
Oracle взаимная блокировка
Есть таблица
Есть индекс
То есть составной уникальный индекс на F1+F2.
Из нескольких потоков производится обновление таблицы кодом вида
Условие WHERE для каждого потока уникально. То есть нет такого, чтобы 2 потока обновляли одну и ту же пару F1+F2.
Однако периодически прилетает ORA-00600 взаимная блокировка.
Подскажите в чем может быть дело? На каком ресурсе оно блокируется?
CREATE TABLE TABLE1
(
F1 NUMBER NOT NULL,
F2 NUMBER NOT NULL,
F3 NUMBER NOT NULL,
F4 NUMBER DEFAULT (1),
F5 TIMESTAMP(6) DEFAULT systimestamp,
F6 TIMESTAMP(6),
F7 NUMBER DEFAULT (0),
F8 NUMBER DEFAULT (0),
F9 TIMESTAMP(6),
F10 NUMBER DEFAULT (0),
F11 VARCHAR2(1000 BYTE),
F12 VARCHAR2(1000 BYTE),
F13 NUMBER DEFAULT (0),
F14 VARCHAR2(2000 BYTE)
)
TABLESPACE TBL_SPACE
RESULT_CACHE (MODE DEFAULT)
PCTUSED 40
PCTFREE 20
INITRANS 10
MAXTRANS 255
STORAGE (
INITIAL 64K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
FREELISTS 1
FREELIST GROUPS 1
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
NOLOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
MONITORING;
Есть индекс
CREATE UNIQUE INDEX IND_F1_F2_UNIQUE ON TABLE1
(F1, F2)
NOLOGGING
TABLESPACE IDX_SPACE
PCTFREE 20
INITRANS 10
MAXTRANS 255
STORAGE (
INITIAL 64K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
FREELISTS 1
FREELIST GROUPS 1
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
NOPARALLEL;
То есть составной уникальный индекс на F1+F2.
Из нескольких потоков производится обновление таблицы кодом вида
UPDATE TABLE1 SET F3=:1, F4=:2 WHERE F1=:3 AND F2=:4
Условие WHERE для каждого потока уникально. То есть нет такого, чтобы 2 потока обновляли одну и ту же пару F1+F2.
Однако периодически прилетает ORA-00600 взаимная блокировка.
Подскажите в чем может быть дело? На каком ресурсе оно блокируется?