CN118069383A - 一种死锁检测方法及相关装置 - Google Patents
一种死锁检测方法及相关装置 Download PDFInfo
- Publication number
- CN118069383A CN118069383A CN202410205205.7A CN202410205205A CN118069383A CN 118069383 A CN118069383 A CN 118069383A CN 202410205205 A CN202410205205 A CN 202410205205A CN 118069383 A CN118069383 A CN 118069383A
- Authority
- CN
- China
- Prior art keywords
- lock
- target
- target lock
- holder
- waiter
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 36
- 238000000034 method Methods 0.000 claims abstract description 106
- 230000008569 process Effects 0.000 claims abstract description 81
- 230000002159 abnormal effect Effects 0.000 claims abstract description 13
- 238000012545 processing Methods 0.000 claims description 20
- 238000004590 computer program Methods 0.000 claims description 17
- 238000003860 storage Methods 0.000 claims description 11
- 238000005096 rolling process Methods 0.000 claims description 6
- 238000010586 diagram Methods 0.000 description 24
- 238000004891 communication Methods 0.000 description 10
- 230000006870 function Effects 0.000 description 10
- 230000007246 mechanism Effects 0.000 description 5
- 230000007547 defect Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 2
- 238000002955 isolation Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 235000003642 hunger Nutrition 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000011835 investigation Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000006386 memory function Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000037351 starvation Effects 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施公开了一种死锁检测方法及相关装置,涉及分布式数据库领域。本申请中,服务器获取与目标数据库相关的处于事务空闲状态的第一连接,以及第一连接中目标锁持有者持有的第一资源对应的第一等待队列,再从第一等待队列中的多个第一锁等待者中,确定与目标锁持有者不存在锁级别冲突的目标锁等待者,若基于客户端信息,确定目标锁持有者的客户端进程依赖于目标锁等待者的客户端进程,则确定目标数据库存在死锁。这样,利用各连接的客户端信息,确定与异常连接相关的各连接之间的依赖关系,从而检测出外部逻辑导致的死锁,并及时针对外部死锁进行自动分析和解锁,减少了外部死锁导致业务不可用的风险,进而提高数据库并发性能。
Description
技术领域
本申请涉及分布式数据库领域,尤其涉及一种死锁检测方法及相关装置。
背景技术
在数据库系统中,事务是用户定义的一个逻辑操作单元,它由一系列数据库操作组成。在多用户的并发环境下,多个事务可能同时操作数据库,容易出现如资源争用、数据不一致等问题。
事务加锁是实现数据一致性和防止并发事务导致数据冲突的关键手段,它通过对数据对象设定不同类型的锁,实现对数据访问的排他控制,从而确保事务的原子性和隔离性。
然而,在事务使用锁定机制时,还会面临锁等待和死锁的问题。
例如,当一个事务请求的锁与其他事务已经持有的锁冲突时,数据库系统会将其置于等待状态,直到冲突解决为止,这种方式下,事务可能会面临长时间等待的情况,从而导致性能下降。特殊的,两个或多个事务相互等待对方释放资源而导致的无限循环等待现象,称为死锁,死锁的发生会阻塞事务的执行,导致系统性能下降甚至崩溃。
发明内容
本申请提供了一种死锁检测方法及相关装置,用以解决分布式集群中异常的锁等待问题,提高事务的执行效率。
第一方面,本申请实施例提供了一种死锁检测方法,所述方法包括:
获取与目标数据库相关的处于事务空闲状态的第一连接,以及第一连接中目标锁持有者持有的第一资源对应的第一等待队列,第一等待队列中包含多个请求第一资源的第一锁等待者,每个第一锁等待者与第一资源之间都存在候选连接;
从多个第一锁等待者中,确定与目标锁持有者不存在锁级别冲突的目标锁等待者,其中,锁级别冲突表征:目标锁等待者的锁级别为目标锁持有者的锁级别的冲突级别;
若基于目标锁持有者和目标锁等待者各自对应的客户端信息,确定目标锁持有者的客户端进程依赖于目标锁等待者的客户端进程,则确定目标数据库存在死锁。
第二方面,本申请实施例还提供了一种死锁检测装置,所述装置包括:
获取模块,用于获取与目标数据库相关的处于事务空闲状态的第一连接,以及第一连接中目标锁持有者持有的第一资源对应的第一等待队列,第一等待队列中包含多个请求第一资源的第一锁等待者,每个第一锁等待者与第一资源之间都存在候选连接;
选择模块,用于从多个第一锁等待者中,确定与目标锁持有者不存在锁级别冲突的目标锁等待者,其中,锁级别冲突表征:目标锁等待者的锁级别为目标锁持有者的锁级别的冲突级别;
处理模块,用于若基于目标锁持有者和目标锁等待者各自对应的客户端信息,确定目标锁持有者的客户端进程依赖于目标锁等待者的客户端进程,则确定目标数据库存在死锁。
可选的,从多个第一锁等待者中,确定与目标锁持有者不存在锁级别冲突的目标锁等待者之后,处理模块还用于:
若目标锁等待者为除目标锁持有者持有的各个资源以外的第二资源的锁持有者,则获取第二资源对应的第二等待队列,第二等待队列中包含多个请求第二资源的第二锁等待者;
若基于目标锁持有者和多个第二锁等待者各自对应的客户端信息,确定目标锁持有者依赖于至少一个第二锁等待者,则确定目标数据库存在死锁。
可选的,确定目标数据库存在死锁之后,处理模块还用于:
将第一连接对应的事务进行回滚,并释放目标锁持有者持有的各个资源。
可选的,处理模块还用于:
若目标锁持有者的客户端进程不依赖于目标锁等待者的客户端进程,且第一等待队列中,存在等待时间超过预设的等待阈值的异常锁等待者,则将第一连接对应的事务进行回滚,并释放目标锁持有者持有的各个资源。
可选的,事务空闲状态至少表征:
第一连接已获取相应事务需求的所有资源,但未执行相应事务对应的任何操作。
可选的,基于目标锁持有者和目标锁等待者各自对应的客户端信息,确定目标锁持有者的客户端进程依赖于目标锁等待者的客户端进程时,处理模块用于:
基于目标锁持有者对应的客户端信息,确定第一连接对应的客户端进程,以及基于目标锁等待者对应的客户端信息,确定目标锁等待者所属的候选连接对应的客户端进程;
若目标锁持有者的客户端进程是目标锁等待者的客户端进程的父进程,则确定目标锁持有者的客户端进程依赖于目标锁等待者的客户端进程。
第三方面,本申请实施例提供一种电子设备,包括存储器,处理器及存储在存储器上并可在处理器运行的计算机程序,所述处理器执行所述计算机程序时实现如第一方面任一项所述的方法。
第四方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面任一所述方法的步骤。
第五方面,本申请实施例提供一种计算机程序产品,所述计算机程序产品在被计算机调用时,使得所述计算机执行如第一方面所述的方法。
本申请实施例中,提出了一种死锁检测方法及相关装置,服务器获取与目标数据库相关的处于事务空闲状态的第一连接,以及第一连接中目标锁持有者持有的第一资源对应的第一等待队列,再从第一等待队列中的多个第一锁等待者中,确定与目标锁持有者不存在锁级别冲突的目标锁等待者,若基于目标锁持有者和目标锁等待者各自对应的客户端信息,确定目标锁持有者的客户端进程依赖于目标锁等待者的客户端进程,则确定目标数据库存在死锁。
这样,当数据库中出现异常状态的连接时,利用各连接的客户端信息,确定与异常连接相关的各连接之间的依赖关系,从而检测出外部逻辑导致的死锁,弥补了现有的全局死锁检测机制无法检测外部死锁场景的缺陷,并及时针对外部死锁进行自动分析和解锁,减少了外部死锁导致业务不可用的风险,进而提高数据库并发性能。
本申请的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请而了解。本申请的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
图1为本申请实施例中可能的应用场景示意图;
图2为本申请实施例中一种死锁检测方法流程图;
图3为本申请实施例中第一连接等待关系示意图;
图4为本申请实施例中一种依赖关系判断方法流程图;
图5为本申请实施例中第二连接等待关系示意图;
图6为本申请实施例中第三连接等待关系示意图;
图7为本申请实施例中连接与资源的关系示意图;
图8为本申请实施例中第四连接等待关系示意图;
图9为本申请实施例中第五连接等待关系示意图;
图10为本申请实施例中一种死锁检测装置的结构示意图;
图11为本申请实施例中一种电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请技术方案的一部分实施例,而不是全部的实施例。基于本申请文件中记载的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请技术方案保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够在除了这里图示或描述的那些以外的顺序实施。
以下对本申请实施例中的部分用语进行解释说明,以便于本领域技术人员理解。
(1)连接(connection):在数据库中,连接表示建立和维护数据库系统与应用程序之间的通信路径或通道,它是应用程序与数据库之间的桥梁,用于发送数据库查询和接收查询结果。
(2)事务空闲(idle in transaction):进程在处理事务的过程中,但当前没有执行任何语句。
(3)互联网协议地址(Internet Protocol Address,IP地址):IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
下面对本申请实施例的设计思想进行简要介绍:
在高并发的分布式数据库中,为了保证事务的原子性、一致性、隔离性和持久性,会使用一些加锁、信号量等方法限制各事务对资源的访问,而当两个或多个事务永久等待对方所持有的资源,形成环路依赖时,就会出现死锁。
目前,成熟的数据库都会有一套死锁检测以及解锁机制,例如全局死锁检测(GlobalDeadlockDetector),在检测到两个事务发送死锁时,随机指定一个事务放弃持有的资源,等待另一个事务执行完成后在执行。
然而,现有的全局死锁检测方法,只能检测到两个或多个事务相互持有对方需要的资源,而又不主动释放自身持有的资源,导致所有事务都无法继续执行的死锁场景,针对由于客户端进程之间存在依赖关系的外部死锁场景,无法直接基于资源占用的情况分析检测出。
有鉴于此,本申请实施例中,提出了一种死锁检测方法及相关装置。
在本申请实施例中,服务器获取与目标数据库相关的处于事务空闲状态的第一连接,以及第一连接中目标锁持有者持有的第一资源对应的第一等待队列,再从第一等待队列中的多个第一锁等待者中,确定与目标锁持有者不存在锁级别冲突的目标锁等待者,若基于目标锁持有者和目标锁等待者各自对应的客户端信息,确定目标锁持有者的客户端进程依赖于目标锁等待者的客户端进程,则确定目标数据库存在死锁。
这样,当数据库中出现异常状态的连接时,利用各连接的客户端信息,确定与异常连接相关的各连接之间的依赖关系,从而检测出外部逻辑导致的死锁,弥补了现有的全局死锁检测机制无法检测外部死锁场景的缺陷,并及时针对外部死锁进行自动分析和解锁,减少了外部死锁导致业务不可用的风险,进而提高数据库并发性能。
以下结合说明书附图对本申请的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本申请,并不用于限定本申请,并且在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
参阅图1所示,其为本申请实施例中可能的应用场景示意图。
该应用场景中包括终端设备110(包括终端设备1101、终端设备1102…终端设备110n)和服务器120,终端设备110与服务器120之间可以通过通信网络进行通信。
在一种可选的实施方式中,通信网络可以是有线网络或无线网络。因此,终端设备110和服务器120可以通过有线或无线通信方式进行直接或间接地连接。比如,终端设备110可以通过无线接入点与服务器120间接地连接,或发终端设备110通过因特网与服务器120直接地连接,本申请在此不做限制。
在本申请实施例中,终端设备110包括但不限于手机、平板电脑、笔记本电脑、台式电脑、电子书阅读器、智能语音交互设备、智能家电、车载终端等设备;终端设备上可以安装有各种客户端,该客户端可以是支持视频预览、视频播放等功能的应用程序(例如浏览器、游戏软件等),也可以是网页、小程序等;
服务器120是与终端设备110中安装的客户端相对应的后台服务器。服务器120可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content Delivery Network,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。
需要说明的是,本申请实施例中的死锁检测方法可以由电子设备执行,该电子设备可以为服务器120或者终端设备110,即,该方法可以由服务器120或者终端设备110单独执行,也可以由服务器120和终端设备110共同执行。
需要说明的是,在下文中,主要是以服务器单独执行为例进行举例说明的,在此不做具体限定。
需要说明的是,图1所示只是举例说明,实际上终端设备110和服务器120的数量不受限制,在本申请实施例中不做具体限定。
本申请实施例中,当服务器120的数量为多个时,多个服务器120可组成为一区块链,而服务器120为区块链上的节点。
参阅图2所示,其为本申请实施例中一种死锁检测方法流程图,下面结合附图2,对具体执行的步骤进行详细说明:
步骤S201:获取与目标数据库相关的处于事务空闲状态的第一连接,以及第一连接中目标锁持有者持有的第一资源对应的第一等待队列。
其中,第一等待队列中包含多个请求第一资源的第一锁等待者,每个第一锁等待者与第一资源之间都存在候选连接。
具体的,客户端通过与目标数据库建立通信连接,从而启动进程执行针对目标资源对象的事务,当一个客户端获取到需求的资源对象并对其成功上锁时,该客户端则成为相应资源对象的一个锁持有者,其他申请该资源对象的客户端与之冲突时,将被挂起至等待队列,成为该资源对象的一个锁等待者。
本申请实施例中,服务器通过目标数据库中记录的各数据节点的锁信息,可以整理获得各客户端与目标数据库建立的多个通信连接,进而通过各个通信连接对应的事务的工作状态判断目标数据库中异常锁等待甚至死锁问题。
当目标数据库中出现处于事务空闲状态的第一连接时,服务器将触发死锁检测流程,获取第一连接中目标锁持有者持有的第一资源对应的等待队列。
其中,事务空闲状态至少表征:第一连接已获取相应事务需求的所有资源,但未执行相应事务对应的任何操作。
例如,参阅表1所示,其为本申请实施例中目标数据库相关的部分连接关系示意表:
表1
Connection | Locktype | Relation | State | Grant |
P1 | AccessShareLock | R1 | Idle in transaction | T |
P2 | AccessExclusiveLock | R1 | active | F |
P3 | AccessShareLock | R1 | active | F |
P4 | AccessExclusiveLock | R1 | active | F |
P5 | AccessShareLock | R1 | active | F |
P5 | AccessShareLock | R2 | active | T |
P6 | AccessShareLock | R2 | active | F |
其中,Connection一栏记录了不同客户端与目标数据库之间的通信连接,Relation一栏记录了各连接所需求的数据库资源对象,Locktype一栏记录了各连接对应的客户端针对相应资源对象请求的锁的类型,State一栏记录了各连接当前的工作状态,Grant一栏表示当前连接对应的客户端是否(T/F)已获得对应的锁。
由表1可知,P1为资源对象R1的锁持有者,P2、P3、P4、P5为R1的锁等待者,同时,P5为资源对象R2的锁持有者,P6为R2的锁等待者。
P1的工作状态为Idle in transaction,即本申请实施例中的事务空闲状态,因此,P1为本申请实施例中的目标锁持有者,R1为本申请实施例中的第一资源,服务器将获取P1持有的资源R1对应的第一等待队列,即P2、P3、P4、P5组成的队列。其中,P2、P3、P4、P5已按照其查询开始时间(query_start)依次排列,所谓查询开始时间也可以理解为连接创建时间,即各个锁等待者先到先入队。
需要说明的是,若P1持有不止R1一个资源对象,则服务器针对P1持有的每一个资源对象都会分别执行相同的操作。
步骤S202:从多个第一锁等待者中,确定与目标锁持有者不存在锁级别冲突的目标锁等待者。
其中,锁级别冲突表征:目标锁等待者的锁级别为目标锁持有者的锁级别的冲突级别。
进一步的,服务器基于各个锁等待者针对第一资源请求的锁的类型,从第一等待队列包含的多个第一锁等待者中,筛选出与目标锁持有者不存在锁级别冲突的目标锁等待者。
具体的,类型不同的锁对应的锁级别不相同,本申请以greenplum数据库为例,一共有八种不同类型的锁,分别对应八种不同级别,锁级别之间的冲突关系固定。
参阅表2所示,其为本申请实施例提供的一种greenplum数据库锁冲突关系表:
表2
其中,Locktype记录了锁的不同类型,Level一栏记录了不同类型的锁对应的锁级别,Conflict Locktype一栏记录了当前锁级别对应的冲突级别。
结合表1和表2可知,R1对应的等待队列中,P3、P5与P1之间不存在锁级别冲突,因此,P3和P5即为本申请实施例中的目标锁等待者。
步骤S203:若基于目标锁持有者和目标锁等待者各自对应的客户端信息,确定目标锁持有者的客户端进程依赖于目标锁等待者的客户端进程,则确定目标数据库存在死锁。
具体的,当锁持有者释放已持有的资源对象时,等待队列中的第一个锁等待者将会获取相应的锁,成为新的锁持有者,以此类推。因此,各锁等待者的等待对象本质为当前的锁持有者。
例如,参阅图3所示,其为本申请实施例中第一连接等待关系示意图,其中,P2、P3、P4、P5均在等待P1(释放R1),同时P6在等待P5(释放R2)。
由于P1当前处于Idle in transaction状态,会导致R1长时间得不到释放,服务器则在图3所示锁等待关系的基础上,判断是否存在死锁。
本申请实施例中,服务器基于P1和P3、P5各自对应的客户端信息,判断P1与P3、P5是否存在依赖关系,若P1依赖于P3或P5,服务器则确定目标数据库存在死锁。
参阅图4所示,其为本申请实施例中一种依赖关系判断方法流程图,具体包括:
步骤S2031:基于目标锁持有者对应的客户端信息,确定第一连接对应的客户端进程,以及基于目标锁等待者对应的客户端信息,确定目标锁等待者所属的候选连接对应的客户端进程。
具体的,各客户端在与目标数据建立连接时,需要带上自身的客户端信息,具体包括IP地址、端口号、服务名、模块名等信息,服务器基于客户端信息可以收集到连接对应的进程信息,对于Idle in transaction状态的连接将会额外收集进程树信息。
步骤S2032:若目标锁持有者的客户端进程是目标锁等待者的客户端进程的父进程,则确定目标锁持有者的客户端进程依赖于目标锁等待者的客户端进程。
若服务器基于进程信息确定目标锁持有者的客户端进程,和一个目标锁等待者的客户端进程存在父子关系,则目标锁持有者的客户端进程依赖于目标锁等待者的客户端进程。
例如,参阅图5所示,其为本申请实施例中第二连接等待关系示意图,假设P1依赖于P5,即P1需要在P5执行完毕之后才能执行,则P1会等待P5,此时,P1和P5互相等待,导致出现无限循环等待现象,也即死锁。
值得注意的是,在上述过程中,服务器并未考虑P1与P2、P3之间是否存在依赖关系,是因为通常情况下,具有父子关系的两个进程不可能同时针对完全相同的资源对象请求不同级别的锁,而P2、P3与P1相同,均是仅需求资源对象R1,并且请求的锁与P1持有的锁存在锁级别冲突,因此,服务器在进行依赖关系判断之前,会基于各锁等待者请求的锁级别,将不符合条件的连接剔除,从而缩小排查范围,提高死锁检测的效率。
此外,本申请提供的死锁检测方法还包括:
若目标锁等待者为除目标锁持有者持有的各个资源以外的第二资源的锁持有者,则获取第二资源对应的第二等待队列。
其中,第二等待队列中包含多个请求第二资源的第二锁等待者。
例如,结合表1所示,R2即为本申请中的第二资源,P6则为第二资源对应的第二等待队列中的一个第二锁等待者。
若基于目标锁持有者和多个第二锁等待者各自对应的客户端信息,确定目标锁持有者依赖于至少一个第二锁等待者,则确定目标数据库存在死锁。
例如,参阅图6所示,其为本申请实施例中第三连接等待关系示意图,假设P1依赖于P6,即P1需要在P6执行完毕之后才能执行,则P1会等待P6,此时,P1等待P5,P5等待P1,而P1等待P6,等待图中出现环路,形成死锁。
需要说明的是,若P6同时是除R2以外的第三资源的锁持有者,则服务器采用同样的方式判断P1与第三资源等待队列中包含的第三锁等待者之间的依赖关系。
基于步骤S203所述,在获取客户端信息的基础上,通过检查处于异常状态下的连接与其相关连接之间的依赖关系,绘制等待有向图,将各连接之间的等待关系可视化,可以确定目标数据库中是否存在由外部逻辑导致的死锁,以及确定死锁原因和死锁数量。
进一步的,本申请实施例中,服务器确定目标数据库存在死锁之后,会将第一连接对应的事务进行回滚,并释放目标锁持有者持有的各个资源。
具体的,服务器记录第一连接的相关信息,以便后续问题场景的追溯,并调用数据库方法取消第一连接对应的查询,针对事务进行回滚,释放目标锁持有者持有的所有资源,使得各个锁等待者能够按顺序依次执行。
在另一种可选的实施例中,若目标锁持有者的客户端进程不依赖于目标锁等待者的客户端进程,且第一等待队列中,存在等待时间超过预设的等待阈值的异常锁等待者,则将第一连接对应的事务进行回滚,并释放目标锁持有者持有的各个资源。
通常情况下,锁等待者在入队时,数据库会持续记录其等待时长,当一个锁等待者的等待时长超过等待阈值时,服务器会直接将当前的锁持有者回滚,并释放其持有的所有资源,避免锁等待者长时间等待导致进程饿死。
基于上述实施例,下面采用一个具体的应用场景,对本申请实施例中的死锁检测的过程进行说明。
参阅表3所示,其为本申请实施例中greenplum数据库相关的部分连接关系示意表:
表3
基于表3可知,连接P_1为资源R_1的锁持有者,P_2为R_1的锁等待者,同时为R_2的锁持有者,P_3为R_2的锁等待者。
由于P_1处于Idle in transaction状态,使得服务器触发死锁检测流程。
首先,服务器基于表3中的信息可以获得各连接与各资源之间关系,如图7所示,其为本申请实施例中连接与资源的关系示意图,其中,实线箭头表示连接已获取的资源,虚线箭头表示连接等待的资源。
其次,为了更直观地获取连接之间的冲突等待关系,服务器将资源从关系图中删除,如图8所示,其为本申请实施例中第四连接等待关系示意图,其中,P_2等待P_1,P_3等待P_2。
进一步的,服务器基于各连接对应的客户端信息,确定P_1对应的客户端进程是P_3对应的客户端进程的父进程,即P_1会等待P_3,如图9所示,其为本申请实施例中第五连接等待关系示意图,其中,P_1、P_2、P_3之间出现环路等待,导致死锁。
最后,服务器将P_1回滚,并释放R_1,使得P_2获得资源R_1并顺利执行,如果后续形成新的死锁状态,则可以采用同样的方式进行处理。
综上所述,本申请实施例中,在出现异常状态的连接时,通过结合各连接的客户端信息,确定各连接之间的依赖关系,从而检测出外部逻辑导致的死锁,弥补了现有的全局死锁检测机制无法检测外部死锁场景的缺陷,并针对外部死锁进行自动分析和解锁,减少了外部死锁导致业务不可用的风险。
此外,尽管在附图中以特定顺序描述了本申请方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
基于相同技术构思,参阅图10所示,本申请实施例还提供了一种死锁检测装置,该装置包括:
获取模块1001,用于获取与目标数据库相关的处于事务空闲状态的第一连接,以及第一连接中目标锁持有者持有的第一资源对应的第一等待队列,第一等待队列中包含多个请求第一资源的第一锁等待者,每个第一锁等待者与第一资源之间都存在候选连接;
选择模块1002,用于从多个第一锁等待者中,确定与目标锁持有者不存在锁级别冲突的目标锁等待者,其中,锁级别冲突表征:目标锁等待者的锁级别为目标锁持有者的锁级别的冲突级别;
处理模块1003,用于若基于目标锁持有者和目标锁等待者各自对应的客户端信息,确定目标锁持有者的客户端进程依赖于目标锁等待者的客户端进程,则确定目标数据库存在死锁。
可选的,从多个第一锁等待者中,确定与目标锁持有者不存在锁级别冲突的目标锁等待者之后,处理模块1003还用于:
若目标锁等待者为除目标锁持有者持有的各个资源以外的第二资源的锁持有者,则获取第二资源对应的第二等待队列,第二等待队列中包含多个请求第二资源的第二锁等待者;
若基于目标锁持有者和多个第二锁等待者各自对应的客户端信息,确定目标锁持有者依赖于至少一个第二锁等待者,则确定目标数据库存在死锁。
可选的,确定目标数据库存在死锁之后,处理模块1003还用于:
将第一连接对应的事务进行回滚,并释放目标锁持有者持有的各个资源。
可选的,处理模块1003还用于:
若目标锁持有者的客户端进程不依赖于目标锁等待者的客户端进程,且第一等待队列中,存在等待时间超过预设的等待阈值的异常锁等待者,则将第一连接对应的事务进行回滚,并释放目标锁持有者持有的各个资源。
可选的,事务空闲状态至少表征:
第一连接已获取相应事务需求的所有资源,但未执行相应事务对应的任何操作。
可选的,基于目标锁持有者和目标锁等待者各自对应的客户端信息,确定目标锁持有者的客户端进程依赖于目标锁等待者的客户端进程时,处理模块1003用于:
基于目标锁持有者对应的客户端信息,确定第一连接对应的客户端进程,以及基于目标锁等待者对应的客户端信息,确定目标锁等待者所属的候选连接对应的客户端进程;
若目标锁持有者的客户端进程是目标锁等待者的客户端进程的父进程,则确定目标锁持有者的客户端进程依赖于目标锁等待者的客户端进程。
基于相同的技术构思,本申请实施例还提供了一种电子设备,该电子设备可实现本申请上述实施例提供的死锁检测的方法流程。
在一种实施例中,该电子设备可以是服务器,也可以是终端设备或其他电子设备。
参阅图11所示,该电子设备可包括:
至少一个处理器1101,以及与至少一个处理器1101连接的存储器1102,本申请实施例中不限定处理器1101与存储器1102之间的具体连接介质,图11中是以处理器1101和存储器1102之间通过总线1100连接为例。总线1100在图11中以粗线表示,其它部件之间的连接方式,仅是进行示意性说明,并不引以为限。总线1100可以分为地址总线、数据总线、控制总线等,为便于表示,图11中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。或者,处理器1101也可以称为控制器,对于名称不做限制。
在本申请实施例中,存储器1102存储有可被至少一个处理器1101执行的指令,至少一个处理器1101通过执行存储器1102存储的指令,可以执行前文论述的一种死锁检测方法。处理器1101可以实现图10所示的装置中各个模块的功能。
其中,处理器1101是该装置的控制中心,可以利用各种接口和线路连接整个该控制设备的各个部分,通过运行或执行存储在存储器1102内的指令以及调用存储在存储器1102内的数据,该装置的各种功能和处理数据,从而对该装置进行整体监控。
在一种可能的设计中,处理器1101可包括一个或多个处理单元,处理器1101可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器1101中。在一些实施例中,处理器1101和存储器1102可以在同一芯片上实现,在一些实施例中,它们也可以在独立的芯片上分别实现。
处理器1101可以是通用处理器,例如CPU、数字信号处理器、专用集成电路、现场可编程门阵列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本申请实施例中公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本申请实施例所公开的一种死锁检测方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器1102作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块。存储器1102可以包括至少一种类型的存储介质,例如可以包括闪存、硬盘、多媒体卡、卡型存储器、随机访问存储器(Random AccessMemory,RAM)、静态随机访问存储器(Static Random Access Memory,SRAM)、可编程只读存储器(Programmable Read Only Memory,PROM)、只读存储器(Read Only Memory,ROM)、带电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、磁性存储器、磁盘、光盘等等。存储器1102是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。本申请实施例中的存储器1102还可以是电路或者其它任意能够实现存储功能的装置,用于存储程序指令和/或数据。
通过对处理器1101进行设计编程,可以将前述实施例中介绍的一种死锁检测方法所对应的代码固化到芯片内,从而使芯片在运行时能够执行图2所示的实施例的一种死锁检测方法的步骤。如何对处理器1101进行设计编程为本领域技术人员所公知的技术,这里不再赘述。
基于同一发明构思,本申请实施例还提供一种存储介质,该存储介质存储有计算机指令,当该计算机指令在计算机上运行时,使得计算机执行前文论述的一种死锁检测方法。
在一些可能的实施方式中,本申请提供一种死锁检测方法的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在装置上运行时,程序代码用于使该控制设备执行本说明书上述描述的根据本申请各种示例性实施方式的一种死锁检测方法中的步骤。
应当注意,尽管在上文详细描述中提及了装置的若干单元或子单元,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本申请的实施方式,上文描述的两个或更多单元的特征和功能可以在一个单元中具体化。反之,上文描述的一个单元的特征和功能可以进一步划分为由多个单元来具体化。
此外,尽管在附图中以特定顺序描述了本申请方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (10)
1.一种死锁检测方法,其特征在于,包括:
获取与目标数据库相关的处于事务空闲状态的第一连接,以及所述第一连接中目标锁持有者持有的第一资源对应的第一等待队列,所述第一等待队列中包含多个请求所述第一资源的第一锁等待者,每个第一锁等待者与所述第一资源之间都存在候选连接;
从多个第一锁等待者中,确定与所述目标锁持有者不存在锁级别冲突的目标锁等待者,其中,所述锁级别冲突表征:目标锁等待者的锁级别为所述目标锁持有者的锁级别的冲突级别;
若基于所述目标锁持有者和所述目标锁等待者各自对应的客户端信息,确定所述目标锁持有者的客户端进程依赖于所述目标锁等待者的客户端进程,则确定所述目标数据库存在死锁。
2.如权利要求1所述的方法,其特征在于,所述从多个第一锁等待者中,确定与所述目标锁持有者不存在锁级别冲突的目标锁等待者之后,还包括:
若所述目标锁等待者为除所述目标锁持有者持有的各个资源以外的第二资源的锁持有者,则获取所述第二资源对应的第二等待队列,所述第二等待队列中包含多个请求所述第二资源的第二锁等待者;
若基于所述目标锁持有者和多个第二锁等待者各自对应的客户端信息,确定所述目标锁持有者依赖于至少一个第二锁等待者,则确定所述目标数据库存在死锁。
3.如权利要求1或2所述的方法,其特征在于,所述确定所述目标数据库存在死锁之后,还包括:
将所述第一连接对应的事务进行回滚,并释放所述目标锁持有者持有的各个资源。
4.如权利要求1或2所述的方法,其特征在于,还包括:
若所述目标锁持有者的客户端进程不依赖于所述目标锁等待者的客户端进程,且所述第一等待队列中,存在等待时间超过预设的等待阈值的异常锁等待者,则将所述第一连接对应的事务进行回滚,并释放所述目标锁持有者持有的各个资源。
5.如权利要求1或2所述的方法,其特征在于,所述事务空闲状态至少表征:
所述第一连接已获取相应事务需求的所有资源,但未执行所述相应事务对应的任何操作。
6.如权利要求1或2所述的方法,其特征在于,所述基于所述目标锁持有者和所述目标锁等待者各自对应的客户端信息,确定所述目标锁持有者的客户端进程依赖于所述目标锁等待者的客户端进程,包括:
基于所述目标锁持有者对应的客户端信息,确定所述第一连接对应的客户端进程,以及基于所述目标锁等待者对应的客户端信息,确定所述目标锁等待者所属的候选连接对应的客户端进程;
若所述目标锁持有者的客户端进程是所述目标锁等待者的客户端进程的父进程,则确定所述目标锁持有者的客户端进程依赖于所述目标锁等待者的客户端进程。
7.一种死锁检测装置,其特征在于,包括:
获取模块,用于获取与目标数据库相关的处于事务空闲状态的第一连接,以及所述第一连接中目标锁持有者持有的第一资源对应的第一等待队列,所述第一等待队列中包含多个请求所述第一资源的第一锁等待者,每个第一锁等待者与所述第一资源之间都存在候选连接;
选择模块,用于从多个第一锁等待者中,确定与所述目标锁持有者不存在锁级别冲突的目标锁等待者,其中,所述锁级别冲突表征:目标锁等待者的锁级别为所述目标锁持有者的锁级别的冲突级别;
检测模块,用于若基于所述目标锁持有者和所述目标锁等待者各自对应的客户端信息,确定所述目标锁持有者的客户端进程依赖于所述目标锁等待者的客户端进程,则确定所述目标数据库存在死锁。
8.一种电子设备,包括存储器,处理器及存储在存储器上并可在处理器运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1-6中任一项所述的方法。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-6中任一项所述方法的步骤。
10.一种计算机程序产品,其特征在于,所述计算机程序产品在被计算机调用时,使得所述计算机执行如权利要求1-6任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410205205.7A CN118069383A (zh) | 2024-02-23 | 2024-02-23 | 一种死锁检测方法及相关装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410205205.7A CN118069383A (zh) | 2024-02-23 | 2024-02-23 | 一种死锁检测方法及相关装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN118069383A true CN118069383A (zh) | 2024-05-24 |
Family
ID=91110755
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410205205.7A Pending CN118069383A (zh) | 2024-02-23 | 2024-02-23 | 一种死锁检测方法及相关装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118069383A (zh) |
-
2024
- 2024-02-23 CN CN202410205205.7A patent/CN118069383A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
AU2016244128B2 (en) | Processing database transactions in a distributed computing system | |
CN106415538B (zh) | 使用共享文件访问-rest接口的文件服务 | |
CN110188110B (zh) | 一种构建分布式锁的方法及装置 | |
US20090300017A1 (en) | Transaction Parallel Control Method, and Database Managemet System | |
CN104065636B (zh) | 数据处理方法和系统 | |
CN112099962B (zh) | 分布式锁实现方法、装置和电子设备 | |
CN111475519B (zh) | 数据缓存方法及装置 | |
Padhye et al. | Scalable transaction management with snapshot isolation for NoSQL data storage systems | |
CN107832159A (zh) | 管理分布式锁的方法和计算机可读存储介质 | |
CN113239098B (zh) | 一种数据管理方法、计算机及可读存储介质 | |
WO2022242372A1 (zh) | 对象处理方法、装置、计算机设备和存储介质 | |
CN112711606A (zh) | 数据库访问方法、装置、计算机设备和存储介质 | |
JP3844933B2 (ja) | データベースサーバ処理方法 | |
CN111752715A (zh) | 大量请求量下的系统优化方法、装置、设备及存储介质 | |
CN116662426A (zh) | 数据库连接的建立方法、装置、设备及介质 | |
CN118069383A (zh) | 一种死锁检测方法及相关装置 | |
WO2022267676A1 (zh) | 共享内存的数据处理方法、装置、设备和介质 | |
US7539678B2 (en) | Systems and methods for controlling access to an object | |
CN114490098A (zh) | 一种防止页面配置多用户同时编辑的方法 | |
CN115599532A (zh) | 一种访问索引的方法以及计算机集群 | |
Reddy et al. | Reducing the blocking in two-phase commit with backup sites | |
CN109791541A (zh) | 日志序列号生成方法、装置及可读存储介质 | |
CN113485639B (zh) | 分布式存储的io速度优化方法、系统、终端及存储介质 | |
CN111221658B (zh) | 系统死锁的检测方法及系统 | |
CN117555874B (zh) | 一种分布式数据库的日志存储方法、装置、设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |