首页 > > > 分布式DBMS死锁处理
转自:
http:///distributed_dbms/distributed_dbms_deadlock_handling.html本章概述了数据库系统中的死锁处理机制。我们将研究集中式和分布式数据库系统中的死锁处理机制。
什么是死锁?
死锁是具有两个或多个事务的数据库系统的状态,当每个事务正在等待由某个其他事务锁定的数据项时。死锁可以通过等待图中的循环来指示。这是一个有向图,其中顶点表示事务,边缘表示数据项的等待。
例如,在下面的等待图中,事务T1正在等待被T3锁定的数据项X。T3正在等待由T2锁定的Y,T2等待被T1锁定的Z。因此,形成了等待周期,并且不会执行任何事务。

集中系统中的死锁处理
有三种经典的死锁处理方法,即 -
所有这三种方法都可以并入集中式和分布式数据库系统。
死锁预防
死锁预防方法不允许任何事物获取将导致死锁的锁。约定是当多个事务请求锁定相同的数据项时,只有其中一个事务被授予锁定。
最流行的死锁预防方法之一是所有锁的预先采集。在此方法中,事务在开始执行之前获取所有锁,并在整个事物持续时间内保留锁。如果另一个事务需要任何已经获取的锁,它必须等待所有需要的锁可用。使用这种方法,系统被阻止死锁,因为没有任何等待的事务持有任何锁定。
死锁避免
死锁避免方法在发生之前处理死锁。它分析事务和锁,以确定是否等待导致死锁。
该方法可以简单说明如下。事务开始执行并请求他们需要锁定的数据项。锁管理器检查锁是否可用。如果可用,锁管理器分配数据项,事务获取锁。但是,如果项目被不兼容模式下的某些其他事务锁定,则锁管理器将运行一个算法来测试是否保持事务处于等待状态会导致死锁。因此,该算法决定事物是否可以等待或其中一个事物应该被中止。
为此目的有两种算法,即等待和伤口等待。让我们假设有两个事务T1和T2,其中T1尝试锁定已经被T2锁定的数据项。算法如下 -
死锁检测和删除
死锁检测和去除方法周期性地运行死锁检测算法,并在有一个死锁检测算法的情况下去除死锁。当事务提出锁定请求时,它不会检查死锁。当事务请求锁定时,锁管理器检查它是否可用。如果可用,则允许事务锁定数据项; 否则事物被允许等待。
由于在授予锁定请求时没有预防措施,因此某些事务可能会被锁定。为了检测死锁,锁管理器定期检查等待图片是否有循环。如果系统死锁,锁管理器会从每个周期中选择一个受害者事务。受害者中止并回滚; 然后重新启动。用于受害者选择的一些方法是 -
这种方法主要适用于事物量低且需要快速响应锁定请求的系统。
分布式系统中的死锁处理
分布式数据库系统中的事务处理也是分布式的,即同一事务可能在多个站点处理。在分布式数据库系统中的两个主要的僵局处理的担忧是不存在的集中式系统是事物地点和事物控制。一旦解决了这些问题,就可以通过任何死锁,预防死锁或死锁检测和删除来处理死锁。
事物位置
在多个站点中处理分布式数据库系统中的事务,并在多个站点中使用数据项。数据处理量不均匀分布在这些站点之间。处理的时间段也不同。因此,相同的事务可能在某些站点处于活动状态,而在其他站点处于非活动状态。当两个冲突事务位于站点中时,可能会发生其中一个处于非活动状态。这种情况在集中式系统中不会出现。这种担心被称为事物位置问题。
这个问题可能由Daisy Chain模型来解决。在这个模型中,当一个事物从一个站点移动到另一个站点时,一个事物会带有某些细节。一些详细信息是所需的表的列表,所需的站点列表,访问表和站点的列表,尚未访问的表和站点的列表以及所获取的锁类型列表。事物通过提交或中止终止后,信息应发送到所有相关网站。
事物控制
事务控制涉及指定和控制在分布式数据库系统中处理事务所需的站点。有关选择何处处理事物以及如何指定控制中心的选项有很多,如 -
分布式死锁预防
就像集中式死锁预防一样,在分布式死锁预防方法中,事务应该在开始执行之前获取所有的锁。这可以防止死锁。
事物进入的地点被指定为控制站点。控制站点将消息发送到数据项目所在的站点以锁定项目。然后等待确认。当所有网站都确认已锁定数据项时,事务开始。如果任何站点或通信链路发生故障,事物必须等到修复完毕。
虽然实现很简单,但这种方法有一些缺点 -
分布式死锁避免
如在集中式系统中,分布式死锁避免在发生之前处理死锁。另外,在分布式系统中,需要处理事务处理和事务控制问题。由于事物的分布性质,可能会发生以下冲突:
在发生冲突的情况下,其中一个事务可能被中止或允许按照分布式等待模块或分布式创伤等待算法等待。
让我们假设T1和T2有两个事物。T1到达站点P,并尝试锁定已被该站点T2锁定的数据项。因此,Site P有冲突。算法如下:
分布式死锁检测
就像集中式死锁检测方法一样,允许发生死锁,如果检测到死锁。当事务发出锁定请求时,系统不执行任何检查。为了实现,创建了全局等待图。在全局等待图中存在一个循环表示死锁。然而,由于事务等待网络上的资源,很难发现死锁。
或者,死锁检测算法可以使用定时器。每个事务与定时器相关联,该定时器被设置为预期完成事务的时间段。如果在此时间段内没有完成事物,定时器将关闭,表示可能出现死锁。
用于死锁处理的另一种工具是死锁检测器。在集中式系统中,有一个死锁检测器。在分布式系统中,可能有多个死锁检测器。死锁检测器可以为其控制的站点找到死锁。在分布式系统中有三种死锁检测方法,即。
原文作者:;如有侵权,请联系管理员删除。