一种死锁处理方法及装置与流程

文档序号:12719950阅读:135来源:国知局
一种死锁处理方法及装置与流程

本发明涉及分布式系统领域,特别涉及一种死锁处理方法及装置。



背景技术:

MySQL是开源社区非常受欢迎的数据库系统,随着国家互联网+、电子商务、移动互联网的深入发展,基于MySQL的应用越来越广泛。随着数据量的增加,业务需求场景也与日俱增,每天都在变化中。MySQL数据库的操作变更在这个背景下变得频繁、重要。为了确保基于MySQL的产品和应用的稳定性,需要确保MySQL的更新操作是稳定可控的。在使用了MySQL后,在高并发场景下,在不了解InnoDB的内部技术实现的情况下,很容易出现死锁错误。

目前业界大部分的MySQL数据库死锁分析主要依赖人工操作。根据MySQL的死锁信息来人工判断死锁发生的原因,依赖人工来分析和重现,分析的时间非常长。这种人工分析的情况难以支撑大量的数据库运维场景,而且效率极低。



技术实现要素:

鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种死锁处理方法及装置。用以提高提高数据库死锁的分析效率和更快的给出死锁的解决方案。

本发明提供一种死锁处理方法,包括:

监测数据库运行的进程是否发生死锁;

当监测到发生死锁时,根据预设的模型重现死锁;

根据重现的死锁确定所述死锁发生的过程以及避免死锁发生的语句。

在一个实施例,所述当监测到发生死锁时,根据预设的模型重现死锁,可包括:

当监测到发生死锁时,启动第二线程;

从第一线程中拉取所述与死锁相关的表结构、数据以及更新语句,所述第一线程包含发生了死锁的数据库;

将所述与死锁相关的表结构、数据以及更新语句输入所述预设模型;

根据所述预设模型来并发事务操作,重现死锁发生的场景。

在一个实施例,所述监测数据库运行的进程是否发生死锁,可包括:

当数据库发生死锁错误时,数据库死锁监控程序捕获所述数据库的死锁错误。

在一个实施例,所述方法还可包括:

当监测到发生死锁时,获取在所述死锁中被牺牲的事务以及与所述死锁的产生相关联的事务;

确定与所述在所述死锁中被牺牲的事务以及与所述死锁的产生相关联的事务相关的表结构、数据以及更新语句。

本发明还提供一种死锁处理装置,包括:

监测模块,用于监测数据库运行的进程是否发生死锁;

死锁重现模块,用于当监测到发生死锁时,根据预设的模型重现死锁;

第一确定模块,用于根据重现的死锁确定所述死锁发生的过程以及避免死锁发生的语句。

在一个实施例,所述死锁重现模块,可包括:

启动子模块,用于当监测到发生死锁时,启动第二线程;

拉取子模块,用于从第一线程中拉取所述与死锁相关的表结构、数据以及更新语句,所述第一线程包含发生了死锁的数据库;

输入子模块,用于将所述与死锁相关的表结构、数据以及更新语句输入所述预设模型;

重现子模块,用于根据所述预设模型来并发事务操作,重现死锁发生的场景。

在一个实施例,所述监测模块,可包括:

捕获子模块,用于当数据库发生死锁错误时,数据库死锁监控程序捕获所述数据库的死锁错误。

在一个实施例,所述装置还可包括:

获取模块,用于当监测到发生死锁时,获取在所述死锁中被牺牲的事务以及与所述死锁的产生相关联的事务;

第二确定模块,用于确定与所述在所述死锁中被牺牲的事务以及与所述死锁的产生相关联的事务相关的表结构、数据以及更新语句。

本发明的实施例提供的技术方案可以包括以下有益效果:

上述技术方案,通过监测数据库运行的进程是否发生死锁;当监测到发生死锁时,根据预设的模型重现死锁;根据重现的死锁确定死锁发生的过程以及避免死锁发生的语句。由于在监控到数据库有死锁错误的时候,根据预设模型来进行死锁重现和分析,最终给出不会导致死锁的更新语句,从而极大提高了数据库死锁的分析效率和更快的给出了解决方案,给业务的稳定性带来了更好的帮助,提升了用户体验满意度。

本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。

下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。

附图说明

附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:

图1为本发明实施例中一种死锁处理方法的流程图;

图2为本发明实施例中一种死锁处理方法中步骤S12的流程图;

图3为本发明实施例中另一种死锁处理方法的流程图;

图4为本发明实施例中另一种死锁处理方法的流程图;

图5为本发明实施例中一种死锁处理装置的框图;

图6为本发明实施例中一种死锁处理装置中死锁重现模块52的框图;

图7为本发明实施例中另一种死锁处理装置的框图。

具体实施方式

以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。

图1所示为本发明实施例中一种死锁处理方法的流程图,如图1所示,该死锁处理方法包括以下步骤S11-S13:

步骤S11,监测数据库运行的进程是否发生死锁。

步骤S12,当监测到发生死锁时,根据预设的模型重现死锁。

