CN105426234A - 数据库死锁检测方法及装置 - Google Patents
数据库死锁检测方法及装置 Download PDFInfo
- Publication number
- CN105426234A CN105426234A CN201510728187.1A CN201510728187A CN105426234A CN 105426234 A CN105426234 A CN 105426234A CN 201510728187 A CN201510728187 A CN 201510728187A CN 105426234 A CN105426234 A CN 105426234A
- Authority
- CN
- China
- Prior art keywords
- deadlock
- transaction
- information
- time
- origin
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/524—Deadlock detection or avoidance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/48—Indexing scheme relating to G06F9/48
- G06F2209/481—Exception handling
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开是关于一种数据库死锁检测方法及装置,属于互联网领域。该方法包括:确定指定时间段内对数据库进行操作的多个数据库事务的事务信息;在指定时间段内,每隔指定时长,查询第一死锁发生时间和至少两个第一操作命令,第一死锁为离当前时间最近一次发生的死锁,至少两个第一操作命令为产生第一死锁的至少两个数据库事务的操作命令;基于第一死锁发生时间和至少两个第一操作命令,判断第一死锁是否已进行死锁检测;如果第一死锁未进行死锁检测,则基于第一死锁发生时间和至少两个第一操作命令,从多个数据库事务的事务信息中,获取产生第一死锁的数据库事务的事务信息,以完成数据库的死锁检测。本公开提高了应用程序的健壮性或者鲁棒性。
Description
技术领域
本公开涉及计算机领域,尤其涉及一种数据库死锁检测方法及装置。
背景技术
在计算机程序中,为了保证数据一致性,当一个数据库事务在修改某一数据时,数据库管理系统将对该数据进行锁定,使其他的数据库事务不能修改该数据。而当两个数据库事务中任意一个数据库事务当前所需的数据为另一个数据库事务当前修改的数据时,该两个数据库事务就形成了相互等待的现象,造成数据库死锁。比如,数据库事务A需要数据库事务B当前修改的数据,同时数据库事务B也需要数据库事务A当前修改的数据,从而造成数据库死锁的发生。当发生数据库死锁时,通常会导致整个计算机程序的服务瘫痪。因此,对数据库死锁进行检测分析十分重要。
目前,在相关技术中,当出现数据库死锁的情况时,通常可以通过指定命令查看到最后一次发生死锁时的信息,比如,指定命令可以为SHOWENGINGINNODBSTATUS命令。
发明内容
为克服相关技术中存在的问题,本公开提供一种数据库死锁检测方法及装置。
根据本公开实施例的第一方面,提供一种数据库死锁检测方法,所述方法包括:
确定指定时间段内对数据库进行操作的多个数据库事务的事务信息;
在所述指定时间段内,每隔指定时长,查询第一死锁发生时间和至少两个第一操作命令,第一死锁为离当前时间最近一次发生的死锁,所述至少两个第一操作命令为产生所述第一死锁的至少两个数据库事务的操作命令;
基于所述第一死锁发生时间和所述至少两个第一操作命令,判断所述第一死锁是否已进行死锁检测;
如果所述第一死锁未进行死锁检测,则基于所述第一死锁发生时间和所述至少两个第一操作命令,从所述多个数据库事务的事务信息中,获取产生所述第一死锁的数据库事务的事务信息,以完成所述数据库的死锁检测。
结合第一方面,在上述第一方面的第一种可能的实现方式中,所述确定指定时间段内对数据库进行操作的多个数据库事务的事务信息,包括:
确定指定时间段内对数据库进行操作的多个数据库事务的操作命令,得到多个操作命令;
获取所述多个操作命令所属的线程标识,以及获取所述多个数据库事务对应的线程标识;
基于所述多个操作命令所属的线程标识和所述多个数据库事务对应的线程标识,将所述多个操作命令进行划分,得到多个操作命令集合,每个操作命令集合包括的操作命令属于同一数据库事务;
基于所述多个操作命令集合,确定所述多个数据库事务的事务信息。
集合第一方面,在上述第一方面的第二种可能的实现方式中,所述基于所述第一死锁发生时间和所述至少两个第一操作命令,判断所述第一死锁是否已进行死锁检测,包括:
基于所述第一死锁发生时间和所述至少两个第一操作命令,判断存储的死锁信息表中是否已存储所述第一死锁的死锁信息;
如果所述死锁信息表中未存储所述第一死锁的死锁信息,则确定所述第一死锁未进行死锁检测,否则,确定所述第一死锁已进行死锁检测。
结合第一方面或者第一方面的第二种可能的实现方式,在上述第一方面的第三种可能的实现方式中,所述基于所述第一死锁发生时间和所述至少两个第一操作命令,判断所述第一死锁是否已进行死锁检测之后,还包括:
如果所述第一死锁未进行死锁检测,则基于所述第一死锁发生时间和所述至少两个第一操作命令,确定所述第一死锁的死锁信息;
将所述第一死锁的死锁信息存储在死锁信息表中。
结合第一方面的第二种可能的实现方式,在上述第一方面的第四种可能的实现方式中,所述基于所述第一死锁发生时间和所述至少两个第一操作命令,判断存储的死锁信息表中是否已存储所述第一死锁的死锁信息,包括:
获取所述死锁信息表中存储的多个第二死锁的第二死锁发生时间和所述多个第二死锁分别对应的至少两个第二操作命令,所述多个第二死锁为所述指定时间段内且位于所述第一死锁之前发生的死锁,所述至少两个第二操作命令为产生第二死锁的至少两个数据库事务的操作命令;
对于所述多个第二死锁中的每个第二死锁,判断所述第二死锁的第二死锁发生时间是否与所述第一死锁发生时间相等,以及判断所述第二死锁对应的至少两个第二操作命令是否与所述至少两个第一操作命令相同;
如果所述第二死锁的第二死锁发生时间与所述第一死锁发生时间相等且所述第二死锁对应的至少两个第二操作命令与所述至少两个第一操作命令相同,则确定所述死锁信息表中已存储所述第一死锁的死锁信息,否则,确定所述死锁信息表中未存储所述第一死锁的死锁信息。
结合第一方面,在上述第一方面的第五种可能的实现方式中,所述基于所述第一死锁发生时间和所述至少两个第一操作命令,从所述多个数据库事务的事务信息中,获取产生所述第一死锁的数据库事务的事务信息,包括:
确定所述至少两个第一操作命令所属的线程标识;
从所述多个数据库事务的事务信息中,获取所述多个数据库事务对应的线程标识,以及从所述多个数据库事务的事务信息中,获取所述多个数据库事务的操作时间段;
基于所述第一死锁发生时间、所述至少两个第一操作命令所属的线程标识、所述多个数据库事务对应的线程标识和所述多个数据库事务的操作时间段,从所述多个数据库事务的事务信息中,获取产生所述第一死锁的数据库事务的事务信息。
结合第一方面,在上述第一方面的第六种可能的实现方式中,所述基于所述第一死锁发生时间和所述至少两个第一操作命令,从所述多个数据库事务的事务信息中,获取产生所述第一死锁的数据库事务的事务信息之后,还包括:
将所述指定时间段内发生的所有死锁的死锁信息和产生所有死锁的数据库事务的事务信息发送给指定终端。
结合第一方面,在上述第一方面的第七种可能的实现方式中,所述基于所述第一死锁发生时间和所述至少两个第一操作命令,从所述多个数据库事务的事务信息中,获取产生所述第一死锁的数据库事务的事务信息之后,还包括:
当接收到死锁信息查看指令时,基于所述死锁信息查看指令携带的查看时间段,获取所述查看时间段内发生死锁的死锁信息和产生所述死锁的数据库事务的事务信息;
显示获取的死锁信息和数据库事务的事务信息。
根据本公开实施例的第二方面,提供一种数据库死锁检测装置,所述装置包括:
第一确定模块,用于确定指定时间段内对数据库进行操作的多个数据库事务的事务信息;
查询模块,用于在所述指定时间段内,每隔指定时长,查询第一死锁发生时间和至少两个第一操作命令,第一死锁为离当前时间最近一次发生的死锁,所述至少两个第一操作命令为产生所述第一死锁的至少两个数据库事务的操作命令;
判断模块,用于基于所述第一死锁发生时间和所述至少两个第一操作命令,判断所述第一死锁是否已进行死锁检测;
第一获取模块,用于如果所述第一死锁未进行死锁检测,则基于所述第一死锁发生时间和所述至少两个第一操作命令,从所述多个数据库事务的事务信息中,获取产生所述第一死锁的数据库事务的事务信息,以完成所述数据库的死锁检测。
结合第二方面,在上述第二方面的第一种可能的实现方式中,所述确定模块包括:
第一确定单元,用于确定指定时间段内对数据库进行操作的多个数据库事务的操作命令,得到多个操作命令;
第一获取单元,用于获取所述多个操作命令所属的线程标识,以及获取所述多个数据库事务对应的线程标识;
划分单元,用于基于所述多个操作命令所属的线程标识和所述多个数据库事务对应的线程标识,将所述多个操作命令进行划分,得到多个操作命令集合,每个操作命令集合包括的操作命令属于同一数据库事务;
第二确定单元,用于基于所述多个操作命令集合,确定所述多个数据库事务的事务信息。
结合第二方面,在上述第二方面的第二种可能的实现方式中,所述判断模块包括:
判断单元,用于基于所述第一死锁发生时间和所述至少两个第一操作命令,判断存储的死锁信息表中是否已存储所述第一死锁的死锁信息;
第三确定单元,用于如果所述死锁信息表中未存储所述第一死锁的死锁信息,则确定所述第一死锁未进行死锁检测,否则,确定所述第一死锁已进行死锁检测。
结合第二方面或者第二方面的第二种可能的实现方式,在上述第二方面的第三种可能的实现方式中,所述装置还包括:
第二确定模块,用于如果所述第一死锁未进行死锁检测,则基于所述第一死锁发生时间和所述至少两个第一操作命令,确定所述第一死锁的死锁信息;
存储模块,用于将所述第一死锁的死锁信息存储在死锁信息表中。
结合第二方面的第二种可能的实现方式,在上述第二方面的第四种可能的实现方式中,所述判断单元包括:
获取子单元,用于获取所述死锁信息表中存储的多个第二死锁的第二死锁发生时间和所述多个第二死锁分别对应的至少两个第二操作命令,所述多个第二死锁为所述指定时间段内且位于所述第一死锁之前发生的死锁,所述至少两个第二操作命令为产生第二死锁的至少两个数据库事务的操作命令;
判断子单元,用于对于所述多个第二死锁中的每个第二死锁,判断所述第二死锁的第二死锁发生时间是否与所述第一死锁发生时间相等,以及判断所述第二死锁对应的至少两个第二操作命令是否与所述至少两个第一操作命令相同;
确定子单元,用于如果所述第二死锁的第二死锁发生时间与所述第一死锁发生时间相等且所述第二死锁对应的至少两个第二操作命令与所述至少两个第一操作命令相同,则确定所述死锁信息表中已存储所述第一死锁的死锁信息,否则,确定所述死锁信息表中未存储所述第一死锁的死锁信息。
结合第二方面,在上述第二方面的第五种可能的实现方式中,所述第一获取模块包括:
第四确定单元,用于确定所述至少两个第一操作命令所属的线程标识;
第二获取单元,用于从所述多个数据库事务的事务信息中,获取所述多个数据库事务对应的线程标识,以及从所述多个数据库事务的事务信息中,获取所述多个数据库事务的操作时间段;
第三获取单元,用于基于所述第一死锁发生时间、所述至少两个第一操作命令所属的线程标识、所述多个数据库事务对应的线程标识和所述多个数据库事务的操作时间段,从所述多个数据库事务的事务信息中,获取产生所述第一死锁的数据库事务的事务信息。
结合第二方面,在上述第二方面的第六种可能的实现方式中,所述装置还包括:
发送模块,用于将所述指定时间段内发生的所有死锁的死锁信息和产生所有死锁的数据库事务的事务信息发送给指定终端。
结合第二方面,在上述第二方面的第七种可能的实现方式中,所述装置还包括:
第二获取模块,用于当接收到死锁信息查看指令时,基于所述死锁信息查看指令携带的查看时间段,获取所述查看时间段内发生死锁的死锁信息和产生所述死锁的数据库事务的事务信息;
显示模块,用于显示获取的死锁信息和数据库事务的事务信息。
根据本公开实施例的第三方面,提供一种数据库死锁检测装置,所述装置包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为:
确定指定时间段内对数据库进行操作的多个数据库事务的事务信息;
在所述指定时间段内,每隔指定时长,查询第一死锁发生时间和至少两个第一操作命令,第一死锁为离当前时间最近一次发生的死锁,所述至少两个第一操作命令为产生所述第一死锁的至少两个数据库事务的操作命令;
基于所述第一死锁发生时间和所述至少两个第一操作命令,判断所述第一死锁是否已进行死锁检测;
如果所述第一死锁未进行死锁检测,则基于所述第一死锁发生时间和所述至少两个第一操作命令,从所述多个数据库事务的事务信息中,获取产生所述第一死锁的数据库事务的事务信息,以完成所述数据库的死锁检测。
本公开的实施例提供的技术方案可以包括以下有益效果:在本公开实施例中,通过实时记录数据库事务的事务信息,并在检测到发生第一死锁的死锁信息时,根据该第一死锁的死锁信息和产生该第一死锁的至少两个第一操作命令,查找到产生该第一死锁的数据库事务的事务信息,从而有效提升了发现应用程序问题和解决应用程序问题的效率,降低数据库死锁的出现频率,大大提高了整个应用程序的健壮性或者鲁棒性。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
图1是根据一示例性实施例示出的一种数据库死锁检测方法的流程图。
图2是根据一示例性实施例示出的另一种数据库死锁检测方法的流程图。
图3是根据一示例性实施例示出的第一种数据库死锁检测装置的框图。
图4是根据一示例性实施例示出的一种第一确定模块的框图。
图5是根据一示例性实施例示出的一种判断模块的框图。
图6是根据一示例性实施例示出的第二种数据库死锁检测装置的框图。
图7是根据一示例性实施例示出的一种判断单元的框图。
图8是根据一示例性实施例示出的一种第一获取模块的框图。
图9是根据一示例性实施例示出的第三种数据库死锁检测装置的框图。
图10是根据一示例性实施例示出的第四种数据库死锁检测装置的框图。
图11是根据一示例性实施例示出的第五种数据库死锁检测装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
在对本公开实施例进行详细地解释说明之前,先对本公开实施例涉及到的基本概念进行介绍。本公开实施例中涉及到的基本概念包括会话、进程、线程和数据库事务四者之间的关系、数据库事务、数据库锁和数据库死锁。其中,一个会话对应一个进程,一个进程中可以包含多个数据库事务,且一个进程包括的多个数据库事务可以串行地执行,一个数据库事务可以由一个线程完成也可以由多个线程完成。数据库事务是指作为单个逻辑工作单元执行的一系列操作,该一系列操作要么完全地执行,要么完全地不执行。数据库锁是指如果某个数据库事务需要“修改”一条数据,首先需要在该条数据上加锁,以保证在同一时间只有一个数据库事务能进行修改操作。数据库死锁是指当多个进程访问同一数据时,其中每个进程拥有的数据库锁都是其他进程所需的,由此造成每个进程都无法继续下去。
图1是根据一示例性实施例示出的一种数据库死锁检测方法的流程图,如图1所示,该方法用于网络设备中,包括以下步骤。
在步骤101中,确定指定时间段内对数据库进行操作的多个数据库事务的事务信息。
在步骤102中,在该指定时间段内,每隔指定时长,查询第一死锁发生时间和至少两个第一操作命令,第一死锁为离当前时间最近一次发生的死锁,该至少两个第一操作命令为产生该第一死锁的至少两个数据库事务的操作命令。
在步骤103中,基于该第一死锁发生时间和该至少两个第一操作命令,判断该第一死锁是否已进行死锁检测。
在步骤104中,如果该第一死锁未进行死锁检测,则基于该第一死锁发生时间和该至少两个第一操作命令,从该多个数据库事务的事务信息中,获取产生该第一死锁的数据库事务的事务信息,以完成该数据库的死锁检测。
在本公开实施例中,通过实时记录数据库事务的事务信息,并在检测到发生第一死锁的死锁信息时,根据该第一死锁的死锁信息和产生该第一死锁的至少两个第一操作命令,查找到产生该第一死锁的数据库事务的事务信息,从而有效提升了发现应用程序问题和解决应用程序问题的效率,降低数据库死锁的出现频率,大大提高了整个应用程序的健壮性或者鲁棒性。
在本公开的另一实施例中,确定指定时间段内对数据库进行操作的多个数据库事务的事务信息,包括:
确定指定时间段内对数据库进行操作的多个数据库事务的操作命令,得到多个操作命令;
获取该多个操作命令所属的线程标识,以及获取该多个数据库事务对应的线程标识;
基于该多个操作命令所属的线程标识和该多个数据库事务对应的线程标识,将该多个操作命令进行划分,得到多个操作命令集合,每个操作命令集合包括的操作命令属于同一数据库事务;
基于该多个操作命令集合,确定该多个数据库事务的事务信息。
在本公开的另一实施例中,基于该第一死锁发生时间和该至少两个第一操作命令,判断该第一死锁是否已进行死锁检测,包括:
基于该第一死锁发生时间和该至少两个第一操作命令,判断存储的死锁信息表中是否已存储该第一死锁的死锁信息;
如果该死锁信息表中未存储该第一死锁的死锁信息,则确定该第一死锁未进行死锁检测,否则,确定该第一死锁已进行死锁检测。
在本公开的另一实施例中,基于该第一死锁发生时间和该至少两个第一操作命令,判断该第一死锁是否已进行死锁检测之后,还包括:
如果该第一死锁未进行死锁检测,则基于该第一死锁发生时间和该至少两个第一操作命令,确定该第一死锁的死锁信息;
将该第一死锁的死锁信息存储在死锁信息表中。
在本公开的另一实施例中,基于该第一死锁发生时间和该至少两个第一操作命令,判断存储的死锁信息表中是否已存储该第一死锁的死锁信息,包括:
获取该死锁信息表中存储的多个第二死锁的第二死锁发生时间和该多个第二死锁分别对应的至少两个第二操作命令,该多个第二死锁为该指定时间段内且位于该第一死锁之前发生的死锁,该至少两个第二操作命令为产生第二死锁的至少两个数据库事务的操作命令;
对于该多个第二死锁中的每个第二死锁,判断该第二死锁的第二死锁发生时间是否与该第一死锁发生时间相等,以及判断该第二死锁对应的至少两个第二操作命令是否与该至少两个第一操作命令相同;
如果该第二死锁的第二死锁发生时间与该第一死锁发生时间相等且该第二死锁对应的至少两个第二操作命令与该至少两个第一操作命令相同,则确定该死锁信息表中已存储该第一死锁的死锁信息,否则,确定该死锁信息表中未存储该第一死锁的死锁信息。
在本公开的另一实施例中,基于该第一死锁发生时间和该至少两个第一操作命令,从该多个数据库事务的事务信息中,获取产生该第一死锁的数据库事务的事务信息,包括:
确定该至少两个第一操作命令所属的线程标识;
从该多个数据库事务的事务信息中,获取该多个数据库事务对应的线程标识,以及从该多个数据库事务的事务信息中,获取该多个数据库事务的操作时间段;
基于该第一死锁发生时间、该至少两个第一操作命令所属的线程标识、该多个数据库事务对应的线程标识和该多个数据库事务的操作时间段,从该多个数据库事务的事务信息中,获取产生该第一死锁的数据库事务的事务信息。
在本公开的另一实施例中,基于该第一死锁发生时间和该至少两个第一操作命令,从该多个数据库事务的事务信息中,获取产生该第一死锁的数据库事务的事务信息之后,还包括:
将该指定时间段内发生的所有死锁的死锁信息和产生所有死锁的数据库事务的事务信息发送给指定终端。
在本公开的另一实施例中,基于该第一死锁发生时间和该至少两个第一操作命令,从该多个数据库事务的事务信息中,获取产生该第一死锁的数据库事务的事务信息之后,还包括:
当接收到死锁信息查看指令时,基于该死锁信息查看指令携带的查看时间段,获取该查看时间段内发生死锁的死锁信息和产生该死锁的数据库事务的事务信息;
显示获取的死锁信息和数据库事务的事务信息。
上述所有可选技术方案,均可按照任意结合形成本公开的可选实施例,本公开实施例对此不再一一赘述。
图2是根据一示例性实施例示出的一种数据库死锁检测方法的流程图,如图2所示,该方法应用于网络设备中,其中,该网络设备可以为服务器,也可以为其他可运行数据库的设备,该方法包括以下步骤。
在步骤201中,确定指定时间段内对数据库进行操作的多个数据库事务的事务信息。
由于数据库会同时为多个进程提供服务,也即是,网络设备中存在多个进程同时并行地对数据库进行操作,且在该多个进程中数据库事务的操作命令以交叉混合的形式出现,因此,为了方便确定出现数据库死锁的数据库事务,网络设备需要确定在指定时间段内对数据库进行操作的多个数据库事务的事务信息,而网络设备确定指定时间段内对数据库进行操作的多个数据库事务的事务信息的操作可以为:网络设备确定指定时间段内对数据库进行操作的多个数据库事务的操作命令,得到多个操作命令;获取该多个操作命令所属的线程标识,以及获取该多个数据库事务对应的线程标识;基于该多个操作命令所属的线程标识和该多个数据库事务对应的线程标识,将该多个操作命令进行划分,得到多个操作命令集合,每个操作命令集合包括的操作命令属于同一数据库事务;基于该多个操作命令集合,确定该多个数据库事务的事务信息。
其中,网络设备确定指定时间段内对数据库进行操作的多个数据库事务的操作命令时,可以通过抓包的方式得到多个操作命令,当然还可以通过其他方式得到,比如,从数据库日志中获取得到,本公开实施例对此不做具体限定。
由于一个数据库事务可以是由一个线程完成也可以是由多个线程完成,而一个线程对应一个操作命令,因此,当获取到该多个操作命令所属的线程标识,以及获取到该多个数据库事务对应的线程标识时,该网络设备可以基于该多个操作命令所属的线程标识和该多个数据库事务对应的线程标识,从该多个操作命令中,选择属于同一数据库事务的操作命令,将选择的操作命令组成一个操作命令集合,从而划分得到多个操作命令集合,也即是,该网络设备可以通过线程标识可以将该多个操作命令进行划分,从而得到多个操作命令集合。
由于数据库事务的操作命令中携带该数据库事务的线程标识、数据库名、主键等基本信息,因此,该网络设备可以分别从该多个操作命令集合包括的操作命令中,获取到该多个数据库事务的事务信息,从而将获取到的多个数据库事务的事务信息进行存储。
需要说明的是,对该多个数据库事务的事务信息进行存储时,可以将该多个数据库事务的事务信息存储在事务信息表中,也可以以其他的形式将该多个数据库事务的事务信息进行存储,本公开实施例对此不做具体限定。
而将该多个数据库事务的事务信息存储在事务信息表中时,可以将空白事务信息表事先存储在网络设备中,且该空白事务信息表中可以包括该数据库事务的主键、线程号、数据库名等基本信息,如表1所示,在空白事务信息表的第三列可以包括数据库事务中的主键、线程号、数据库名等基本信息的名称,而该事务信息表中的第一列和第二列可以基于第三列的基本信息,从事务信息中获取具体的内容,且第一列可以存储数据库事务中的变量名,第二列可以存储数据库事务中的变量类型。
表1
id | bigint | 主键 |
client_id | varchar | 连接数据的服务器IP |
thread_id | int | 线程号 |
transaction_id | int | 事务号 |
database | varchar | 数据库名 |
table | varchar | 表名 |
SQL | varchar | 查询命令 |
time | Datetime | 查询执行命令 |
需要说明的是,在本公开实施例中,仅以上述表1所示的事务信息表中包括的内容为例进行说明,上述表1并不对本公开实施例构成限定。
另外,指定时间段可以是任意一个时间段,且该指定时间段可以事先设置,比如该指定时间段为1小时、2小时等,本公开实施例对此不做具体限定。
再者,线程标识用于唯一标识线程,且该线程标识可以是线程号、线程句柄等,本公开实施例对此不做具体限定。
在步骤202中,在该指定时间段内,每隔指定时长,查询第一死锁发生时间和至少两个第一操作命令,第一死锁为离当前时间最近一次发生的死锁,该至少两个第一操作命令为产生该第一死锁的至少两个数据库事务的操作命令。
由于数据库死锁是至少两个数据库事务之间发生资源相互等待才产生的,因此,在该指定时间段内每个指定时长查询第一死锁时,不止可以查询到第一死锁发生时间,还可以查询到产生该第一死锁的至少两个第一操作命令,而该至少两个第一操作命令分别对应一个数据库事务。
其中,在该指定时间段内,每个指定时长,对第一死锁进行查询时,可以通过指定命令进行查询,当然也可以通过其他方式进行查询,本公开实施例对此不做具体限定。当通过指定命令进行查询时,该指定命令可以事先设置,比如该指定命令为SHOWENGINGINNODBSTATUS命令,该指定命令可以查询到距离当前查询时间最近一次发生的数据库死锁,本公开实施例同样对此不做具体限定。
需要说明的是,指定时长可以事先设置,比如该指定时长可以为1分钟,2分钟,3分钟等,本公开实施例对此不做具体限定。而为了避免在进行数据库死锁检测时,发生漏检测的情况,通常将该指定时间设置为1分钟。
在步骤203中,基于第一死锁发生时间和该至少两个第一操作命令,判断第一死锁是否已进行死锁检测。
为了便于对死锁产生原因的分析,解决该数据库死锁的问题,网络设备可以将每次查询到的死锁信息进行存储,而本公开实施例以将死锁信息存储在死锁信息表中为例进行说明,因此,网络设备基于第一死锁发生时间和该至少两个第一操作命令,判断第一死锁是否已进行死锁检测时,该网络设备可以基于该第一死锁发生时间和该至少两个第一操作命令,判断存储的死锁信息表中是否已存储该第一死锁的死锁信息,如果该死锁信息表中未存储第一死锁的死锁信息,则确定第一死锁未进行死锁检测,否则,确定第一死锁已进行死锁检测。
由于网络设备每隔指定时长查询一次死锁,且相邻两次查询的死锁可能是相同的,也即是,相邻两次查询死锁的死锁信息可能相同,因此,当网络设备查询到第一死锁时,为了节省存储空间,网络设备可以判断存储的死锁信息表中是否已存储该第一死锁的死锁信息。而网络设备基于该第一死锁发生时间和该至少两个第一操作命令,判断存储的死锁信息表中是否已存储该第一死锁的死锁信息的操作可以为:网络设备获取该死锁信息表中存储的多个第二死锁的第二死锁发生时间和该多个第二死锁分别对应的至少两个第二操作命令,该多个第二死锁为该指定时间段内且位于该第一死锁之前发生的死锁,该至少两个第二操作命令为产生第二死锁的至少两个数据库事务的操作命令;对于该多个第二死锁中的每个第二死锁,判断该第二死锁的第二死锁发生时间是否与该第一死锁发生时间相等,以及判断该第二死锁对应的至少两个第二操作命令是否与该至少两个第一操作命令相同;如果该第二死锁的第二死锁发生时间与该第一死锁发生时间相等且该第二死锁对应的至少两个第二操作命令与该至少两个第一操作命令相同,则确定该死锁信息表中已存储该第一死锁的死锁信息,否则,确定该死锁信息表中未存储该第一死锁的死锁信息。
需要说明的是,该死锁信息可以存储在死锁信息表中,也可以以其他的形式存储在网络设备中,本公开实施例对此不做具体限定。
而将该死锁信息存储在死锁信息表中时,可以将空白死锁信息表事先存储在网络设备中,且该空白死锁信息表中可以包括死锁的主键、线程号、数据库名、死锁出现频率等基本信息,如表2所示,在该死锁信息表中的第三列可以包括死锁的主键、线程号、数据库名、死锁出现频率等基本信息,而该事务信息表中的第一列和第二列可以是基于第三列的基本信息,从死锁信息中获取具体的内容,且第一列可以存储变量名,第二列可以存储变量类型。
表2
id | bigint | 主键 |
client_id | varchar | 连接数据的服务器IP |
thread_id | int | 线程号 |
transaction_id | int | 事务号 |
elaspe_time | int | 事务运行时间 |
database | varchar | 数据库名 |
table | varchar | 表名 |
type | varchar | 锁类型 |
mode | varchar | 锁模式 |
SQL | varchar | 导致死锁的查询命令 |
time | Datetime | 死锁发生时间 |
count | int | 死锁出现频率 |
需要说明的是,在本公开实施例中,仅以上述表2所示的死锁信息表中包括的内容为例进行说明,上述表2并不对本公开实施例构成限定。
在步骤204中,如果该第一死锁未进行死锁检测,则确定该至少两个第一操作命令所属的线程标识。
由于第一死锁的死锁信息中包含该第一死锁的线程标识,基于该第一死锁的线程标识可以查询到产生该第一死锁的数据库事务的事务信息,为了确定产生该第一死锁的数据库事务的事务信息,该网络设备可以确定该至少两个第一操作命令所属的线程标识,且该至少两个第一操作命令所属的线程标识可以分别从该至少两个第一操作命令中获取到。
进一步地,如果该第一死锁未进行死锁检测,则该网络设备可以基于该第一死锁发生时间和该至少两个第一操作命令,确定该第一死锁的死锁信息;将该第一死锁的死锁信息存储在该死锁信息表中。如果该第一死锁已进行死锁检测,则网络设备可以将该死锁信息表中第一死锁的出现频率进行更新,比如,网络设备可以将死锁信息表中第一死锁的出现频率增加1、2、3等等,本公开实施例对此不做具体限定。
在步骤205中,从该多个数据库事务的事务信息中,获取该多个数据库事务对应的线程标识,以及从该多个数据库事务的事务信息中,获取该多个数据库事务的操作时间段。
由于数据库事务的事务信息中包括线程标识和操作时间段,因此,该网络设备可以直接从该多个数据库事务的事务信息中,获取该多个数据库事务对应的线程标识,以及从该多个数据库事务的事务信息中,获取该多个数据库事务的操作时间段。
需要说明的是,操作时间段是指某一数据库事务开始运行到结束运行之间的时间段。由于数据库事务的开始操作命令携带开始标识,结束操作命令携带结束标识,当网络设备运行该数据库事务时,该网络设备在接收到该数据库事务的开始标识时,将接收该开始标识的时间确定为该数据库事务开始运行的时间,当该网络设备接收到该数据库事务的结束标识时,结束该数据库事务的运行,并将接收到该结束标识的时间确定为该数据库结束运行的时间,从而将开始运行的时间与结束运行的时间之间的时间段确定为该数据库事务的操作时间段。
在步骤206中,基于该第一死锁发生时间、该至少两个第一操作命令所属的线程标识、该多个数据库事务对应的线程标识和该多个数据库事务的操作时间段,从该多个数据库事务的事务信息中,获取产生该第一死锁的数据库事务的事务信息。
由于在该多个数据库事务对应的线程标识中可以查询到与该至少两个第一操作命令所属的线程标识相同的线程标识,因此,可以在该多个数据库事务对应的线程标识中确定该至少两个第一操作命令所属的线程标识,从而确定该至少两个第一操作命令所属的线程标识对应的数据库事务,并确定该第一死锁发生的时间是否在确定的数据库事务的操作时间段内,当该第一死锁发生的时间在确定的数据库事务的操作时间段内时,确定该数据库事务为产生该第一死锁的数据库事务,从而获取该数据库事务的事务信息。
其中,当网络设备确定第一死锁未进行死锁检测,且确定第一死锁的死锁信息和产生该第一死锁的数据库事务的事务信息之后,该网络设备可以将该第一死锁的死锁信息和产生该第一死锁的数据库事务的事务信息进行存储。当该网络设备将该第一死锁的死锁信息和产生该第一死锁的数据库事务的事务信息进行存储时,可以将该第一死锁的死锁信息和产生该第一死锁的数据库事务的事务信息存储在事务信息表中,也可以存储在一个空白的信息表中,当然还可以以其他形式进行存储,本公开实施例对此不做具体限定。
需要说明的是,在本公开实施例中,第一死锁是至少两个数据库事务产生的,因此,网络设备从该多个数据库事务的事务信息中,获取产生该第一死锁的数据库事务的事务信息时,会获取该产生第一死锁的至少两个数据库事务的事务信息,也即是,在本公开实施例中,每个死锁会对应的死锁信息是产生该死锁的至少两个数据库事务对应的,且该死锁对应的数据库事务的事务信息也是产生该死锁的至少两个数据库事务对应的。
进一步地,该网络设备可以将该指定时间段内发生的所有死锁的死锁信息和产生所有死锁的数据库事务的事务信息发送给指定终端。
其中,该网络设备可以通过邮件、短信、即时消息等方式将该指定时间段内发生的所有死锁的死锁信息和产生所有死锁的数据库事务发送个指定终端,本公开实施例对此不做具体限定。
需要说明的是,该指定终端是指管理数据库的管理员或者开发人员所使用的终端,且该指定终端可以事先设置,比如,该指定终端为手机、笔记本、掌上电脑,手机应用等,本公开实施例对此不做具体限定。
另外,在本公开实施例中,该网络设备还可以确定第一死锁未进行死锁检测,且确定第一死锁的死锁信息和产生该第一死锁的数据库事务的事务信息之后,将第一死锁的死锁信息和产生该第一死锁的数据库事务的事务信息直接发送给指定终端,也即是,该网络设备可以每查询到一个新产生的死锁时,将该新产生死锁的死锁信息和产生该第一死锁的数据库事务的事务信息直接发送给指定终端,而无需在网络设备中存储每个死锁的死锁信息和产生每个死锁的数据库事务的事务信息,节省了网络设备的存储空间。
进一步地,当网络设备接收到死锁信息查看指令时,该网络设备可以基于该死锁信息查看指令携带的查看时间段,获取该查看时间段内发生死锁的死锁信息和产生该死锁的数据库事务的事务信息;显示获取的死锁信息和数据库事务的事务信息。
需要说明的是,死锁信息查看指令用于查看死锁的死锁信息和产生该死锁的数据库事务的事务信息,该死锁信息查看指令可以事先设置,且该死锁信息查看指令可以由管理员或者开发人员通过指定操作触发,该指定操作可以为点击操作、滑动操作、语音操作等,本公开实施例对此不做具体限定。
另外,为了方便管理员或者开发人员查看死锁信息和产生该死锁的数据库事务的事务信息,对该死锁进行分析并进行解决,可以将该死锁信息和产生该死锁的数据库事务的事务信息的通过指定显示方式进行显示,而该指定显示方式可以事先设置,比如,该指定显示方式可以为网页显示、文档显示等,本公开实施例对此不做具体限定。
需要说明的是,网络设备将该指定时间段内发生的所有死锁的死锁信息和产生所有死锁的数据库事务的事务信息发送给指定终端,或者接收到死锁信息查看指令后显示查看时间段内的死锁信息和数据库事务的事务信息时,该网络设备可以按照每个死锁在该指定时间段内或者查看时间段内的死锁出现频率,对指定时间段内或者查看时间段内发生的死锁进行排序,从而使管理员或者开发人员优先解决死锁出现频率高的死锁问题。
在本公开实施例中,通过实时记录数据库事务的事务信息,并在检测到发生死锁的死锁信息时,查找到产生该死锁的数据库事务的事务信息,并将该死锁信息以及该数据库事务的事务信息通过指定方式发送指定终端,使管理员或者开发人员可以查看该死锁信息及该数据库事务的事务信息,从而分析发生该数据库死锁的原因,并进行解决,从而有效提升了发现应用程序问题和解决应用程序问题的效率,降低数据库死锁的出现频率,大大提高了整个应用程序的健壮性或者鲁棒性。
图3是根据一示例性实施例示出的一种数据库死锁检测装置框图。参照图3,该装置包括第一确定模块301、查询模块302、判断模块303和第一获取模块304。
第一确定模块301,用于确定指定时间段内对数据库进行操作的多个数据库事务的事务信息;
查询模块302,用于在该指定时间段内,每隔指定时长,查询第一死锁发生时间和至少两个第一操作命令,第一死锁为离当前时间最近一次发生的死锁,该至少两个第一操作命令为产生该第一死锁的至少两个数据库事务的操作命令;
判断模块303,用于基于该第一死锁发生时间和该至少两个第一操作命令,判断该第一死锁是否已进行死锁检测;
第一获取模块304,用于如果该第一死锁未进行死锁检测,则基于该第一死锁发生时间和该至少两个第一操作命令,从该多个数据库事务的事务信息中,获取产生该第一死锁的数据库事务的事务信息,以完成该数据库的死锁检测。
在本公开的另一实施例中,参见图4,该第一确定模块301包括:
第一确定单元3011,用于确定指定时间段内对数据库进行操作的多个数据库事务的操作命令,得到多个操作命令;
第一获取单元3012,用于获取该多个操作命令所属的线程标识,以及获取该多个数据库事务对应的线程标识;
划分单元3013,用于基于该多个操作命令所属的线程标识和该多个数据库事务对应的线程标识,将该多个操作命令进行划分,得到多个操作命令集合,每个操作命令集合包括的操作命令属于同一数据库事务;
第二确定单元3014,用于基于该多个操作命令集合,确定该多个数据库事务的事务信息。
在本公开的另一实施例中,参见图5,该判断模块303包括:
判断单元3031,用于基于该第一死锁发生时间和该至少两个第一操作命令,判断存储的死锁信息表中是否已存储该第一死锁的死锁信息;
第三确定单元3032,用于如果该死锁信息表中未存储该第一死锁的死锁信息,则确定该第一死锁未进行死锁检测,否则,确定该第一死锁已进行死锁检测。
在本公开的另一实施例中,参见图6,该装置还包括:
第二确定模块305,用于如果该第一死锁未进行死锁检测,则基于该第一死锁发生时间和该至少两个第一操作命令,确定该第一死锁的死锁信息;
存储模块306,用于将该第一死锁的死锁信息存储在死锁信息表中。
在本公开的另一实施例中,参见图7,该判断单元3031包括:
获取子单元30311,用于获取该死锁信息表中存储的多个第二死锁的第二死锁发生时间和该多个第二死锁分别对应的至少两个第二操作命令,该多个第二死锁为该指定时间段内且位于该第一死锁之前发生的死锁,该至少两个第二操作命令为产生第二死锁的至少两个数据库事务的操作命令;
判断子单元30312,用于对于该多个第二死锁中的每个第二死锁,判断该第二死锁的第二死锁发生时间是否与该第一死锁发生时间相等,以及判断该第二死锁对应的至少两个第二操作命令是否与该至少两个第一操作命令相同;
确定子单元30313,用于如果该第二死锁的第二死锁发生时间与该第一死锁发生时间相等且该第二死锁对应的至少两个第二操作命令与该至少两个第一操作命令相同,则确定该死锁信息表中已存储该第一死锁的死锁信息,否则,确定该死锁信息表中未存储该第一死锁的死锁信息。
在本公开的另一实施例中,参见图8,该第一获取模块304包括:
第四确定单元3041,用于确定该至少两个第一操作命令所属的线程标识;
第二获取单元3042,用于从该多个数据库事务的事务信息中,获取该多个数据库事务对应的线程标识,以及从该多个数据库事务的事务信息中,获取该多个数据库事务的操作时间段;
第三获取单元3043,用于基于该第一死锁发生时间、该至少两个第一操作命令所属的线程标识、该多个数据库事务对应的线程标识和该多个数据库事务的操作时间段,从该多个数据库事务的事务信息中,获取产生该第一死锁的数据库事务的事务信息。
在本公开的另一实施例中,参见图9,该装置还包括:
发送模块307,用于将该指定时间段内发生的所有死锁的死锁信息和产生所有死锁的数据库事务的事务信息发送给指定终端。
在本公开的另一实施例中,参见图10,该装置还包括:
第二获取模块308,用于当接收到死锁信息查看指令时,基于该死锁信息查看指令携带的查看时间段,获取该查看时间段内发生死锁的死锁信息和产生该死锁的数据库事务的事务信息;
显示模块309,用于显示获取的死锁信息和数据库事务的事务信息。
在本公开实施例中,通过实时记录数据库事务的事务信息,并在检测到发生第一死锁的死锁信息时,根据该第一死锁的死锁信息和产生该第一死锁的至少两个第一操作命令,查找到产生该第一死锁的数据库事务的事务信息,从而有效提升了发现应用程序问题和解决应用程序问题的效率,降低数据库死锁的出现频率,大大提高了整个应用程序的健壮性和鲁棒性。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
图11是根据一示例性实施例示出的一种用于数据库死锁检测的装置1100的框图。例如,装置1100可以被提供为一服务器。参照图11,装置1100包括处理组件1122,其进一步包括一个或多个处理器,以及由存储器1132所代表的存储器资源,用于存储可由处理部件1122的执行的指令,例如应用程序。存储器1132中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。
装置1100还可以包括一个电源组件1126被配置为执行装置1100的电源管理,一个有线或无线网络接口1150被配置为将装置1100连接到网络,和一个输入输出(I/O)接口1158。装置1100可以操作基于存储在存储器1132的操作系统,例如WindowsServerTM,MacOSXTM,UnixTM,LinuxTM,FreeBSDTM或类似。
此外,处理组件1122被配置为执行指令,以执行上述方法,该方法包括:
确定指定时间段内对数据库进行操作的多个数据库事务的事务信息。
在该指定时间段内,每隔指定时长,查询第一死锁发生时间和至少两个第一操作命令,第一死锁为离当前时间最近一次发生的死锁,该至少两个第一操作命令为产生该第一死锁的至少两个数据库事务的操作命令。
基于该第一死锁发生时间和该至少两个第一操作命令,判断该第一死锁是否已进行死锁检测。
如果该第一死锁未进行死锁检测,则基于该第一死锁发生时间和该至少两个第一操作命令,从该多个数据库事务的事务信息中,获取产生该第一死锁的数据库事务的事务信息,以完成该数据库的死锁检测。
在本公开的另一实施例中,确定指定时间段内对数据库进行操作的多个数据库事务的事务信息,包括:
确定指定时间段内对数据库进行操作的多个数据库事务的操作命令,得到多个操作命令;
获取该多个操作命令所属的线程标识,以及获取该多个数据库事务对应的线程标识;
基于该多个操作命令所属的线程标识和该多个数据库事务对应的线程标识,将该多个操作命令进行划分,得到多个操作命令集合,每个操作命令集合包括的操作命令属于同一数据库事务;
基于该多个操作命令集合,确定该多个数据库事务的事务信息。
在本公开的另一实施例中,基于该第一死锁发生时间和该至少两个第一操作命令,判断该第一死锁是否已进行死锁检测,包括:
基于该第一死锁发生时间和该至少两个第一操作命令,判断存储的死锁信息表中是否已存储该第一死锁的死锁信息;
如果该死锁信息表中未存储该第一死锁的死锁信息,则确定该第一死锁未进行死锁检测,否则,确定该第一死锁已进行死锁检测。
在本公开的另一实施例中,基于该第一死锁发生时间和该至少两个第一操作命令,判断该第一死锁是否已进行死锁检测之后,还包括:
如果该第一死锁未进行死锁检测,则基于该第一死锁发生时间和该至少两个第一操作命令,确定该第一死锁的死锁信息;
将该第一死锁的死锁信息存储在死锁信息表中。
在本公开的另一实施例中,基于该第一死锁发生时间和该至少两个第一操作命令,判断存储的死锁信息表中是否已存储该第一死锁的死锁信息,包括:
获取该死锁信息表中存储的多个第二死锁的第二死锁发生时间和该多个第二死锁分别对应的至少两个第二操作命令,该多个第二死锁为该指定时间段内且位于该第一死锁之前发生的死锁,该至少两个第二操作命令为产生第二死锁的至少两个数据库事务的操作命令;
对于该多个第二死锁中的每个第二死锁,判断该第二死锁的第二死锁发生时间是否与该第一死锁发生时间相等,以及判断该第二死锁对应的至少两个第二操作命令是否与该至少两个第一操作命令相同;
如果该第二死锁的第二死锁发生时间与该第一死锁发生时间相等且该第二死锁对应的至少两个第二操作命令与该至少两个第一操作命令相同,则确定该死锁信息表中已存储该第一死锁的死锁信息,否则,确定该死锁信息表中未存储该第一死锁的死锁信息。
在本公开的另一实施例中,基于该第一死锁发生时间和该至少两个第一操作命令,从该多个数据库事务的事务信息中,获取产生该第一死锁的数据库事务的事务信息,包括:
确定该至少两个第一操作命令所属的线程标识;
从该多个数据库事务的事务信息中,获取该多个数据库事务对应的线程标识,以及从该多个数据库事务的事务信息中,获取该多个数据库事务的操作时间段;
基于该第一死锁发生时间、该至少两个第一操作命令所属的线程标识、该多个数据库事务对应的线程标识和该多个数据库事务的操作时间段,从该多个数据库事务的事务信息中,获取产生该第一死锁的数据库事务的事务信息。
在本公开的另一实施例中,基于该第一死锁发生时间和该至少两个第一操作命令,从该多个数据库事务的事务信息中,获取产生该第一死锁的数据库事务的事务信息之后,还包括:
将该指定时间段内发生的所有死锁的死锁信息和产生所有死锁的数据库事务的事务信息发送给指定终端。
在本公开的另一实施例中,基于该第一死锁发生时间和该至少两个第一操作命令,从该多个数据库事务的事务信息中,获取产生该第一死锁的数据库事务的事务信息之后,还包括:
当接收到死锁信息查看指令时,基于该死锁信息查看指令携带的查看时间段,获取该查看时间段内发生死锁的死锁信息和产生该死锁的数据库事务的事务信息;
显示获取的死锁信息和数据库事务的事务信息。
在本公开实施例中,通过实时记录数据库事务的事务信息,并在检测到发生第一死锁的死锁信息时,根据该第一死锁的死锁信息和产生该第一死锁的至少两个第一操作命令,查找到产生该第一死锁的数据库事务的事务信息,从而有效提升了发现应用程序问题和解决应用程序问题的效率,降低数据库死锁的出现频率,大大提高了整个应用程序的健壮性和鲁棒性。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。
Claims (17)
1.一种数据库死锁检测方法,其特征在于,所述方法包括:
确定指定时间段内对数据库进行操作的多个数据库事务的事务信息;
在所述指定时间段内,每隔指定时长,查询第一死锁发生时间和至少两个第一操作命令,第一死锁为离当前时间最近一次发生的死锁,所述至少两个第一操作命令为产生所述第一死锁的至少两个数据库事务的操作命令;
基于所述第一死锁发生时间和所述至少两个第一操作命令,判断所述第一死锁是否已进行死锁检测;
如果所述第一死锁未进行死锁检测,则基于所述第一死锁发生时间和所述至少两个第一操作命令,从所述多个数据库事务的事务信息中,获取产生所述第一死锁的数据库事务的事务信息,以完成所述数据库的死锁检测。
2.如权利要求1所述的方法,其特征在于,所述确定指定时间段内对数据库进行操作的多个数据库事务的事务信息,包括:
确定指定时间段内对数据库进行操作的多个数据库事务的操作命令,得到多个操作命令;
获取所述多个操作命令所属的线程标识,以及获取所述多个数据库事务对应的线程标识;
基于所述多个操作命令所属的线程标识和所述多个数据库事务对应的线程标识,将所述多个操作命令进行划分,得到多个操作命令集合,每个操作命令集合包括的操作命令属于同一数据库事务;
基于所述多个操作命令集合,确定所述多个数据库事务的事务信息。
3.如权利要求1所述的方法,其特征在于,所述基于所述第一死锁发生时间和所述至少两个第一操作命令,判断所述第一死锁是否已进行死锁检测,包括:
基于所述第一死锁发生时间和所述至少两个第一操作命令,判断存储的死锁信息表中是否已存储所述第一死锁的死锁信息;
如果所述死锁信息表中未存储所述第一死锁的死锁信息,则确定所述第一死锁未进行死锁检测,否则,确定所述第一死锁已进行死锁检测。
4.如权利要求1或3所述的方法,其特征在于,所述基于所述第一死锁发生时间和所述至少两个第一操作命令,判断所述第一死锁是否已进行死锁检测之后,还包括:
如果所述第一死锁未进行死锁检测,则基于所述第一死锁发生时间和所述至少两个第一操作命令,确定所述第一死锁的死锁信息;
将所述第一死锁的死锁信息存储在死锁信息表中。
5.如权利要求3所述的方法,其特征在于,所述基于所述第一死锁发生时间和所述至少两个第一操作命令,判断存储的死锁信息表中是否已存储所述第一死锁的死锁信息,包括:
获取所述死锁信息表中存储的多个第二死锁的第二死锁发生时间和所述多个第二死锁分别对应的至少两个第二操作命令,所述多个第二死锁为所述指定时间段内且位于所述第一死锁之前发生的死锁,所述至少两个第二操作命令为产生第二死锁的至少两个数据库事务的操作命令;
对于所述多个第二死锁中的每个第二死锁,判断所述第二死锁的第二死锁发生时间是否与所述第一死锁发生时间相等,以及判断所述第二死锁对应的至少两个第二操作命令是否与所述至少两个第一操作命令相同;
如果所述第二死锁的第二死锁发生时间与所述第一死锁发生时间相等且所述第二死锁对应的至少两个第二操作命令与所述至少两个第一操作命令相同,则确定所述死锁信息表中已存储所述第一死锁的死锁信息,否则,确定所述死锁信息表中未存储所述第一死锁的死锁信息。
6.如权利要求1所述的方法,其特征在于,所述基于所述第一死锁发生时间和所述至少两个第一操作命令,从所述多个数据库事务的事务信息中,获取产生所述第一死锁的数据库事务的事务信息,包括:
确定所述至少两个第一操作命令所属的线程标识;
从所述多个数据库事务的事务信息中,获取所述多个数据库事务对应的线程标识,以及从所述多个数据库事务的事务信息中,获取所述多个数据库事务的操作时间段;
基于所述第一死锁发生时间、所述至少两个第一操作命令所属的线程标识、所述多个数据库事务对应的线程标识和所述多个数据库事务的操作时间段,从所述多个数据库事务的事务信息中,获取产生所述第一死锁的数据库事务的事务信息。
7.如权利要求1所述的方法,其特征在于,所述基于所述第一死锁发生时间和所述至少两个第一操作命令,从所述多个数据库事务的事务信息中,获取产生所述第一死锁的数据库事务的事务信息之后,还包括:
将所述指定时间段内发生的所有死锁的死锁信息和产生所有死锁的数据库事务的事务信息发送给指定终端。
8.如权利要求1所述的方法,其特征在于,所述基于所述第一死锁发生时间和所述至少两个第一操作命令,从所述多个数据库事务的事务信息中,获取产生所述第一死锁的数据库事务的事务信息之后,还包括:
当接收到死锁信息查看指令时,基于所述死锁信息查看指令携带的查看时间段,获取所述查看时间段内发生死锁的死锁信息和产生所述死锁的数据库事务的事务信息;
显示获取的死锁信息和数据库事务的事务信息。
9.一种数据库死锁检测装置,其特征在于,所述装置包括:
第一确定模块,用于确定指定时间段内对数据库进行操作的多个数据库事务的事务信息;
查询模块,用于在所述指定时间段内,每隔指定时长,查询第一死锁发生时间和至少两个第一操作命令,第一死锁为离当前时间最近一次发生的死锁,所述至少两个第一操作命令为产生所述第一死锁的至少两个数据库事务的操作命令;
判断模块,用于基于所述第一死锁发生时间和所述至少两个第一操作命令,判断所述第一死锁是否已进行死锁检测;
第一获取模块,用于如果所述第一死锁未进行死锁检测,则基于所述第一死锁发生时间和所述至少两个第一操作命令,从所述多个数据库事务的事务信息中,获取产生所述第一死锁的数据库事务的事务信息,以完成所述数据库的死锁检测。
10.如权利要求9所述的装置,其特征在于,所述第一确定模块包括:
第一确定单元,用于确定指定时间段内对数据库进行操作的多个数据库事务的操作命令,得到多个操作命令;
第一获取单元,用于获取所述多个操作命令所属的线程标识,以及获取所述多个数据库事务对应的线程标识;
划分单元,用于基于所述多个操作命令所属的线程标识和所述多个数据库事务对应的线程标识,将所述多个操作命令进行划分,得到多个操作命令集合,每个操作命令集合包括的操作命令属于同一数据库事务;
第二确定单元,用于基于所述多个操作命令集合,确定所述多个数据库事务的事务信息。
11.如权利要求9所述的装置,其特征在于,所述判断模块包括:
判断单元,用于基于所述第一死锁发生时间和所述至少两个第一操作命令,判断存储的死锁信息表中是否已存储所述第一死锁的死锁信息;
第三确定单元,用于如果所述死锁信息表中未存储所述第一死锁的死锁信息,则确定所述第一死锁未进行死锁检测,否则,确定所述第一死锁已进行死锁检测。
12.如权利要求9或11所述的装置,其特征在于,所述装置还包括:
第二确定模块,用于如果所述第一死锁未进行死锁检测,则基于所述第一死锁发生时间和所述至少两个第一操作命令,确定所述第一死锁的死锁信息;
存储模块,用于将所述第一死锁的死锁信息存储在死锁信息表中。
13.如权利要求11所述的装置,其特征在于,所述判断单元包括:
获取子单元,用于获取所述死锁信息表中存储的多个第二死锁的第二死锁发生时间和所述多个第二死锁分别对应的至少两个第二操作命令,所述多个第二死锁为所述指定时间段内且位于所述第一死锁之前发生的死锁,所述至少两个第二操作命令为产生第二死锁的至少两个数据库事务的操作命令;
判断子单元,用于对于所述多个第二死锁中的每个第二死锁,判断所述第二死锁的第二死锁发生时间是否与所述第一死锁发生时间相等,以及判断所述第二死锁对应的至少两个第二操作命令是否与所述至少两个第一操作命令相同;
确定子单元,用于如果所述第二死锁的第二死锁发生时间与所述第一死锁发生时间相等且所述第二死锁对应的至少两个第二操作命令与所述至少两个第一操作命令相同,则确定所述死锁信息表中已存储所述第一死锁的死锁信息,否则,确定所述死锁信息表中未存储所述第一死锁的死锁信息。
14.如权利要求9所述的装置,其特征在于,所述第一获取模块包括:
第四确定单元,用于确定所述至少两个第一操作命令所属的线程标识;
第二获取单元,用于从所述多个数据库事务的事务信息中,获取所述多个数据库事务对应的线程标识,以及从所述多个数据库事务的事务信息中,获取所述多个数据库事务的操作时间段;
第三获取单元,用于基于所述第一死锁发生时间、所述至少两个第一操作命令所属的线程标识、所述多个数据库事务对应的线程标识和所述多个数据库事务的操作时间段,从所述多个数据库事务的事务信息中,获取产生所述第一死锁的数据库事务的事务信息。
15.如权利要求9所述的装置,其特征在于,所述装置还包括:
发送模块,用于将所述指定时间段内发生的所有死锁的死锁信息和产生所有死锁的数据库事务的事务信息发送给指定终端。
16.如权利要求9所述的装置,其特征在于,所述装置还包括:
第二获取模块,用于当接收到死锁信息查看指令时,基于所述死锁信息查看指令携带的查看时间段,获取所述查看时间段内发生死锁的死锁信息和产生所述死锁的数据库事务的事务信息;
显示模块,用于显示获取的死锁信息和数据库事务的事务信息。
17.一种数据库死锁检测装置,其特征在于,所述装置包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为:
确定指定时间段内对数据库进行操作的多个数据库事务的事务信息;
在所述指定时间段内,每隔指定时长,查询第一死锁发生时间和至少两个第一操作命令,第一死锁为离当前时间最近一次发生的死锁,所述至少两个第一操作命令为产生所述第一死锁的至少两个数据库事务的操作命令;
基于所述第一死锁发生时间和所述至少两个第一操作命令,判断所述第一死锁是否已进行死锁检测;
如果所述第一死锁未进行死锁检测,则基于所述第一死锁发生时间和所述至少两个第一操作命令,从所述多个数据库事务的事务信息中,获取产生所述第一死锁的数据库事务的事务信息,以完成所述数据库的死锁检测。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510728187.1A CN105426234B (zh) | 2015-10-30 | 2015-10-30 | 数据库死锁检测方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510728187.1A CN105426234B (zh) | 2015-10-30 | 2015-10-30 | 数据库死锁检测方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105426234A true CN105426234A (zh) | 2016-03-23 |
CN105426234B CN105426234B (zh) | 2019-02-19 |
Family
ID=55504460
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510728187.1A Active CN105426234B (zh) | 2015-10-30 | 2015-10-30 | 数据库死锁检测方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105426234B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106874391A (zh) * | 2017-01-12 | 2017-06-20 | 无线生活(杭州)信息科技有限公司 | 一种死锁处理方法及装置 |
CN109976881A (zh) * | 2017-12-28 | 2019-07-05 | 腾讯科技(深圳)有限公司 | 事务识别方法和装置、存储介质以及电子装置 |
CN110580232A (zh) * | 2018-06-08 | 2019-12-17 | 杭州宏杉科技股份有限公司 | 一种锁管理的方法及装置 |
CN111221869A (zh) * | 2018-11-27 | 2020-06-02 | 北京京东振世信息技术有限公司 | 一种追踪数据库事务时间和分析数据库锁的方法和装置 |
CN111858075A (zh) * | 2020-06-30 | 2020-10-30 | 广东浪潮大数据研究有限公司 | 一种死锁检测的方法、系统、设备及可读存储介质 |
CN107291558B (zh) * | 2016-03-30 | 2020-11-24 | 阿里巴巴集团控股有限公司 | 一种应用程序接口死锁监控方法和装置 |
CN112256442A (zh) * | 2019-07-22 | 2021-01-22 | 中兴通讯股份有限公司 | 一种数据库死锁检测方法及装置 |
CN112363846A (zh) * | 2021-01-11 | 2021-02-12 | 北京金山云网络技术有限公司 | 数据库事务的死锁检测方法、装置及电子设备 |
CN112559195A (zh) * | 2020-12-25 | 2021-03-26 | 恒生电子股份有限公司 | 数据库死锁的检测方法、装置、测试终端及介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101089857A (zh) * | 2007-07-24 | 2007-12-19 | 中兴通讯股份有限公司 | 一种内存数据库事务管理方法及系统 |
CN101425070A (zh) * | 2008-08-11 | 2009-05-06 | 深圳市金蝶中间件有限公司 | 一种死锁定位的方法、死锁定位装置和数据系统 |
US20100017442A1 (en) * | 2008-07-18 | 2010-01-21 | International Business Machines Corporation | Information Management Server, Information Processing System, Communication Method and Program |
CN102469106A (zh) * | 2010-11-18 | 2012-05-23 | 国际商业机器公司 | 减少用于分布式sip服务器环境中争用检测的消息传递的方法和系统 |
CN104793988A (zh) * | 2014-01-20 | 2015-07-22 | 阿里巴巴集团控股有限公司 | 跨数据库分布式事务的实现方法和装置 |
-
2015
- 2015-10-30 CN CN201510728187.1A patent/CN105426234B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101089857A (zh) * | 2007-07-24 | 2007-12-19 | 中兴通讯股份有限公司 | 一种内存数据库事务管理方法及系统 |
US20100017442A1 (en) * | 2008-07-18 | 2010-01-21 | International Business Machines Corporation | Information Management Server, Information Processing System, Communication Method and Program |
CN101425070A (zh) * | 2008-08-11 | 2009-05-06 | 深圳市金蝶中间件有限公司 | 一种死锁定位的方法、死锁定位装置和数据系统 |
CN102469106A (zh) * | 2010-11-18 | 2012-05-23 | 国际商业机器公司 | 减少用于分布式sip服务器环境中争用检测的消息传递的方法和系统 |
CN104793988A (zh) * | 2014-01-20 | 2015-07-22 | 阿里巴巴集团控股有限公司 | 跨数据库分布式事务的实现方法和装置 |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107291558B (zh) * | 2016-03-30 | 2020-11-24 | 阿里巴巴集团控股有限公司 | 一种应用程序接口死锁监控方法和装置 |
CN106874391B (zh) * | 2017-01-12 | 2019-12-10 | 无线生活(杭州)信息科技有限公司 | 一种死锁处理方法及装置 |
CN106874391A (zh) * | 2017-01-12 | 2017-06-20 | 无线生活(杭州)信息科技有限公司 | 一种死锁处理方法及装置 |
CN109976881A (zh) * | 2017-12-28 | 2019-07-05 | 腾讯科技(深圳)有限公司 | 事务识别方法和装置、存储介质以及电子装置 |
CN109976881B (zh) * | 2017-12-28 | 2022-11-08 | 腾讯科技(深圳)有限公司 | 事务识别方法和装置、存储介质以及电子装置 |
CN110580232A (zh) * | 2018-06-08 | 2019-12-17 | 杭州宏杉科技股份有限公司 | 一种锁管理的方法及装置 |
CN110580232B (zh) * | 2018-06-08 | 2021-10-29 | 杭州宏杉科技股份有限公司 | 一种锁管理的方法及装置 |
CN111221869A (zh) * | 2018-11-27 | 2020-06-02 | 北京京东振世信息技术有限公司 | 一种追踪数据库事务时间和分析数据库锁的方法和装置 |
CN112256442A (zh) * | 2019-07-22 | 2021-01-22 | 中兴通讯股份有限公司 | 一种数据库死锁检测方法及装置 |
WO2021012819A1 (zh) * | 2019-07-22 | 2021-01-28 | 中兴通讯股份有限公司 | 一种数据库死锁检测方法及装置 |
CN111858075A (zh) * | 2020-06-30 | 2020-10-30 | 广东浪潮大数据研究有限公司 | 一种死锁检测的方法、系统、设备及可读存储介质 |
CN112559195A (zh) * | 2020-12-25 | 2021-03-26 | 恒生电子股份有限公司 | 数据库死锁的检测方法、装置、测试终端及介质 |
CN112559195B (zh) * | 2020-12-25 | 2021-12-21 | 恒生电子股份有限公司 | 数据库死锁的检测方法、装置、测试终端及介质 |
CN112363846A (zh) * | 2021-01-11 | 2021-02-12 | 北京金山云网络技术有限公司 | 数据库事务的死锁检测方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN105426234B (zh) | 2019-02-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105426234A (zh) | 数据库死锁检测方法及装置 | |
CN102135938B (zh) | 一种软件产品测试方法及系统 | |
CN107015842B (zh) | 一种服务器端程序编译和发布的管理方法及系统 | |
CN110807085B (zh) | 故障信息的查询方法及装置、存储介质、电子装置 | |
US20070239799A1 (en) | Analyzing log files | |
CN108182258B (zh) | 分布式的数据分析系统及方法 | |
CN108694221B (zh) | 数据实时分析方法、模块、设备和装置 | |
CN109885496B (zh) | 测试日志管理方法及系统 | |
CN104572448A (zh) | 一种线程堆栈的使用情况的实现方法和装置 | |
CN102609421A (zh) | 数据查询方法及装置 | |
CN107491463B (zh) | 数据查询的优化方法和系统 | |
CN111427784B (zh) | 一种数据获取方法、装置、设备及存储介质 | |
CN101425070B (zh) | 一种死锁定位的方法、死锁定位装置和数据系统 | |
CN102385629B (zh) | 一种数据仓库中父子模型引申为网络模型的应用方法 | |
CN110795332A (zh) | 一种自动化测试方法和装置 | |
US20110137891A1 (en) | Client and database problem determination and monitoring | |
CN112199443B (zh) | 数据同步方法、装置、计算机设备和存储介质 | |
WO2017161820A1 (zh) | 一种服务器分组管理方法、装置和电子设备 | |
CN113641742A (zh) | 一种数据抽取方法、装置、设备和存储介质 | |
CN106649584B (zh) | 一种主从式数据库系统中的索引处理方法和装置 | |
CN112597216A (zh) | 一种适配多种时序数据库的微服务的方法和装置 | |
CN112699183A (zh) | 数据处理方法、系统、可读存储介质及计算机设备 | |
CN102193859B (zh) | 一种代码分析方法及系统 | |
CN111984660A (zh) | 数据同步方法、装置、设备及存储介质 | |
CN107679198B (zh) | 信息的查询方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |