绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
由于外键约束问题导致ORA-00060错误,报Single resource deadlock [T
2021-04-13 16:08:48

由于外键约束问题导致ORA-00060错误,报Single resource deadlock [TM]处理过程

这个问题持续很久,当时看到global_enqueue_deadlock,没有多看,直接认为是全局死锁,需要业务自己协调,从trace文件中拿来一个delete的SQL
但是后来偶然机会让辅助监控的工程师负责再看看该问题,确发现是另一回事。
当时的trace文件内容如下
死锁描述:
Single resource deadlock: blocking enqueue which blocks itself, f 0
资源名称:
----------resource 0xa0732f80----------------------
resname : [0x84584][0x0],[TM][ext 0x0,0x0][domid 0x0]

也就是在资源0x84584上有死锁发生,0x84584对应十进制是542084,对应的对象名称是test2_abc。
从TRACE文件中可以看到正在执行的语句如下:
delete from user123.test2 where ID_=:1

经过进一步确认二者关系,表test2_abc的外键引用了表test2的主键,但是外键没有索引
表定义如下
CREATE TABLE "user123"."test2_abc"
( "ID_" NUMBER(19,0) NOT NULL ENABLE,
"TASK_ID_" NUMBER(19,0) NOT NULL ENABLE,
"USER_" VARCHAR2(60 CHAR),
"USER_NAME_" VARCHAR2(60 CHAR),
PRIMARY KEY ("ID_")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "user123" ENABLE,
CONSTRAINT "FK_MAYFQQCA51WHMHQQ1MDLP8QG6" FOREIGN KEY ("TASK_ID_")
REFERENCES "user123"."test2" ("ID_") ENABLE
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "user123"

TASK_ID_字段是外键字段引用了表test2的ID_字段。
表上索引列情况如下:
select index_owner,index_name,column_name,column_position from dba_ind_columns where table_name='test2_abc' and table_owner='user123';
输出内容如下:
INDEX_OWNER
--------------------------------------------------------------------------------------------------------------------------------
INDEX_NAME
--------------------------------------------------------------------------------------------------------------------------------
COLUMN_NAME
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
COLUMN_POSITION
---------------
user123
SYS_C00428263
ID_

表上只有一个索引SYS_C00428263在ID_列上,在task_id_无索引

解决方案:在外键创建索引,其实Oracle建议在所有外键上都要创建索引,以避免性能问题。参考MOS文档473124.1


分享好友

分享这个小栈给你的朋友们,一起进步吧。

Oracle运维新鲜事-技术与管理各占半边天
创建时间:2020-08-04 11:34:57
本技术栈旨在分享技术心得,运维趣事,故障处理经验,调优案例,故障处理涉及集群,DG,OGG,大家生产中遇到的问题基本都会囊括了,我会发布生产库遇到的故障,希望在交流中互助互益,共同提高,也希望大家讨论,如果您有生产中遇到的集群问题,也可以在这里提出来,一起讨论,现实中也帮助不少同学解决了生产库的故障。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • Abraham林老师
    栈主
  • 小雨滴
    嘉宾
  • hawkliu
    嘉宾
  • u_97a59a25246404
    嘉宾

小栈成员

查看更多
  • 栈栈
  • dapan
  • 小菜鸟___
  • hwayw
戳我,来吐槽~