首页 > Linux操作系统 > Linux操作系统 > oracle死锁类型和原因分析
产生死锁分很多种情况,我们最常见的是外健上面没有添加索引或者逻辑问题,当发生死锁时都会生成一个trace文件,这个文件名在alert中都有记载,通常我们会看到下面一段
当看到trace文件时我们需要确认一下产生锁的类型,是两行还是一行,是TX还是TM,如果只有一行说明是同一个session,可能是自治事务引起的死锁
如上图中锁的类型为
TX X X
TX X X
锁的类型和引起的原因如下:
|
|
锁类型 |
请求锁 |
死锁类型 |
引起原因 |
注释 |
|
TX锁,请求 X (6)锁 |
TX |
X(6) |
TX X X |
程序问题 |
应用程序逻辑问题 |
|
TM锁,请求 SSX (5)锁 |
TM |
SSX (5) |
TM SX SSX SX SSX |
外键无索引 |
TM 锁,占用 SX (3)锁, 请求SSX (5)锁 |
|
TX锁,请求 S(4) 锁 |
TX |
S(4) |
TX X S |
事务槽满了或有bitmap索引 |
TX 锁占用 X (6),请求 S (4) |
|
TX锁,请求 X (6),只有一行信息 |
TX |
X(6) |
TX X X |
自锁 |
通常为自治事务引起的 |
Oracle同时提供了诊断锁类型的文档见:1550091.2
Oracle锁的型号如下:
0 - none
1 - null (NULL)
2 - Row Share, also called a subshare table lock (SS)
3 - Row eXclusive Table Lock, also called a subexclusive table lock (SX)
4 - Share Table Lock (S)
5 - Share Row-eXclusive, also called a share-subexclusive table lock (SSX)
6 - EXclusive (X)
参考文档:ID 1507093.1
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7908476/viewspace-1775697/ ,如需转载,请注明出处,否则将追究法律责任。