本技术涉及数据库,特别是涉及一种死锁风险检测方法、装置、计算机设备及可读存储介质。
背景技术:
1、在计算机程序中,为了保证数据一致性,当一个数据库事务在修改某一数据时,数据库管理系统将对该数据进行锁定,使其他的数据库事务不能修改该数据。而当两个数据库事务中任一数据库事务当前所需的数据为另一个数据库事务当前修改的数据时,这两个数据库事务就形成了相互等待的现象,造成数据库死锁。相关技术中,为了避免发生死锁的情况,通常采用制定规范来对待执行的代码进行检查的方式提前检测死锁风险,发现问题代码即时改造。
2、在实现本技术的过程中,申请人发现相关技术至少存在以下问题:
3、多个事务并发执行时,往往是新代码开启了新的事务与老的事务造成资源争抢而死锁,而提前检查代码的方式很难覆盖到全部的新老代码,使得多个事务并发执行时还是会存在死锁风险,检测准确度较低。
技术实现思路
1、有鉴于此,本技术提供了一种死锁风险检测方法、装置、计算机设备及可读存储介质,主要目的在于解决提前检查代码的方式很难覆盖到全部的新老代码,使得多个事务并发执行时还是会存在死锁风险,检测准确度较低的问题。
2、依据本技术第一方面,提供了一种死锁风险检测方法,该方法包括:
3、获取预设时间段内待操作数据库对应的多个开启事务;
4、获取每个开启事务中的多个脚本的多个脚本信息,其中,多个脚本信息包括多个脚本对应的多个脚本类型、多个数据资源和多个多个脚本执行时间;
5、根据多个脚本信息,判断多个开启事务之间是否存在死锁风险。
6、可选地,获取预设时间段内待操作数据库对应的多个开启事务的步骤,具体包括:
7、响应于死锁风险检测请求,获取待操作数据库的数据库连接;
8、获取数据库连接在预设时间段内的多个事务的多个事务状态;
9、根据多个事务状态,确定数据库连接中的多个开启事务。
10、可选地,根据多个脚本信息,确定多个开启事务之间是否存在死锁风险的步骤,具体包括:
11、判断多个开启事务的多个脚本类型中是否包括更新语句;
12、在多个脚本类型中未包括更新语句的情况下,确定多个开启事务之间不存在死锁风险;
13、在多个脚本类型中包括更新语句的情况下,在多个开启事务中,确定更新语句对应的至少一个目标事务;
14、在至少一个目标事务的数量为一个的情况下,确定多个开启事务之间不存在死锁风险;
15、在至少一个目标事务的数量为多个的情况下,获取多个目标事务中更新语句对应的多个目标脚本的多个目标脚本信息;
16、根据多个目标脚本信息,判断多个目标事务之间是否存在死锁风险。
17、可选地,根据多个目标脚本信息,判断多个目标事务之间是否存在死锁风险的步骤,具体包括:
18、获取每个目标事务对应的目标脚本的数量;
19、在多个目标事务中,确定是否存在目标脚本的数量为单个的目标事务;
20、若存在,确定该目标事务与多个其他目标事务之间不存在死锁风险;
21、若不存在,获取多个目标事务的多个目标脚本的多个数据资源;
22、根据多个数据资源,判断多个目标事务之间是否存在死锁风险。
23、可选地,根据多个数据资源,判断多个目标事务之间是否存在死锁风险的步骤,具体包括:
24、根据多个目标脚本的多个目标脚本执行时间,确定多个数据资源之间的执行顺序;
25、判断多个目标事务中是否存在至少两个目标事务,其中,至少两个目标事务中包含了相同的多个目标数据资源,且多个目标数据资源的执行顺序不同;
26、若存在,确定至少两个目标事务之间存在死锁风险。
27、可选地,若存在,确定该目标事务与多个其他目标事务之间不存在死锁风险之后,还包括:
28、在多个目标事务中,排除目标脚本数量为单个的目标事务;
29、获取排除后的多个目标事务的多个目标脚本的多个目标数据资源和多个目标数据资源的执行顺序;
30、判断多个目标事务中是否存在至少两个目标事务,其中,至少两个目标事务中包含了相同的多个目标数据资源,且多个目标数据资源的执行顺序不同;
31、若存在,确定至少两个目标事务之间存在死锁风险。
32、可选地,若存在,确定至少两个目标事务之间存在死锁风险之后,还包括:
33、获取每个目标事务的事务标识;
34、根据事务标识、多个目标脚本对应的多个目标脚本类型、多个目标数据资源和多个目标脚本执行时间,生成死锁风险提示信息;
35、发送死锁风险提示信息。
36、依据本技术第二方面,提供了一种死锁风险检测装置,该装置包括:
37、第一获取模块,用于获取预设时间段内待操作数据库对应的多个开启事务;
38、第二获取模块,用于获取每个开启事务中多个脚本的多个脚本信息,其中,多个脚本信息包括多个脚本对应的多个脚本类型、多个数据资源和多个脚本执行时间;
39、判断模块,用于根据多个脚本信息,判断多个开启事务之间是否存在死锁风险。
40、可选地,第一获取模块,具体用于:
41、响应于死锁风险检测请求,获取待操作数据库的数据库连接;
42、获取数据库连接在预设时间段内的多个事务的多个事务状态;
43、根据多个事务状态,确定数据库连接中的多个开启事务。
44、可选地,判断模块,具体用于:
45、判断多个开启事务的多个脚本类型中是否包括更新语句;
46、在多个脚本类型中未包括更新语句的情况下,确定多个开启事务之间不存在死锁风险;
47、在多个脚本类型中包括更新语句的情况下,在多个开启事务中,确定更新语句对应的至少一个目标事务;
48、在至少一个目标事务的数量为一个的情况下,确定多个开启事务之间不存在死锁风险;
49、在至少一个目标事务的数量为多个的情况下,获取多个目标事务中更新语句对应的多个目标脚本的多个目标脚本信息;
50、根据多个目标脚本信息,判断多个目标事务之间是否存在死锁风险。
51、可选地,该装置还包括:
52、第三获取模块,用于获取每个目标事务对应的目标脚本的数量。
53、第一确定模块,用于在多个目标事务中,确定是否存在目标脚本的数量为单个的目标事务;
54、第二确定模块,用于若存在,确定该目标事务与多个其他目标事务之间不存在死锁风险。
55、可选地,该装置还包括:
56、第四获取模块,用于若不存在,获取多个目标事务的多个目标脚本的多个数据资源。
57、可选地,判断模块,还用于:
58、根据多个数据资源,判断多个目标事务之间是否存在死锁风险。
59、可选地,该装置还包括:
60、第三确定模块,用于根据多个目标脚本的多个目标脚本执行时间,确定多个数据资源之间的执行顺序。
61、可选地,判断模块,还用于:
62、判断多个目标事务中是否存在至少两个目标事务,其中,至少两个目标事务中包含了相同的多个目标数据资源,且多个目标数据资源的执行顺序。
63、可选地,该装置还包括:
64、第四确定模块,用于若存在,确定至少两个目标事务之间存在死锁风险。
65、可选地,该装置还包括:
66、排除模块,用于在多个目标事务中,排除目标脚本数量为单个的目标事务。
67、第五获取模块,用于获取排除后的多个目标事务的多个目标脚本的多个目标数据资源和多个目标数据资源的执行顺序。
68、可选地,判断模块,还用于:
69、判断多个目标事务中是否存在至少两个目标事务,其中,至少两个目标事务中包含了相同的多个目标数据资源,且多个目标数据资源的执行顺序不同。
70、可选地,该装置还包括:
71、第五确定模块,用于若存在,确定至少两个目标事务之间存在死锁风险。
72、可选地,该装置还包括:
73、第六获取模块,用于获取每个目标事务的事务标识;
74、生成模块,用于根据事务标识、多个目标脚本对应的多个目标脚本类型、多个目标数据资源和多个目标脚本执行时间,生成死锁风险提示信息;
75、发送模块,用于发送死锁风险提示信息。
76、依据本技术第三方面,提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现第一方面中任一项所述方法的步骤。
77、依据本技术第四方面,提供了一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现第一方面中任一项所述的方法的步骤。
78、借由上述技术方案,本技术提供的一种死锁风险检测方法、装置、计算机设备及可读存储介质,首先获取待操作的数据库对应的多个开启事务,对每个开启事务中多个脚本进行分析,以得到每个脚本的脚本类型、多个数据资源以及多个数据资源之间的执行顺序。进而利用多个事务的多个脚本类型、所有数据资源和执行顺序,对多个开启事务中是否存在死锁风险进行检测,一方面,使得在数据库操作之前就能够将可能存在的死锁风险项暴露出来,提高数据库系统的稳定性;另一方面,相较于现有技术中对全部代码进行死锁风险检测的方式,存在大量无意义的死锁检测,浪费了数据库系统cpu(central processingunit,中央处理器)资源,死锁风险检测效率较低的问题,本技术在测试运行的过程中有针对性地对多个开启事务进行检测,判断是否存在的死锁风险,轻量简单,减少数据量系统的死锁检测量,节约了数据库的cpu资源,有效提高死锁风险检测效率。
79、上述说明仅是本技术技术方案的概述,为了能够更清楚了解本技术的技术手段,而可依照说明书的内容予以实施,并且为了让本技术的上述和其它目的、特征和优点能够更明显易懂,以下特举本技术的具体实施方式。