步骤S13,根据重现的死锁确定死锁发生的过程以及避免死锁发生的语句。

本发明可用于MySQL数据库中,是针对MySQL的死锁问题建立的一套自动化的死锁重现和问题分析的方案。本发明实施例的上述方法,通过监测数据库运行的进程是否发生死锁;当监测到发生死锁时,根据预设的模型重现死锁;根据重现的死锁确定死锁发生的过程以及避免死锁发生的语句。由于在监控到数据库有死锁错误的时候,根据预设模型来进行死锁重现和分析,最终给出不会导致死锁的更新语句,从而提高了数据库死锁的分析效率和更快的给出了解决方案,给业务的稳定性带来了更好的帮助,提升了用户体验满意度。

在一个实施例,如图2所示,步骤S12可包括以下步骤S121-S124:

步骤S121,当监测到发生死锁时,启动第二线程。

步骤S122,从第一线程中拉取与死锁相关的表结构、数据以及更新语句,第一线程包含发生了死锁的数据库。

步骤S123,将与死锁相关的表结构、数据以及更新语句输入预设模型。

步骤S124,根据预设模型来并发事务操作,重现死锁发生的场景。

本实施例中,提供一个MySQL死锁错误实时监控模块,当监测到发生死锁时,启动另外一个线程,即第二线程,从有死锁的数据库里面拉取发生了死锁的表结构,更新语句和相关的数据,构建死锁环境模块,包括与死锁相关的表结构,数据库语句,数据等。提供一个死锁重现和分析程序模块,根据设定的模型来并发事务操作,最终得到重现的场景,在重现死锁后给出死锁产生的过程和避免死锁发生的语句。从而极大提高了数据库死锁的分析效率和更快的给出了解决方案。

在一个实施例,如图3所示,步骤S11可包括以下步骤S111:

步骤S111,当数据库发生死锁错误时,数据库死锁监控程序捕获数据库的死锁错误。

本实施例提供一个MySQL数据库死锁监控程序,该程序会把数据库的死锁错误捕获。捕获到死锁后,启动另外一个线程,即第二线程。从而可以准确的监控到数据库的死锁错误。

在一个实施例,如图4所示,该死锁处理方法包括以下步骤S14-S15:

步骤S14,当监测到发生死锁时,获取在死锁中被牺牲的事务以及与死锁的产生相关联的事务。

步骤S15,确定与在死锁中被牺牲的事务以及与死锁的产生相关联的事务相关的表结构、数据以及更新语句。

本实施例,当监测到发生死锁时,获取在死锁中被牺牲的事务以及与死锁的产生相关联的事务,确定与在死锁中被牺牲的事务以及与死锁的产生相关联的事务相关的表结构、数据以及更新语句。从而可以更方便的构建死锁环境。

基于同一发明构思,本发明实施例还提供了一种死锁处理装置,由于该装置所解决问题的原理与前述死锁处理方法相似,因此该装置的实施可以参见前述方法的实施,重复之处不再赘述。

图5所示为本发明实施例中一种死锁处理装置的框图,如图5所示,该死锁处理装置包括:

监测模块51,用于监测数据库运行的进程是否发生死锁;

死锁重现模块52,用于当监测到发生死锁时,根据预设的模型重现死锁;

第一确定模块53,用于根据重现的死锁确定死锁发生的过程以及避免死锁发生的语句。

在一个实施例,如图6所示,死锁重现模块52,可包括:

启动子模块521,用于当监测到发生死锁时,启动第二线程;

拉取子模块522,用于从第一线程中拉取与死锁相关的表结构、数据以及更新语句,第一线程包含发生了死锁的数据库;

输入子模块523,用于将与死锁相关的表结构、数据以及更新语句输入预设模型;

重现子模块524,用于根据预设模型来并发事务操作,重现死锁发生的场景。

在一个实施例,监测模块51,可包括:

捕获子模块,用于当数据库发生死锁错误时,数据库死锁监控程序捕获数据库的死锁错误。

在一个实施例,如图7所示,该死锁处理装置还可包括:

获取模块54,用于当监测到发生死锁时,获取在死锁中被牺牲的事务以及与死锁的产生相关联的事务;

第二确定模块55,用于确定与在死锁中被牺牲的事务以及与死锁的产生相关联的事务相关的表结构、数据以及更新语句。

本发明可用于MySQL数据库中,是针对MySQL的死锁问题建立的一套自动化的死锁重现和问题分析的方案。本发明实施例的上述装置,通过监测数据库运行的进程是否发生死锁;当监测到发生死锁时,根据预设的模型重现死锁;根据重现的死锁确定死锁发生的过程以及避免死锁发生的语句。由于在监控到数据库有死锁错误的时候,根据预设模型来进行死锁重现和分析,最终给出不会导致死锁的更新语句,从而极大提高了数据库死锁的分析效率和更快的给出了解决方案,给业务的稳定性带来了更好的帮助,提升了用户体验满意度。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1