[发明专利]一种死锁处理方法及装置有效
申请号: | 201710022889.7 | 申请日: | 2017-01-12 |
公开(公告)号: | CN106874391B | 公开(公告)日: | 2019-12-10 |
发明(设计)人: | 杨德华 | 申请(专利权)人: | 无线生活(杭州)信息科技有限公司 |
主分类号: | G06F16/23 | 分类号: | G06F16/23;G06F11/30 |
代理公司: | 11477 北京尚伦律师事务所 | 代理人: | 张俊国 |
地址: | 310000 浙江省杭州市*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 死锁 处理 方法 装置 | ||
本发明公开了一种死锁处理方法及装置,该方法包括:监测数据库运行的进程是否发生死锁;当监测到发生死锁时,根据预设的模型重现死锁;根据重现的死锁确定死锁发生的过程以及避免死锁发生的语句。上述技术方案,由于在监控到数据库有死锁错误的时候,根据预设模型来进行死锁重现和分析,最终给出不会导致死锁的更新语句,从而极大提高了数据库死锁的分析效率和更快的给出了解决方案,给业务的稳定性带来了更好的帮助,提升了用户体验满意度。
技术领域
本发明涉及分布式系统领域,特别涉及一种死锁处理方法及装置。
背景技术
MySQL是开源社区非常受欢迎的数据库系统,随着国家互联网+、电子商务、移动互联网的深入发展,基于MySQL的应用越来越广泛。随着数据量的增加,业务需求场景也与日俱增,每天都在变化中。MySQL数据库的操作变更在这个背景下变得频繁、重要。为了确保基于MySQL的产品和应用的稳定性,需要确保MySQL的更新操作是稳定可控的。在使用了MySQL后,在高并发场景下,在不了解InnoDB的内部技术实现的情况下,很容易出现死锁错误。
目前业界大部分的MySQL数据库死锁分析主要依赖人工操作。根据MySQL的死锁信息来人工判断死锁发生的原因,依赖人工来分析和重现,分析的时间非常长。这种人工分析的情况难以支撑大量的数据库运维场景,而且效率极低。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种死锁处理方法及装置。用以提高提高数据库死锁的分析效率和更快的给出死锁的解决方案。
本发明提供一种死锁处理方法,包括:
监测数据库运行的进程是否发生死锁;
当监测到发生死锁时,根据预设的模型重现死锁;
根据重现的死锁确定所述死锁发生的过程以及避免死锁发生的语句。
在一个实施例,所述当监测到发生死锁时,根据预设的模型重现死锁,可包括:
当监测到发生死锁时,启动第二线程;
从第一线程中拉取所述与死锁相关的表结构、数据以及更新语句,所述第一线程包含发生了死锁的数据库;
将所述与死锁相关的表结构、数据以及更新语句输入所述预设模型;
根据所述预设模型来并发事务操作,重现死锁发生的场景。
在一个实施例,所述监测数据库运行的进程是否发生死锁,可包括:
当数据库发生死锁错误时,数据库死锁监控程序捕获所述数据库的死锁错误。
在一个实施例,所述方法还可包括:
当监测到发生死锁时,获取在所述死锁中被牺牲的事务以及与所述死锁的产生相关联的事务;
确定与所述在所述死锁中被牺牲的事务以及与所述死锁的产生相关联的事务相关的表结构、数据以及更新语句。
本发明还提供一种死锁处理装置,包括:
监测模块,用于监测数据库运行的进程是否发生死锁;
死锁重现模块,用于当监测到发生死锁时,根据预设的模型重现死锁;
第一确定模块,用于根据重现的死锁确定所述死锁发生的过程以及避免死锁发生的语句。
在一个实施例,所述死锁重现模块,可包括:
启动子模块,用于当监测到发生死锁时,启动第二线程;
拉取子模块,用于从第一线程中拉取所述与死锁相关的表结构、数据以及更新语句,所述第一线程包含发生了死锁的数据库;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于无线生活(杭州)信息科技有限公司,未经无线生活(杭州)信息科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710022889.7/2.html,转载请声明来源钻瓜专利网。