gpt4 book ai didi

oracle - 识别和解决 Oracle ITL 死锁

转载 作者:行者123 更新时间:2023-12-04 14:52:29 24 4
gpt4 key购买 nike

我有一个 Oracle DB 包,它经常导致我认为是 ITL(感兴趣的事务列表)死锁。跟踪文件的相关部分如下。

Deadlock graph:
---------Blocker(s)-------- ---------Waiter(s)---------
Resource Name process session holds waits process session holds waits
TM-0000cb52-00000000 22 131 S 23 143 SS
TM-0000ceec-00000000 23 143 SX 32 138 SX SSX
TM-0000cb52-00000000 30 138 SX 22 131 S
session 131: DID 0001-0016-00000D1C session 143: DID 0001-0017-000055D5
session 143: DID 0001-0017-000055D5 session 138: DID 0001-001E-000067A0
session 138: DID 0001-001E-000067A0 session 131: DID 0001-0016-00000D1C
Rows waited on:
Session 143: no row
Session 138: no row
Session 131: no row

这个表上没有位图索引,所以这不是原因。据我所知,缺少“等待的行”加上“等待”列中的“S”可能表明这是 ITL 死锁。此外,该表经常被写入(大约同时进行 8 次插入或更新,每分钟 240 次),因此 ITL 死锁似乎很有可能。

我已将表的 INITRANS 参数及其索引增加到 100,并将表上的 PCT_FREE 从 10 增加到 20(然后重建索引),但死锁仍在发生。僵局似乎最常发生在更新期间,但这可能只是巧合,因为我只跟踪了几次。

我的问题有两个:
1) 这实际上是 ITL 僵局吗?
2)如果是ITL死锁,还有什么办法可以避免?

事实证明,这根本不是 ITL 死锁问题,而是未索引外键的问题。由于 dpbradley 的回答,我发现了这一点,这让我意识到这不是 ITL 问题,并促使我找出“无行”死锁的其他原因可能是什么。

最佳答案

ITL 压力的最佳指示来自性能 View :

select event, total_waits, time_waited, average_wait
from v$system_event
where event like 'enq: TX%'
order by 2 desc;

显示 TX 争用等待,以及
select OBJECT_NAME, SUBOBJECT_NAME, TABLESPACE_NAME, 
OBJECT_TYPE, STATISTIC_NAME, VALUE
from v$segment_statistics
where statistic_name = 'ITL waits'
and value > 0
order by value desc;

显示所涉及的表和索引。

(与所有 v$ View 一样,结果来自实例启动的时间点。)

如果这表明您确实有 ITL 等待,那么 INITRANS 和 PCTFREE 参数是要转动的主要旋钮(但 INITRANS = 100 对我来说听起来非常高,而且这些确实会占用空间)。

如果 ITL 等待不是问题,则需要检查应用程序代码。

关于oracle - 识别和解决 Oracle ITL 死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2899087/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com