ITPub博客

首页 > > > 分布式DBMS死锁处理

分布式DBMS死锁处理

作者:zuike2000 时间:2020-06-12 15:11:24 0 删除 编辑

转自:

http:///distributed_dbms/distributed_dbms_deadlock_handling.html​

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

集中系统中的死锁处理
有三种经典的死锁处理方法,即 -

  • 防止死锁
  • 死锁回避
  • 死锁检测和删除。

所有这三种方法都可以并入集中式和分布式数据库系统。
死锁预防
死锁预防方法不允许任何事物获取将导致死锁的锁。约定是当多个事务请求锁定相同的数据项时,只有其中一个事务被授予锁定。
最流行的死锁预防方法之一是所有锁的预先采集。在此方法中,事务在开始执行之前获取所有锁,并在整个事物持续时间内保留锁。如果另一个事务需要任何已经获取的锁,它必须等待所有需要的锁可用。使用这种方法,系统被阻止死锁,因为没有任何等待的事务持有任何锁定。
死锁避免
死锁避免方法在发生之前处理死锁。它分析事务和锁,以确定是否等待导致死锁。
该方法可以简单说明如下。事务开始执行并请求他们需要锁定的数据项。锁管理器检查锁是否可用。如果可用,锁管理器分配数据项,事务获取锁。但是,如果项目被不兼容模式下的某些其他事务锁定,则锁管理器将运行一个算法来测试是否保持事务处于等待状态会导致死锁。因此,该算法决定事物是否可以等待或其中一个事物应该被中止。
为此目的有两种算法,即等待和伤口等待。让我们假设有两个事务T1和T2,其中T1尝试锁定已经被T2锁定的数据项。算法如下 -

  • 等待死 - 如果T1比T2老,则允许T1等待。否则,如果T1小于T2,则T1中止,然后重新启动。
  • 伤口等待 - 如果T1超过T2,T2将中止,然后重新启动。否则,如果T1比T2小,T1允许等待。

死锁检测和删除
死锁检测和去除方法周期性地运行死锁检测算法,并在有一个死锁检测算法的情况下去除死锁。当事务提出锁定请求时,它不会检查死锁。当事务请求锁定时,锁管理器检查它是否可用。如果可用,则允许事务锁定数据项; 否则事物被允许等待。
由于在授予锁定请求时没有预防措施,因此某些事务可能会被锁定。为了检测死锁,锁管理器定期检查等待图片是否有循环。如果系统死锁,锁管理器会从每个周期中选择一个受害者事务。受害者中止并回滚; 然后重新启动。用于受害者选择的一些方法是 -

  • 选择最年轻的事物。
  • 选择最少数据项的事物。
  • 选择执行次数更新的事务。
  • 选择最少重新启动开销的事务。
  • 选择两个或多个周期通用的事物。

这种方法主要适用于事物量低且需要快速响应锁定请求的系统。
分布式系统中的死锁处理
分布式数据库系统中的事务处理也是分布式的,即同一事务可能在多个站点处理。在分布式数据库系统中的两个主要的僵局处理的担忧是不存在的集中式系统是事物地点和事物控制。一旦解决了这些问题,就可以通过任何死锁,预防死锁或死锁检测和删除来处理死锁。
事物位置
在多个站点中处理分布式数据库系统中的事务,并在多个站点中使用数据项。数据处理量不均匀分布在这些站点之间。处理的时间段也不同。因此,相同的事务可能在某些站点处于活动状态,而在其他站点处于非活动状态。当两个冲突事务位于站点中时,可能会发生其中一个处于非活动状态。这种情况在集中式系统中不会出现。这种担心被称为事物位置问题。
这个问题可能由Daisy Chain模型来解决。在这个模型中,当一个事物从一个站点移动到另一个站点时,一个事物会带有某些细节。一些详细信息是所需的表的列表,所需的站点列表,访问表和站点的列表,尚未访问的表和站点的列表以及所获取的锁类型列表。事物通过提交或中止终止后,信息应发送到所有相关网站。
事物控制
事务控制涉及指定和控制在分布式数据库系统中处理事务所需的站点。有关选择何处处理事物以及如何指定控制中心的选项有很多,如 -

  • 可以选择一个服务器作为控制中心。
  • 控制中心可能会从一个服务器移动到另一个服务器。
  • 控制的责任可以由多个服务器共享。

