本申请属于数据库管理,具体地讲,涉及一种mysql数据库元数据锁自动监控查杀的方法及装置。
背景技术:
1、随着mysql数据库的流行及大规模使用,在数据库运行的过程中,如何维护业务运行的稳定性与可靠性,保障数据库多并发高效处理业务的请求时数据库管理员(dba)的主要工作职责。其中被长时间持有的元数据锁(metadata lock,简称mdl,一般也可以称为字典锁。mdl锁的主要作用是维护表元数据的数据一致性,在表上有活动事务(显式或隐式)的时候,不可以对元数据进行写入操作。因此从mysql5.5版本开始引入了mdl锁,来保护表的元数据信息,用于解决或者保证ddl操作与dml操作之间的一致性。ddl操作会获取mdl写锁,dml操作会获取mdl读锁,读锁之间不会互斥,但写锁和读锁、写锁和写锁会互斥,等待同一对象写锁的会话会被已获取写锁的会话阻塞。)会影响数据库的并发处理请求的效率,使数据库处理能力出现下降,因此能及时发现、及时查杀被长期持有的元数据锁,避免其长时间阻塞其他并发会话是十分重要的。
2、元数据锁阻塞一旦发生会对业务造成极大影响,因为后续所有对该表的访问都会被阻塞,这样会造成连锁反应,极易造成大量交易堵塞的问题,严重者会造成数据库崩溃。
技术实现思路
1、本申请提供了一种mysql数据库元数据锁自动监控查杀的方法及装置,以至少解决目前数据库无法对正在发生的元数据锁进行自动监控及查杀从而造成大量交易堵塞的问题。
2、根据本申请的一个方面,提供了一种mysql数据库元数据锁自动监控查杀的方法,包括:
3、以预设的监控时间间隔为周期查询应用数据库运行状态并获得会话信息;
4、根据应用数据库运行状态中会话信息筛选异常会话;
5、对异常会话进行分类并按照对应的类别进行处理。
6、在一实施例中,以预设的监控时间间隔为周期查询应用数据库运行状态,包括:
7、从数据库中获取最近n条sql语句的开始时间,n为大于等于1且小于mysql预设记录上限的整数;
8、根据开始时间获得数据库中有持锁会话id以及对应的会话持续时间;
9、根据会话持续时间获得元数据锁的持有时间。
10、在一实施例中,根据应用数据库运行状态中会话信息筛选异常会话,包括:
11、判断元数据锁的持有时间与预设值的大小关系;
12、若元数据锁的持有时间大于预设值的大小关系,则标记为异常会话。
13、在一实施例中,对异常会话进行分类并按照对应的类别进行处理,包括:
14、判断异常会话在本次监控周期之前是否已经被记录到异常会话列表获得分类结果;
15、根据分类结果按照对应的类别进行处理。
16、在一实施例中,根据分类结果按照对应的类别进行处理,包括:
17、如果异常会话在本次监控周期之前已经被记录到异常会话列表,则仅更新异常会话列表中该异常会话对应的时间戳。
18、在一实施例中,根据分类结果按照对应的类别进行处理,还包括:
19、如果异常会话是新检测到的会话,则在异常会话列表新增一条记录,记录该异常会话的会话信息;
20、根据会话信息查找预存的执行行为,如果执行行为是杀死会话,则想应用数据库发送指令杀死对应的会话。
21、在一实施例中,元数据锁自动监控查杀的方法还包括:
22、根据预设的流程判断是否将异常会话信息发送至集中监控系统。
23、根据本申请的另一个方面,还提供了一种mysql数据库元数据锁自动监控查杀的装置,包括:
24、查询单元,用于以预设的监控时间间隔为周期查询应用数据库运行状态并获得会话信息;
25、异常会话筛选单元,用于根据应用数据库运行状态中会话信息筛选异常会话;
26、分类处理单元,用于对异常会话进行分类并按照对应的类别进行处理。
27、在一实施例中,查询单元包括:
28、获取模块,用于从数据库中获取最近n条sql语句的开始时间,n为大于等于1且小于mysql预设记录上限的整数;
29、会话持续时间获取模块,用于根据开始时间获得数据库中有持锁会话id以及对应的会话持续时间;
30、持有时间获取模块,用于根据会话持续时间获得元数据锁的持有时间。
31、在一实施例中,异常会话筛选单元包括:
32、判断模块,用于判断元数据锁的持有时间与预设值的大小关系;
33、异常筛选模块,用于若元数据锁的持有时间大于预设值的大小关系,则标记为异常会话。
34、在一实施例中,异常会话筛选单元包括:
35、分类模块,用于判断异常会话在本次监控周期之前是否已经被记录到异常会话列表获得分类结果;
36、处理模块,用于根据分类结果按照对应的类别进行处理。
37、在一实施例中,处理模块包括:
38、第一处理模块,用于如果异常会话在本次监控周期之前已经被记录到异常会话列表,则仅更新异常会话列表中该异常会话对应的时间戳。
39、在一实施例中,处理模块还包括:
40、新增模块,用于如果异常会话是新检测到的会话,则在异常会话列表新增一条记录,记录该异常会话的会话信息;
41、第二处理模块,用于根据会话信息查找预存的执行行为,如果执行行为是杀死会话,则想应用数据库发送指令杀死对应的会话。
42、在一实施例中,元数据锁自动监控查杀的装置还包括:
43、发送模块,用于根据预设的流程判断是否将异常会话信息发送至集中监控系统。
44、本申请提供了一种集中展示、集中控制、事中自动监控、自动查杀元数据锁阻塞会话的系统及方法,有效缓解了长时间元数据锁阻塞带来的危害,保障业务的稳定性与可靠性。
1.一种mysql数据库元数据锁自动监控查杀的方法,其特征在于,包括:
2.根据权利要求1所述的元数据锁自动监控查杀的方法,其特征在于,所述以预设的监控时间间隔为周期查询应用数据库运行状态并获得会话信息,包括:
3.根据权利要求1所述的元数据锁自动监控查杀的方法,其特征在于,所述根据所述应用数据库运行状态中会话信息筛选异常会话,包括:
4.根据权利要求1所述的元数据锁自动监控查杀的方法,其特征在于,对异常会话进行分类并按照对应的类别进行处理,包括:
5.根据权利要求4所述的元数据锁自动监控查杀的方法,其特征在于,所述根据分类结果按照对应的类别进行处理,包括:
6.根据权利要求4所述的元数据锁自动监控查杀的方法,其特征在于,所述根据分类结果按照对应的类别进行处理,还包括:
7.根据权利要求1所述的元数据锁自动监控查杀的方法,其特征在于,还包括:
8.一种mysql数据库元数据锁自动监控查杀的装置,其特征在于,包括:
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1至7任一项所述的mysql数据库元数据锁自动监控查杀的方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至7任一项所述的mysql数据库元数据锁自动监控查杀的方法的步骤。