死锁处理方法、装置、电子设备及计算机存储介质与流程

文档序号:26405644发布日期:2021-08-24 16:19阅读:47来源:国知局
本发明实施例涉及计算机
技术领域
:,尤其涉及一种死锁处理方法、装置、电子设备及计算机存储介质。
背景技术
::数据库中的事务是数据库并发控制的基本单位,一个事务涉及的一条或者一组语句的执行要么全部成功,对数据库中的某些数据成功修改;要么全部不成功,数据库中的数据还原到这些语句执行之前的状态。为保证事务执行的完整性和并发性,对数据库事务的执行可应用加锁机制。例如,可以通过对一个事务涉及的sql语句和/或sql语句所针对的记录、字段或文件等数据进行加锁,以保证该事务的顺利执行。虽然通过加锁机制保证了事务执行的完整性和并发性,但也同时带来了死锁问题。死锁是指两个或两个以上的事务进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象。为解决死锁,大部分数据库系统中都设置有死锁检测机制。在某些数据库场景中,如跨分区segment数据库场景中,还引入了gdd(globaldeadlockdetector,全局死锁检测)机制。gdd能检测到跨越多个segment出现的死锁场景,并按照一定规则来打破死锁循环。目前,使用gdd打破死锁循环时,采用反复尝试移除引发死锁的最大session值对应的顶点,然后再进行移除reduce操作的方式。但是,这种方式会导致无关session的执行被中断取消,从而引发用户查询被无故打断,严重影响了用户体验。技术实现要素:有鉴于此,本发明实施例提供一种死锁处理方案,以至少部分解决上述问题。根据本发明实施例的第一方面,提供了一种死锁处理方法,包括:获取数据库运行过程中的锁等待图;对所述锁等待图进行强连通分量检测,获取所述锁等待图中存在的强连通分量;根据所述锁等待图中的强连通分量确定待进行的强连通解除操作的信息,根据所述强连通解除操作的信息解除所述强连通分量对应的死锁。根据本发明实施例的第二方面,提供了一种死锁处理装置,包括:第一获取模块,用于获取数据库运行过程中的锁等待图;第二获取模块,用于对所述锁等待图进行强连通分量检测,获取所述锁等待图中存在的强连通分量;解除模块,用于根据所述锁等待图中的强连通分量确定待进行的强连通解除操作的信息,根据所述强连通解除操作的信息解除所述强连通分量对应的死锁。根据本发明实施例的第三方面,提供了一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如第一方面所述的死锁处理方法对应的操作。根据本发明实施例的第四方面,提供了一种计算机存储介质,其上存储有计算机程序,该程序被处理器执行时实现如第一方面所述的死锁处理方法。根据本发明实施例提供的死锁处理方案,在数据库运行过程中,产生死锁的事务会对应到锁等待图中的强连通分量上,也即,锁等待图中的每个强连通分量对应于一个死锁。基于此,对强连通分量的强连通解除操作即意味着打破死锁。因强连通分量仅与产生死锁的事务有关,与该死锁无关的事务则不会被涉及。因此,可以有效保证gdd死锁处理过程中,只有与死锁有关的事务会被中断或取消,不会波及与死锁无关事务,从而使得与死锁无关事务对应的用户查询不会被无故打断,提升了用户体验。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。图1a为根据本发明实施例一的一种死锁处理方法的步骤流程图;图1b为图1a所示实施例中的一种场景示例的示意图;图2a为根据本发明实施例二的一种死锁处理方法的步骤流程图;图2b为图2a所示实施例中的一种锁等待图的示意图;图2c为对图2b所示的锁等待图进行强连通解除操作的示意图;图2d为对图2b所示的锁等待图进行强连通解除操作的操作结果示意图;图3为根据本发明实施例三的一种死锁处理装置的结构框图;图4为根据本发明实施例四的一种死锁处理装置的结构框图;图5为根据本发明实施例五的一种电子设备的结构示意图。具体实施方式为了使本领域的人员更好地理解本发明实施例中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明实施例一部分实施例,而不是全部的实施例。基于本发明实施例中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于本发明实施例保护的范围。下面结合本发明实施例附图进一步说明本发明实施例具体实现。实施例一参照图1a,示出了根据本发明实施例一的一种死锁处理方法的步骤流程图。本实施例的死锁处理方法包括以下步骤:步骤s102:获取数据库运行过程中的锁等待图。对于涉及事务和加锁机制的数据库系统,其在运行过程中可生成相应的锁等待图,以表征运行的数据库事务之间的资源需求关系。可见,该锁等待图为有向图。锁等待图可以由本领域技术人员根据实际需求触发生成,如周期性触发生成,或根据适当的触发指令生成,等等。从数据库系统角度而言,数据库事务可以通过会话session实现。基于此,可以已建立的session为顶点,以各个session间的资源需求关系作为有向边,从而生成数据库运行过程中的锁等待图。步骤s104:对锁等待图进行强连通分量检测,获得锁等待图中存在的强连通分量。在有向图g中,如果两个顶点(vi,vj)间有一条从vi到vj的有向边,同时还有一条从vj到vi的有向边,则称两个顶点(vi,vj)强连通。其中,有向图g的极大强连通子图,称为强连通分量。具体到本实施例,当锁等待图中存在强连通分量时,则意味着两个顶点对应的session之间在互相等待资源,可以据此判定数据库事务发生了死锁。也即,若锁等待图中出现强连通分量,则可认为数据库事务发生了死锁,需要处理。需要说明的是,强连通分量检测可以周期性触发执行,也可以由本领域技术人员根据实际需求设置任意适当的触发条件触发执行。本步骤中,通过对锁等待图进行强连通分量检测,获得锁等待图中存在的一个或多个(两个及两个以上)强连通分量,由此也可确定发生了死锁的session的信息。步骤s106:根据锁等待图中的强连通分量确定待进行的强连通解除操作的信息,根据强连通解除操作的信息解除强连通分量对应的死锁。其中,待进行的强连通解除操作的信息可以是例如,从强连通分量中去除某个或某些节点,使得锁等待图中不再存在强连通分量。因每个节点对应一个数据库事务会话session,则可通过终止节点对应的session,达到解除死锁的效果。在实际操作中,可以根据锁等待图中的强连通分量确定待进行的强连通解除操作的信息,如去除某个或某些节点,并在对锁等待图执行该解除操作后,根据该解除操作的操作结果解除强连通分量对应的死锁。或者,可以根据锁等待图中的强连通分量确定待进行的强连通解除操作所涉及的节点的信息,基于该节点的信息终止对应的session,以解除该session对应的死锁,然后,对锁等待图进行操作,解除锁等待图中的强连通分量。或者,可以根据锁等待图中的强连通分量确定待进行的强连通解除操作所涉及的节点的信息及该节点对应的session的信息,然后,并行对锁等待图和session进行操作,以同时进行锁等待图的强连通解除操作和死锁解除操作。需要说明的是,若锁等待图中存在多个强连通分量,则需要对每个强连通分量均进行强连通解除操作。对多个强连通分量的强连通解除操作可以并行执行,也可以逐个串行执行。类似地,终止session的操作也可以并行或串行执行。上述过程的一个场景示例如图1b所示,图1b中,假设用户a请求根据数据库中的记录x更新记录y,其通过用户a所在客户端与数据库之间建立的session1实现;与此同时,用户b请求根据数据库中的记录y更新记录x,其通过用户b所在客户端与数据库之间建立的session2实现。若针对用户a的请求对记录y进行了写操作加锁,而针对用户b的请求对记录x进行了写操作加锁。用户a等待用户b释放记录x,而用户b又等待用户a释放记录y,由此造成session1和session2之间的死锁。又假设此时用户c通过session3请求读取记录x的数据,则三者之间形成的锁等待图如图1b中第一个方框中所示。对该锁等待图进行强连通分量检测,获得其中的强连通分量,如第二个方框中的虚线部分所示。进一步地,对强连通分量进行强连通解除操作,本示例中设定通过去除session1对应的顶点进行强连通解除,并且,通过终止session1来实现该强连通分量对应的死锁解除。解除后的结果如第三个方框中所示。可见,通过本实施例,在数据库运行过程中,产生死锁的事务会对应到锁等待图中的强连通分量上,也即,锁等待图中的每个强连通分量对应于一个死锁。基于此,对强连通分量的强连通解除操作即意味着打破死锁。因强连通分量仅与产生死锁的事务有关,与该死锁无关的事务则不会被涉及。因此,可以有效保证gdd死锁处理过程中,只有与死锁有关的事务会被中断或取消,不会波及与死锁无关事务,从而使得与死锁无关事务对应的用户查询不会被无故打断,提升了用户体验。本实施例的死锁处理方法可以由任意适当的具有数据处理能力的电子设备执行,包括但不限于:服务器、pc机等。实施例二参照图2a,示出了根据本发明实施例二的一种死锁处理方法的步骤流程图。本实施例的死锁处理方法包括以下步骤:步骤s202:为运行过程中的数据建立锁等待图。如前所述,涉及事务和加锁机制的数据库在运行过程中可生成锁等待图。具体生成锁等待图的过程可以由本领域技术人员根据实际需求采用任意适当方式生成,本发明实施例对此不作限制。例如,对于使用gdd的pg(postgre)数据库系统来说,gdd会执行select*frompg_locks来获取锁等待信息,之后以已建立的session作为图顶点,遍历扫描锁等待信息。期间若发现session1在等待着session2持有着的某个锁,则认为session1在等待session2,此时会在图中建立一个从session1到session2的边。在一个具体示例中,以postgresql数据库系统为例,postgresql数据库系统是基于开源数据库greenplum构建的一种分析型数据库系统。在postgresql数据库系统中,构建锁等待图可以周期性进行,每当一个session(与链接一一对应,可以认为是greenplum中标识链接的数值,单调递增)获取到指定对象(如:每个表,表中的每一行都算作是数据库中的一个对象,每个对象都可以用一个整型值唯一标识,即obj_id)上锁,或者当session在等待获取指定对象的某个锁时,都会在一个系统表如lock_table中插入一行记录,这个系统表lock_table中有如下字段:session_id:当前记录对应的session;granted:若取值为1,则表明session_id成功拿到了obj_id指定对象上的锁;若取值为0,则表明session_id正等待着获取obj_id指定对象上的锁。obj_id:当前记录对应的对象。通过扫描lock_table,若发现一行a:{session_id=session1,granted=0,obj_id=obj1},以及一行b:{session_id=session2,granted=1,obj_id=obj1},则表明session1在等待着session2释放持有在obj1上的锁。则,将session1,session2作为顶点插入到锁等待图中(若session1,session2已经在图中存在则忽略),之后再在图中建立一个session1指向session2的边。当lock_table扫描完成时,锁等待图也即建立完成了。一种构建完成的锁等待图示例如图2b所示,其示出了由5个session作为顶点的锁等待图,各个顶点以session的标识值标示,包括519、520、521、522和523。由图2b中可见,session519和session520互相等待对方的锁,session521和session522互相等待对方的锁。步骤s204:判断是否接收到死锁处理使能指令;若接收到,则执行步骤s206;若未接收到,则按照预设规则进行死锁处理。其中,死锁处理使能指令可以为任意适当形式的指令,如,电信号指令、指示符指令,等等,本发明实施例对此不作限制。该死锁处理使能指令可以由用户触发,由此,为用户提供了更为灵活的死锁处理选择。在未接收到死锁处理使能指令时,则可以按照预设规则进行死锁处理,其中,所述预设规则可以由本领域技术人员根据实际需求适当设置,如采用传统的、可能波及死锁无关session的gdd处理方式,等等。需要说明的是,本步骤为可选步骤。在实际应用中,在步骤s202之后,可以直接执行步骤s206。步骤s206:获取数据库运行过程中的锁等待图。可以采用任意适当方式获取通过步骤s202生成的锁等待图。步骤s208:对锁等待图进行强连通分量检测,获得锁等待图中存在的强连通分量。对锁等待图进行强连通分量检测的具体实现也可以由本领域技术人员根据实际需求采用任意适当的方式进行检测。在一种可行方式中,可以通过图强连通分量算法,如,kosaraju-sharir算法、tarjan算法等,获得锁等待图中的强连通分量。在进一步的可选方案中,还可以根据检测到的强连通分量对锁等待图进行切割,获得与每个强连通分量对应的子图。后续则可以直接针对子图进行操作。步骤s210:根据锁等待图中的强连通分量确定待进行的强连通解除操作的信息,根据强连通解除操作的信息解除强连通分量对应的死锁。在根据锁等待图中的强连通分量确定待进行的强连通解除操作的信息时,可以根据锁等待图中的强连通分量确定待去除的强连通分量中的节点的信息,根据所述节点的信息确定对锁等待图进行强连通解除操作的信息。因强连通分量由节点及其对应的边组成,因此,通过去除其中的节点即可快速实现强连通解除操作。锁等待图中的强连通分量至少有一个,因每个强连通分量就代表着一个死锁,因此,需要对每个强连通分量均进行强连通解除操作。基于此,在确定了待进行的强连通解除操作的信息之后,在一种可行方式中,可以先对锁等待图进行强连通解除操作。对锁等待图中的强连通分量进行强连通解除操作可以实现为:针对每个强连通分量,从构成当前强连通分量的节点中去除待去除的节点,以进行当前强连通分量的强连通解除操作。对于每个强连通分量,其通常会由两个或者两个以上的节点组成,对于两个节点的情况,去除其中的一个节点就可解除强连通;而对于两个以上节点的情况,在去除一个节点后可能能够解除强连通,但也可能还存在其它的强连通,此种情况下,需要再针对仍然存在的强连通进行解除,继续进行节点去除,直至当前强连通分量中不再存在强连通。由此,可确保锁等待图中强连通分量的有效解除。其中,在一种可行实现方式中,针对每个强连通分量,从构成当前强连通分量的节点中去除待去除的节点,以进行当前强连通分量的强连通解除操作可以包括:针对每个强连通分量,从构成当前强连通分量的节点中去除一个待去除的节点;判断去除了节点后的当前强连通分量中是否还存在子强连通分量;若不存在,则确定完成当前强连通分量的强连通解除操作;若存在,则对子强连通分量继续进行节点去除,直至当前强连通分量中不存在子强连通分量。其中,对子强连通分量继续进行节点去除在实现时,可以采用返回所述针对每个强连通分量,从构成当前强连通分量的节点中去除一个待去除的节点的操作继续执行,直至不再存在强连通分量。也即,一个节点一个节点进行去除。但不限于此,在实际应用中,对子强连通分量继续进行的节点去除操作也可以采用其它方式实现,例如,先确定需要去除的一个或多个节点,然后一起去除,等等。而通过逐个节点去除的方式,使得对强连通分量的解除更为准确和安全,且可避免多业务的突发变化,保证系统运行的稳定性。当锁等待图采用session为图顶点时,则锁等待图中的节点与数据库事务会话session对应,每个数据库事务会话具有一个会话标识值,以唯一标识一个会话session。此种情况下,所述从构成当前强连通分量的节点中去除一个待去除的节点可以包括:确定构成当前强连通分量的节点中,对应的数据库事务会话的会话标识值最大的节点;将会话标识值最大的节点从当前强连通分量中去除。会话标识值最大的节点表示最近建立的链接,选择会话值最大的节点去除,可以有效降低终止会话对用户使用数据库的影响,提升用户使用感受。但不限于此,去除其它会话标识值对应的节点也同样适用,可解除强连通即可。在确定的强连通解除操作的信息后,可以根据待去除的节点的信息,终止待去除的节点对应的数据库事务会话,以解除强连通分量对应的死锁。本实施例中,采用在根据强连通解除操作的信息对锁等待图进行强连通分量解除后,终止被去除的节点对应的数据库事务会话,解除强连通分量对应的死锁的方式。但不限于此,如实施例一中所述,上述对锁等待图的强连通解除操作也可以后于死锁解除操作执行,或者,与死锁解除操作并行执行。在另一种可行方式中,根据锁等待图中的强连通分量确定待进行的强连通解除操作的信息,根据强连通解除操作的信息解除强连通分量对应的死锁可以包括:对检测获得的至少一个强连通分量的信息和各强连通分量对应的节点的信息进行记录;从记录的各强连通分量对应的节点中,确定各强连通分量待去除的节点;去除锁等待图中的待去除节点并终止待去除的节点对应的数据库事务会话,以解除强连通分量对应的死锁。此种方式下,可一次性去除锁等待图中的待去除节点,并且,可以先确定待去除节点,进而可以对锁等待图和数据库事务会话同时进行操作,实现死锁的处理,以提高处理速度。仍以使用gdd的pg数据库系统为例,在运行图强连通分量算法找出锁等待图中所有强连通分量之后,可以把每个强连通分量作为一个子图。在子图级别反复尝试移除具有最大session值的顶点,之后进行reduce操作,直至子图中不再存在强连通分量。收集执行期间被移除的session值组成个集合,记为sessions,之后通过selectpg_cancel_backend(pid)frompg_stat_activitywheresession_idin(sessions)取消相关sessionsql的执行,使得这些session主动释放持有着的锁,从而打破死锁循环。通过运行图强连通分量算法找出锁等待图中所有强连通分量,在强连通分量级别运行打破死锁的操作,使得可以精确取消正处于死锁循环中的查询,避免影响其他无关查询。在一个具体示例中,仍以前述postgresql数据库系统为例,完整锁等待图中的一个强连通分量可以g=(n,e)来表示,其中,n表示一个强连通分量中的所有顶点,e表示强连通分量中所有的边。对某个强连通分量进行reduce操作可以实现为:(1),从g中移除具有最大session值的顶点,以及所有从该顶点出发的出边和所有到达该顶点的入边。(2),判断g是否仍包含强连通分量,若仍包含,则返回(1)继续执行;否则,结束reduce操作,执行(3)。(3),返回上述过程中所有被移除的顶点的session值,之后kill掉(即终止)这些session。以图2b所示锁等待图为例,一种强连通解除操作的示意如图2c所示,图2c中,对于519和520形成的强连通分量,移除其中session值最大的顶点即520及其对应的边;而对于521和522形成的强连通分量,移除其中session值最大的顶点即522及其对应的边。待移除的顶点及边如图2c中虚线所示。移除顶点520和522及其各自对应的边后,即可解除图2b所示的锁等待图中的强连通分量,一种强连通分量解除后的锁等待图如图2d所示。在传统方式中,打破死锁循环时,会在整个锁等待图级别反复尝试取消具有最大session值的顶点,使无关session中的sql执行被取消。例如,以图2b所示的锁等待图为例,采用传统方式对其进行死锁解除操作时,由于锁等待图中每一个顶点都有出边和入边,所以reduce操作将无法移除任何顶点,gdd只能通过依次取消523、522、520这三个session来解决死锁问题。而通过本发明实施例提供的方案,在基于图强连通分量算法来打破死锁循环的操作中,通过在强连通分量级别取消正执行的session,使得无关session,即不出现在任何死锁循环中的session的执行不受影响,在图2b所示的锁等待图示例中,只会取消522和520这两个session,而523对应的session的执行将不会受到任何影响。由此,通过本实施例,在数据库运行过程中,产生死锁的事务会对应到锁等待图中的强连通分量上,也即,锁等待图中的每个强连通分量对应于一个死锁。基于此,对强连通分量的强连通解除操作即意味着打破死锁。因强连通分量仅与产生死锁的事务有关,与该死锁无关的事务则不会被涉及。因此,可以有效保证gdd死锁处理过程中,只有与死锁有关的事务会被中断或取消,不会波及与死锁无关事务,从而使得与死锁无关事务对应的用户查询不会被无故打断,提升了用户体验。本实施例的死锁处理方法可以由任意适当的具有数据处理能力的电子设备执行,包括但不限于:服务器、pc机等。实施例三参照图3,示出了根据本发明实施例三的一种死锁处理装置的结构框图。本实施例的死锁处理装置包括:第一获取模块302,用于获取数据库运行过程中的锁等待图;第二获取模块304,用于对锁等待图进行强连通分量检测,获取锁等待图中存在的强连通分量;解除模块306,用于根据锁等待图中的强连通分量确定待进行的强连通解除操作的信息,根据强连通解除操作的信息解除强连通分量对应的死锁。本实施例的死锁处理装置用于实现前述多个方法实施例中相应的死锁处理方法,并具有相应的方法实施例的有益效果,在此不再赘述。此外,本实施例的死锁处理装置中的各个模块的功能实现均可参照前述方法实施例中的相应部分的描述,在此亦不再赘述。实施例四参照图4,示出了根据本发明实施例四的一种死锁处理装置的结构框图。本实施例的死锁处理装置包括:第一获取模块402,用于获取数据库运行过程中的锁等待图;第二获取模块404,用于对锁等待图进行强连通分量检测,获取锁等待图中存在的强连通分量;解除模块406,用于根据锁等待图中的强连通分量确定待进行的强连通解除操作的信息,根据强连通解除操作的信息解除强连通分量对应的死锁。可选地,解除模块406,用于根据锁等待图中的强连通分量确定待去除的强连通分量中的节点的信息,根据所述节点的信息确定对锁等待图进行强连通解除操作的信息,根据强连通解除操作的信息解除强连通分量对应的死锁。可选地,锁等待图中的强连通分量包括至少一个;解除模块406,还用于在根据锁等待图中的强连通分量确定待进行的强连通解除操作的信息之后,针对每个强连通分量,从构成当前强连通分量的节点中去除待去除的节点,以进行当前强连通分量的强连通解除操作。可选地,解除模块406,用于针对每个强连通分量,从构成当前强连通分量的节点中去除一个待去除的节点;判断去除了节点后的当前强连通分量中是否还存在子强连通分量;若不存在,则确定完成当前强连通分量的强连通解除操作;若存在,则对子强连通分量继续进行节点去除,直至当前强连通分量中不存在子强连通分量。可选地,锁等待图中的节点与数据库事务会话对应,数据库事务会话具有会话标识值;解除模块406,用于针对每个强连通分量,确定构成当前强连通分量的节点中,对应的数据库事务会话的会话标识值最大的节点;将会话标识值最大的节点从当前强连通分量中去除;判断去除了节点后的当前强连通分量中是否还存在子强连通分量;若不存在,则确定完成当前强连通分量的强连通解除操作;若存在,则对子强连通分量继续进行节点去除,直至当前强连通分量中不存在子强连通分量。可选地,解除模块406,用于根据锁等待图中的强连通分量确定待进行的强连通解除操作的信息,根据强连通解除操作的信息中的待去除的所述节点的信息,终止待去除的节点对应的数据库事务会话,以解除强连通分量对应的死锁。可选地,解除模块406,用于对检测获得的至少一个强连通分量的信息和各强连通分量对应的节点的信息进行记录;从记录的各强连通分量对应的节点中,确定各强连通分量待去除的节点;去除锁等待图中的待去除的节点,并终止待去除的节点对应的数据库事务会话,以解除强连通分量对应的死锁。可选地,所述死锁处理装置还包括:使能模块408,用于在第一获取模块402获取数据库运行过程中的锁等待图之前,判断是否接收到死锁处理使能指令;若接收到,则转第一获取模块402执行。本实施例的死锁处理装置用于实现前述多个方法实施例中相应的死锁处理方法,并具有相应的方法实施例的有益效果,在此不再赘述。此外,本实施例的死锁处理装置中的各个模块的功能实现均可参照前述方法实施例中的相应部分的描述,在此亦不再赘述。实施例五参照图5,示出了根据本发明实施例五的一种电子设备的结构示意图,本发明具体实施例并不对电子设备的具体实现做限定。如图5所示,该电子设备可以包括:处理器(processor)502、通信接口(communicationsinterface)504、存储器(memory)506、以及通信总线508。其中:处理器502、通信接口504、以及存储器506通过通信总线508完成相互间的通信。通信接口504,用于与其它电子设备或服务器进行通信。处理器502,用于执行程序510,具体可以执行上述死锁处理方法实施例中的相关步骤。具体地,程序510可以包括程序代码,该程序代码包括计算机操作指令。处理器502可能是中央处理器cpu,或者是特定集成电路asic(applicationspecificintegratedcircuit),或者是被配置成实施本发明实施例的一个或多个集成电路。智能设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个cpu;也可以是不同类型的处理器,如一个或多个cpu以及一个或多个asic。存储器506,用于存放程序510。存储器506可能包含高速ram存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。程序510具体可以用于使得处理器502执行以下操作:获取数据库运行过程中的锁等待图;对锁等待图进行强连通分量检测,获取锁等待图中存在的强连通分量;根据锁等待图中的强连通分量确定待进行的强连通解除操作的信息,根据强连通解除操作的信息解除强连通分量对应的死锁。在一种可选的实施方式中,程序510还用于使得处理器502在根据锁等待图中的强连通分量确定待进行的强连通解除操作的信息时:根据锁等待图中的强连通分量确定待去除的强连通分量中的节点的信息,根据所述节点的信息确定对锁等待图进行强连通解除操作的信息。在一种可选的实施方式中,锁等待图中的强连通分量包括至少一个;程序510还用于使得处理器502在根据锁等待图中的强连通分量确定待进行的强连通解除操作的信息之后,针对每个强连通分量,从构成当前强连通分量的节点中去除待去除的节点,以进行当前强连通分量的强连通解除操作。在一种可选的实施方式中,程序510还用于使得处理器502在针对每个强连通分量,从构成当前强连通分量的节点中去除待去除的节点,以进行当前强连通分量的强连通解除操作时:针对每个强连通分量,从构成当前强连通分量的节点中去除一个待去除的节点;判断去除了节点后的当前强连通分量中是否还存在子强连通分量;若不存在,则确定完成当前强连通分量的强连通解除操作;若存在,则对子强连通分量继续进行节点去除,直至当前强连通分量中不存在子强连通分量。在一种可选的实施方式中,锁等待图中的节点与数据库事务会话对应,数据库事务会话具有会话标识值;程序510还用于使得处理器502在从构成当前强连通分量的节点中去除一个待去除的节点时:确定构成当前强连通分量的节点中,对应的数据库事务会话的会话标识值最大的节点;将会话标识值最大的节点从当前强连通分量中去除。在一种可选的实施方式中,程序510还用于使得处理器502在根据强连通解除操作的信息解除所述强连通分量对应的死锁时:根据待去除的节点的信息,终止待去除的节点对应的数据库事务会话,以解除强连通分量对应的死锁。在一种可选的实施方式中,程序510还用于使得处理器502在根据锁等待图中的强连通分量确定待进行的强连通解除操作的信息,根据强连通解除操作的信息解除所述强连通分量对应的死锁时:对检测获得的至少一个强连通分量的信息和各强连通分量对应的节点的信息进行记录;从记录的各强连通分量对应的节点中,确定各强连通分量待去除的节点;去除锁等待图中的待去除的节点,并终止待去除的节点对应的数据库事务会话,以解除强连通分量对应的死锁。在一种可选的实施方式中,程序510还用于使得处理器502在获取数据库运行过程中的锁等待图之前,判断是否接收到死锁处理使能指令;若接收到,则执行所述获取数据库运行过程中的锁等待图的操作。程序510中各步骤的具体实现可以参见上述死锁处理方法实施例中的相应步骤和单元中对应的描述,在此不赘述。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的设备和模块的具体工作过程,可以参考前述方法实施例中的对应过程描述,在此不再赘述。通过本实施例的电子设备,在数据库运行过程中,产生死锁的事务会对应到锁等待图中的强连通分量上,也即,锁等待图中的每个强连通分量对应于一个死锁。基于此,对强连通分量的强连通解除操作即意味着打破死锁。因强连通分量仅与产生死锁的事务有关,与该死锁无关的事务则不会被涉及。因此,可以有效保证gdd死锁处理过程中,只有与死锁有关的事务会被中断或取消,不会波及与死锁无关事务,从而使得与死锁无关事务对应的用户查询不会被无故打断,提升了用户体验。需要指出,根据实施的需要,可将本发明实施例中描述的各个部件/步骤拆分为更多部件/步骤,也可将两个或多个部件/步骤或者部件/步骤的部分操作组合成新的部件/步骤,以实现本发明实施例的目的。上述根据本发明实施例的方法可在硬件、固件中实现,或者被实现为可存储在记录介质(诸如cdrom、ram、软盘、硬盘或磁光盘)中的软件或计算机代码,或者被实现通过网络下载的原始存储在远程记录介质或非暂时机器可读介质中并将被存储在本地记录介质中的计算机代码,从而在此描述的方法可被存储在使用通用计算机、专用处理器或者可编程或专用硬件(诸如asic或fpga)的记录介质上的这样的软件处理。可以理解,计算机、处理器、微处理器控制器或可编程硬件包括可存储或接收软件或计算机代码的存储组件(例如,ram、rom、闪存等),当所述软件或计算机代码被计算机、处理器或硬件访问且执行时,实现在此描述的死锁处理方法。此外,当通用计算机访问用于实现在此示出的死锁处理方法的代码时,代码的执行将通用计算机转换为用于执行在此示出的死锁处理方法的专用计算机。本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及方法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明实施例的范围。以上实施方式仅用于说明本发明实施例,而并非对本发明实施例的限制,有关
技术领域
:的普通技术人员,在不脱离本发明实施例的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明实施例的范畴,本发明实施例的专利保护范围应由权利要求限定。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1