分布式死锁预防
就像集中式死锁预防一样,在分布式死锁预防方法中,事务应该在开始执行之前获取所有的锁。这可以防止死锁。
事物进入的地点被指定为控制站点。控制站点将消息发送到数据项目所在的站点以锁定项目。然后等待确认。当所有网站都确认已锁定数据项时,事务开始。如果任何站点或通信链路发生故障,事物必须等到修复完毕。
虽然实现很简单,但这种方法有一些缺点 -

  • 锁的预采购需要很长时间才能进行通信延迟。这增加了事物所需的时间。
  • 在网站或链接故障的情况下,事务必须等待很长时间才能恢复。同时,在正在运行的站点中,这些项目被锁定。这可能会阻止其他事务执行。
  • 如果控制站点出现故障,则无法与其他站点通信。这些站点继续将锁定的数据项保持在锁定状态,从而导致阻塞。

分布式死锁避免
如在集中式系统中,分布式死锁避免在发生之前处理死锁。另外,在分布式系统中,需要处理事务处理和事务控制问题。由于事物的分布性质,可能会发生以下冲突:

  • 同一网站的两笔事物之间的冲突。
  • 不同网站的两个事物之间的冲突。

在发生冲突的情况下,其中一个事务可能被中止或允许按照分布式等待模块或分布式创伤等待算法等待。
让我们假设T1和T2有两个事物。T1到达站点P,并尝试锁定已被该站点T2锁定的数据项。因此,Site P有冲突。算法如下:

  • 分布式伤口
    • 如果T1比T2大,T1允许等待。在站点P收到T2已经在所有站点成功提交或中止的消息之后,T1可以恢复执行。
    • 如果T1比T2小,T1中止。站点P的并发控制向T1所访问的所有站点发送消息,以中止T1。控制站点在所有站点成功中止T1时通知用户。


  • 分布式等待等待
    • 如果T1超过T2,T2需要中止。如果T2在站点P处于活动状态,站点P中止并回滚T2,然后将该消息广播到其他相关站点。如果T2已经离开Site P但在Site Q处于活动状态,则Site P广播T2已经中止; 站点L然后中止并回滚T2,并将此消息发送到所有站点。
    • 如果T1比T1小,T1允许等待。站点P收到T2完成处理的消息后,T1可以恢复执行。


分布式死锁检测
就像集中式死锁检测方法一样,允许发生死锁,如果检测到死锁。当事务发出锁定请求时,系统不执行任何检查。为了实现,创建了全局等待图。在全局等待图中存在一个循环表示死锁。然而,由于事务等待网络上的资源,很难发现死锁。
或者,死锁检测算法可以使用定时器。每个事务与定时器相关联,该定时器被设置为预期完成事务的时间段。如果在此时间段内没有完成事物,定时器将关闭,表示可能出现死锁。
用于死锁处理的另一种工具是死锁检测器。在集中式系统中,有一个死锁检测器。在分布式系统中,可能有多个死锁检测器。死锁检测器可以为其控制的站点找到死锁。在分布式系统中有三种死锁检测方法,即。

  • 集中式死锁检测器 - 一个站点被指定为中央死锁检测器。
  • 分层死锁检测器 - 多个死锁检测器分层排列。
  • 分布式死锁检测器 - 所有站点都参与检测死锁并将其删除。

原文作者:;如有侵权,请联系管理员删除。

下一篇: 旅游
请登录后发表评论 登录
全部评论

注册时间:2019-04-16

  • 博文量
    404
  • 访问量
    2063