解决死锁
您必须尝试了解发生死锁的原因,以便可以选择正确的操作来解决死锁。
关于此任务
通常,发生死锁的原因是两个或两个以上事务同时以相反的顺序并以冲突方式需要相同的资源。 为防止死锁而采取的行动必须处理这些特征。
表 1 显示预防性操作和相应主效应的列表。
| 操作 | 传播资源 | 更改锁定顺序 | 减少并行 | 更改锁定方式 |
|---|---|---|---|---|
| 增加索引可用空间 | X | |||
| 增加索引子页面大小 | X | |||
| 增加 TS 可用空间 | X | |||
| 更改集群索引 | X | X | ||
| 重组表空间 | X | X | X | |
| 添加索引 | X | X (1) | ||
| 删除索引 | X | |||
| 序列化事务 | X | |||
| 使用其他 COMMITS | X | |||
| 最小化响应时间 | X | |||
| 更改隔离级别 (2) | X | X | ||
| 重新设计应用程序 | X | X | X | X |
| 重新设计数据库 | X | X | X | X |
备注信息:
|
||||
要选择正确的操作,必须首先了解发生死锁的原因。 然后,您可以评估操作以进行选择。 这些操作可产生多种影响。 他们还可以:
- 解决死锁问题
- 强制更改其他事务的访问路径,从而导致新的死锁
- 导致系统中出现新的死锁。
因此,请务必仔细监视受影响事务 (例如 Db2®中的 EXPLAIN 工具) 所使用的访问路径。 在许多情况下,求解死锁是一个迭代过程。