[发明专利]一种面向IO大小的数据库性能问题检测方法有效
| 申请号: | 202310375345.4 | 申请日: | 2023-04-11 |
| 公开(公告)号: | CN116225965B | 公开(公告)日: | 2023-10-10 |
| 发明(设计)人: | 李姗姗;董威;贾周阳;马俊;李小玲;张元良;王腾;谢一帆;黄响兵 | 申请(专利权)人: | 中国人民解放军国防科技大学 |
| 主分类号: | G06F11/36 | 分类号: | G06F11/36 |
| 代理公司: | 湖南企企卫知识产权代理有限公司 43257 | 代理人: | 任合明 |
| 地址: | 410073 湖*** | 国省代码: | 湖南;43 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 面向 io 大小 数据库 性能 问题 检测 方法 | ||
1.一种面向IO大小的数据库性能问题检测方法,其特征在于包括以下步骤:
第一步,构建数据库性能问题检测系统,数据库性能问题检测系统由配置项提取模块,测试样例生成模块,IO相关测试样例提取模块,运行时数据采集模块,不适配问题检测模块组成;
配置项提取模块是一个配置分析工具,与测试样例生成模块和IO相关测试样例提取模块相连,从待检测数据库的配置项列表读取数据库的全部配置项,得到待检测数据库软件配置项参数集合C,将C发送给测试样例生成模块和IO相关测试样例提取模块;所述配置项指数据库软件的配置项参数;
测试样例生成模块与配置项提取模块和IO相关配置标识模块相连,从配置项提取模块接收C,根据C生成配置项的测试样例集合T,将T发送给IO相关测试样例提取模块;
IO相关测试样例提取模块与配置项提取模块、测试样例生成模块和运行时数据采集模块相连,从配置项提取模块接收C,从测试样例生成模块接收T,通过运行T中的测试样例,获取配置项参数更改对IO相关系统调用的影响,从而判断C中配置项是否和IO相关,得到IO相关的测试样例集合T′和IO相关配置项集合C′,读取待检测数据库的负载命令集合W,读取待检测数据库的硬件设备集合D,将T′、W、D三者做笛卡尔积,生成最终测试样例集合T″,将T″发送给运行时数据采集模块,将C′发送给不适配问题检测模块;
运行时数据采集模块与IO相关测试样例提取模块和不适配问题检测模块相连,从IO相关测试样例提取模块接收T″,执行T″中的测试样例并动态监测操作系统内核,获取操作系统内核中与IO相关的数据作为测试结果集合G,将G发送给不适配问题检测模块;
不适配问题检测模块与运行时数据采集模块和IO相关测试样例提取模块相连,从运行时数据采集模块接收G,从IO相关测试样例提取模块接收C′,采用IO大小不适配规则检测被检测数据库的性能问题,如果配置调整后,被检测数据库读写过程中小IO数量变多且被检测数据库读写性能变差,则存在由IO大小不适配导致的被检测数据库性能问题,将被检测数据库性能问题输出;
第二步,配置项提取模块读取待检测数据库配置项列表,从待检测数据库配置项列表得到数据库配置项参数集合C,将C发送给测试样例生成模块,方法是:
2.1配置项提取模块读取待检测数据库配置项列表,得到待检测数据库配置项参数集合C,C={c1,c2,…,ci,…,cI},ci为C中第i个配置项参数,I为C中配置项参数的总数,1≤i≤I;
2.2配置项提取模块将C发送给测试样例生成模块;
第三步,测试样例生成模块利用从配置项提取模块接收的C,生成测试样例集合T,将T发送给IO相关测试样例提取模块,方法是:
3.1测试样例生成模块使用Spex算法提取C中的配置项参数的语法类型和取值范围,提取出的语法类型分为四类:数值类型int、布尔类型bool、枚举类型enum、字符串类型string;
3.2测试样例生成模块为C生成配置项参数待测值集合V,V={V1,V2,…,Vi,…,VI},其中为ci的一个取值,Ki为测试样例生成模块为ci生成的值的个数;
3.3对V1,V2,…,Vi,…,VI取笛卡尔积,得到笛卡尔积VCartesian,VCartesian=V1×V2×…×VI;
3.4测试样例生成模块采用性能测试工具生成测试命令,方法为:采用pair-wise方法对性能测试工具的参数进行配置,性能测试工具输出测试命令,得到测试命令集合B={b1,b2,b3,…,by,…,bY},1≤y≤Y,Y为B中测试命令的个数,by为B中第y个测试命令;
3.5测试样例生成模块生成测试样例集合T,T=B×VCartesian={t1,t2,t3,…,ts,…,tS},1≤s≤S,ts为一个二元组,其中,的含义是:ci的取值为Vi中的第h个值S为T中测试样例的个数,为c1的第u个可能取值,为ci的第h个可能取值,为cI的第j个可能取值,K1、Ki、KI分别为Spex算法提取到的配置项参数c1、ci、cI的可能取值的个数,且K1、Ki、KI均为正整数,1≤u≤K1,1≤h≤Ki,1≤j≤KI;将T发送给IO相关测试样例提取模块;
第四步,IO相关测试样例提取模块根据C和T以及待检测数据库软件源代码F识别IO相关配置项,生成IO相关配置项集合C‘和IO相关测试样例集合T‘,将C‘发送给不适配问题检测模块,结合待检测数据库负载命令集合W和硬件设备集合D生成最终的测试样例集合T‘’,将T‘’发送给运行时数据采集模块,方法为:
4.1确定与IO相关的配置项的关键特征,关键特征为:与IO相关的配置项的值修改时,会影响IO相关的系统调用的调用次数;
4.2识别IO相关的系统调用,方法为:
4.2.1通过阅读Linux内核的官方手册,调查每一个系统调用,得到影响IO的系统调用信息;
4.2.2对4.2.1得到的系统调用进行交叉检查,过滤掉影响数据库软件IO大小的系统调用,剩余的作为IO相关的系统调用,这些系统调用进一步分为四个系列:1)读系列,2)写系列,3)同步系列,以及4)控制线程/进程数量的系统调用;
4.3识别IO相关的配置项,得到IO相关的配置项参数集合C′,C′={c‘1,c‘2,…,c’m,…,c‘M},M为C′中IO相关配置项的个数,1≤m≤M≤I,其中c’m是第m个IO相关配置项,方法为:
4.3.1定位配置对应的程序变量,读入被检测数据库软件的配置项列表,配置项列表存储有配置项参数,配置项变量二元对列表,所述配置项变量是配置项在源代码中定义的变量;从被检测数据库软件的配置项列表得到被检测数据库软件的源代码F中所有的配置项参数和对应配置项变量二元对集合CS,CS={c1,cv1,c2,cv2,…,ci,cvi,…,cI,cvI},其中ci为CS中第i个配置项参数,cvi为ci在F中对应的配置项变量,ci与cvi二元对关系通过从软件源码中自动寻找配置参数对应配置变量方法建立,I为F中配置参数总数,1≤i≤I;
4.3.2确定CS中的配置项变量和IO相关的系统调用是否有连接,得到IO相关的配置项参数集合C′,方法为:
4.3.2.1使用LLVM编译器框架的Clang前端解析软件源码,生成软件源码对应的抽象语法树ASTroot,ASTroot中的每个节点表示F中的一种结构,且不同结构之间同样以树的结构表示相应从属关系;
4.3.2.2进行数据流连接,使用DG算法对CS中的配置项变量进行污点分析,得到IO相关的配置项参数集合C′,此时C′包括数据流连接找到的与IO相关系统调用有关的配置项参数;
4.3.2.3对F进行控制流连接;使用配置项依赖算法获取IO相关系统调用的即时的配置项依赖项,使用传递关系使配置项依赖可传递,分析C中I个配置项参数中是否有被IO相关系统调用所依赖的配置项参数,将C中被IO相关系统调用所依赖的配置项参数加入C′,此时C′包括数据流连接找到的与IO相关系统调用有关的配置项参数和控制流连接找到的IO相关系统调用所依赖的配置项参数;
4.4优化C′中IO相关配置项参数的测试样例,得到IO相关配置项的测试样例集合T′,方法为:
4.4.1将C′中配置项参数分为两种类型,一是控制IO并发性的配置项参数,二是控制IO定时的配置项参数;
4.4.2使用提取配置项约束的方法提取C′中配置项参数的约束;
4.4.3对IO相关配置项参数的值进行枚举,每次只改变C′中的一个配置项,得到IO相关的配置项参数待测值组合的集合V‘,V‘={V′1,V′2,…,V′e,…,V′E},1≤e≤E,其中为c’m在第e个配置项参数待测值组合中的取值;
4.4.4对于数据库软件中的从属配置项即一个配置项的值影响另一个配置项的值,查阅被检测数据库官方指南对于从属配置项的描述:如果官方指南对配置项c1的丛属配置项c2的描述为,“c2仅在c1打开时才生效”,则配置项参数值枚举时手动设置c2在c1打开时才进行赋值,转4.4.5;如果官方指南对配置项c1的丛属配置项c2的描述为,“c1仅在c2打开时才生效”,则配置项参数值枚举时手动设置c1在c2打开时才进行赋值,转4.4.5;
4.4.5对B与V‘取笛卡尔积,得到IO相关配置项的测试样例集合T′,T′={t‘1,t‘2,…,t‘n,…,t‘N},1≤n≤N,N是T′中测试样例的个数,t‘n是测试命令和IO相关配置项参数赋值指令的集合组成的二元组,
4.5根据待检测数据库负载命令集合W、待检测数据库硬件设备集合D,以及4.4.5中得到的T′生成有负载命令、测试命令、配置组合和硬件设备的测试集合T″,方法为:
4.5.1读取待检测数据库负载命令集合W,W={w1,w2,…,wq,…,wQ},Q是待检测数据库用于测试的负载命令总数,wq是W中第q条负载命令,读取待检测数据库硬件设备集合D,D={d1,d2,…,dp,…,dP},P是待检测数据库用于测试的硬件设备总数,d是D中第d个硬件设备;
4.5.2初始化变量q=1;
4.5.3从W获取第q条负载命令wq;
4.5.4初始化变量n=1;
4.5.5从T′读取第n个二元组t‘n;
4.5.6将wq和t‘n并成一个二元组(wq,t‘n);
4.5.7初始化变量p=1;
4.5.8从D中获取第p个硬件设备dp;
4.5.9将4.5.6得到的二元组(wq,t‘n)与dp合并成三元组(wq,t‘n,dp),插入测试样例集合T″;
4.5.10如果p≤P,令p=p+1,转4.5.8;如果pP,转4.5.11;
4.5.11如果n≤N,令n=n+1,转4.5.5;如果nN,转4.5.12;
4.5.12如果q≤Q;令q=q+1,转4.5.3;如果qQ,转4.5.13;
4.5.13得到有负载命令、测试命令、配置组合和硬件设备的测试集合T″,T″={(w1,t‘1,d1),(w1,t‘1,d2),…,(wq,t‘n,dp),…,(wQ,t‘N,dP)},将T″中三元组用t″表示,则T″={t″1,t″2,…,t″a,…,t″A},1≤a≤A,A=Q×N×P,将T″发送给运行时数据采集模块;
第五步,运行时数据采集模块执行T″中的测试样例,在测试样例执行过程中采集运行时内核数据,得到测试结果集合G并将G发送给不适配问题检测模块,方法为:
5.1运行时数据采集模块执行T″中的测试样例,使用linux内核中的eBPF工具监测内核,得到输出集合Out,Out={[t″1,R1],…,[t″a,Ra],…,[t″a,RA]},其中,二元组[t″a,Ra]的第一个元素t″a为测试样例,第二个元素Ra为执行t″aH次得到的运行时数据集合,H为正整数,是第repeat次重复执行的运行时数据,1≤repeat≤H,a1≤arepeat≤aH,aH是Ra中运行时数据的个数,为四元组(IO-size,IO-offset,queue-utilization,cpu-utilization),是一段观测时间s内检测得到的,IO-size是s时间内,配置项改变前后,产生的IO的大小分布;IO-offset是s时间内,配置改变前后,随机和顺序IO的比例;queue-utilization是s时间内,配置改变前后,IO队列的利用率;cpu-utilization是s时间内,配置改变前后,cpu的利用率;
5.2运行时数据采集模块将Out依据测试样例进行分组,方法是:
5.2.1初始化变量a=1;
5.2.2若[t″a,Ra]已被分组,则令a=a+1,转5.2.2;否则转5.2.3;
5.2.3将[t″a,Ra]按ta中的三元组取值和测试命令进行分组,即[t″a,Ra]与{[t″1,R1],…,[t″a,Ra],…,[t″a,RA]}中,若t″a和t″a′同时满足以下3个条件,则将[t″a,Ra],[t″a′,Ra′]组成一组:
条件1,t″a和t″a′仅有某一个配置项c’m,的取值不同,1≤m≤M;
条件2,测试命令均为
条件3,[t″a,Ra],[t″a′,Ra′]未被分组;
令与[t″a,Ra]满足以上条件的共有Numa个,即分为一组,记为Group(m,y),其中,1≤a',a”,…,a*≤A,Numa为正整数,Numa的大小与c’m的类型有关:若c’m为布尔类型,则Numa=2;若c’m为枚举类型,则Numa=Km;若c’m为数值类型,则Numa=6;若c’m为字符串类型,则Numa=1;
5.2.4若a=A,表示分组完成,得到分组后的测试结果集合G={Group(1,1),Group(1,2),…,Group(1,Y),…,Group(m,y)…,Group(M,Y)},转5.3;否则令a=a+1,转5.2.2;
5.3运行时数据采集模块将测试结果集合G发送给不适配问题检测模块;
第六步,不适配问题检测模块根据IO相关的配置项集合C′以及测试结果集合G,使用假设检验的方法判别待检测软件是否存在缺陷,方法为:遍历G中每一个分组,使用假设检验的方法判别待检测数据库软件是否存在缺陷:
6.3.1初始化变量m=1;
6.3.2初始化变量y=1;
6.3.3如果Group(m,y)中二元组数目大于一个,转6.3.4;否则转6.3.9;
6.3.4读取Group(m,y)中的前两个二元组,用[t″a,Ra]和[t″a′,Ra′]表示;
6.3.5若为情况(1)且c’m在t″a中的值大于cm在t″a′中的值,设定待验假设H0:Ra≤Ra',转6.3.8,所述情况(1)为:若任意一IO相关配置项c’m调节的性能预期为性能提升,若实际测试结果为小IO增加,数据库软件性能下降,则数据库软件存在IO大小不适配导致的性能问题;
6.3.6若为情况(2)且c’m在t″a中的值为1,c’m在t″a′中的值为0,设定待验假设H0:5·Ra≤Ra',转6.3.8,所述情况(2)为:若调节c’m的性能预期为性能合理下降,若实际测试结果为小IO增加,数据库性能大幅下降,则数据库软件存在IO大小不适配导致的性能问题;
6.3.7若为情况(3),即若调节c’m的性能预期为性能不变,若实际测试结果为小IO增加,数据库软件性能下降,则数据库软件存在IO大小不适配导致的性能问题,设定待验假设H0:Ra≠Ra',转6.3.8;
6.3.8若假设检验结果表明H0被拒绝,即使用假设检验方法计算得到的被拒绝概率≥1-β,表明数据库存在由IO大小不匹配导致的数据库软件性能问题,与配置项c’m有关且触发该缺陷的测试命令为β为假设检验参数,为小于1的正实数;
6.3.9若y=Y,转6.3.10;否则令y=y+1,转6.3.3;
6.3.10若m=M,得到全部由IO大小不匹配导致的数据库软件性能问题,结束检测;否则令m=m+1,转6.3.2。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国人民解放军国防科技大学,未经中国人民解放军国防科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202310375345.4/1.html,转载请声明来源钻瓜专利网。





