System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本申请涉及大数据,尤其涉及一种参数值统计方法、装置、计算机设备和可读存储介质。
技术介绍
1、在数据库所执行的sql(structured query language,结构化查询语言)语句中,往往会包含一些常量值和绑定变量值等参数信息。例如执行如下一条sql语句:select idfrom t1 where id>?or id<10;?处绑定值5(long类型)。其中,10为一个常量值,?处所绑定的变量值在执行时可设置为5。但是在数据库内部想要查看所执行的sql语句时,查询结果往往是将常量和绑定变量两种参数值给参数化之后的,以数据库中sys_stat_statement组件为例,绑定变量5被参数化为$1,常量10被参数化为$2。这是因为对于只有参数值不同的一类sql,没必要每次执行都将完整的sql文本和参数值记录下来。统计模块的现有实现中,为了实现累积式统计的统计更新以便复用存储资源,会以queryid作为sql语句的唯一标识。例如,对两个sql:select*from a where id<1,select*form a where id<10。在存储相关统计信息时可以将其记录为一条,虽然他们参数值信息不同,但是queryid相同。
2、这样的实现方便了对同一种sql进行集中分析,但是在进行数据库性能调优时,有时需要知道所执行语句中常量和绑定变量两种参数值,来判断其对执行计划选择的影响。当前数据库中,想要查看参数化之前参数值,需要开启log_statement参数,然后在log日志文件中查
技术实现思路
1、本申请实施例提供一种参数值统计方法、装置、计算机设备和可读存储介质,用以达到提高增量备份速度的效果。
2、第一方面,本申请实施例提供一种参数值统计方法,包括:
3、接收sql语句;
4、采集所述sql语句参数化前的参数信息,所述参数信息包括常量信息和绑定变量信息;
5、存储所述参数信息至数据库的共享内存中;
6、基于数据库的锁定机制,控制所述共享内存的并发访问的逻辑,其中,所述并发访问用于统计sql参数值。
7、在一种可能的实施方式中,所述采集所述sql语句参数化前的参数信息,包括:
8、针对使用扩展报文协议的sql语句,从p报文中提取常量信息,在b报文中解析得到绑定变量信息;其中,所述扩展报文协议包括p报文和b报文;
9、针对使用简单报文协议的sql语句,从q报文中缓存的执行计划中读取常量信息;其中,所述简单报文协议包括q报文,且所述执行计划是所述q报文基于sql语句生成的。
10、在一种可能的实施方式中,所述存储所述参数信息至数据库的共享内存中,包括:
11、将所述参数信息存储至共享内存的哈希表中;
12、其中,每条所述sql语句中涉及的每个常量、每个绑定变量作为一条记录单独存储。
13、在一种可能的实施方式中,所述哈希表被划分为预设数量个分区,且每个分区对应有一个分区锁;所述并发访问包括查询操作;
14、所述基于数据库的锁定机制,控制所述共享内存的并发访问的逻辑,包括:
15、为所述哈希表中的每个分区设置一个共享锁,遍历查询所述哈希表;
16、将查询到的当前查询标识符对应的一组参数值同时加上自旋锁,读取这组参数值,得到查询结果;其中,所述查询标识符是数据库根据参数化后的sql语句的逻辑结构生成的;
17、查询结束后,依次释放该组的自旋锁、和各分区的共享锁。
18、在一种可能的实施方式中,所述并发访问还包括插入操作和更新操作;
19、所述基于数据库的锁定机制,控制所述共享内存的并发访问的逻辑,还包括:
20、针对一条所述sql语句,若查询到该sql语句对应的参数信息的第一个参数不存在于所述哈希表中,则先释放该参数信息在所述哈希表中对应组的共享锁,再为该组加排他锁,将参数信息插入哈希表中,插入结束后释放排他锁;
21、否则,查找该组待更新参数的条目地址,并为该组添加自旋锁,根据条目地址,逐一更新各参数,更新结束后释放自旋锁。
22、在一种可能的实施方式中,所述并发访问还包括删除操作;
23、所述基于数据库的锁定机制,控制所述共享内存的并发访问的逻辑,还包括:
24、将所述哈希表每个分区的分区锁设置为排他锁,对所述哈希表中的多余条目进行删除;
25、删除结束后释放排他锁。
26、在一种可能的实施方式中,所述方法还包括:
27、若一条sql语句执行过插入操作,该sql语句对应的参数信息已存储至所述哈希表中,则后续执行预设次数后更新一次所述哈希表中的参数信息。
28、第二方面,本申请实施例提供一种参数值统计装置,包括:
29、接收模块,用于接收sql语句;
30、采集模块,用于采集所述sql语句参数化前的参数信息,所述参数信息包括常量信息和绑定变量信息;
31、存储模块,用于存储所述参数信息至数据库的共享内存中;
32、统计模块,用于基于数据库的锁定机制,控制所述共享内存的并发访问的逻辑,其中,所述并发访问用于统计sql参数值。
33、第三方面,本申请实施例提供一种计算机设备,包括:存储器,处理器;
34、所述存储器存储计算机执行指令;
35、所述处理器执行所述存储器存储的计算机执行指令,使得所述处理器执行如上第一方面和/或第一方面各种可能的实施方式。
36、第四方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如上第一方面和/或第一方面各种可能的实施方式。
37、第五方面,本申请实施例提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现如上第一方面和/或第一方面各种可能的实施方式。
38、本申请实施例提供的一种参数值统计方法、装置、计算机设备和可读存储介质,通过采集sql语句参数化前的包括常量信息和绑定变量信息的参数信息,统一了两种参数值的采集存储逻辑,优化了数据库中执行统计的效率;进一步地,将参数信息存储至数据库的共享内存中,保证了参数信息在所有会话之间保持同步,方便数据库管理员在某个会话中对全实例进行调优;进一步地,基于数据库的锁定机制,控制共享内存的并发访问的逻辑,保证sql语句中的一组参数在多并发本文档来自技高网...
【技术保护点】
1.一种参数值统计方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述采集所述SQL语句参数化前的参数信息,包括:
3.根据权利要求1所述的方法,其特征在于,所述存储所述参数信息至数据库的共享内存中,包括:
4.根据权利要求3所述的方法,其特征在于,所述哈希表被划分为预设数量个分区,且每个分区对应有一个分区锁;所述并发访问包括查询操作;
5.根据权利要求4所述的方法,其特征在于,所述并发访问还包括插入操作和更新操作;
6.根据权利要求4或5所述的方法,其特征在于,所述并发访问还包括删除操作;
7.根据权利要求5所述的方法,其特征在于,所述方法还包括:
8.一种参数值统计装置,其特征在于,包括:
9.一种计算机设备,其特征在于,包括:存储器,处理器;
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如权利要求1-7任一项所述的方法。
【技术特征摘要】
1.一种参数值统计方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述采集所述sql语句参数化前的参数信息,包括:
3.根据权利要求1所述的方法,其特征在于,所述存储所述参数信息至数据库的共享内存中,包括:
4.根据权利要求3所述的方法,其特征在于,所述哈希表被划分为预设数量个分区,且每个分区对应有一个分区锁;所述并发访问包括查询操作;
5.根据权利要求4所述的方法,其特征在于,所述并发访问还包括插...
【专利技术属性】
技术研发人员:高翔,尹强,徐登峰,
申请(专利权)人:中电科金仓北京科技股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。