一种服务器上数据库兼容性的测试的装置及方法 【技术领域】
本发明涉及数据库领域,尤其涉及一种服务器上数据库兼容性测试的装置及方法。
背景技术
当前,由于硬件产品和软件更新的不同步以及软件产品的性能功能表现依赖于硬件平台的支持的问题,这些都要求高端服务器研发人员在对服务器设计研发过程中需要对不同版本不同平台的关系型数据库产品进行兼容性测试,以确保该数据库产品能够在高端服务器平台上兼容。另外,在服务器采购的竞标型测试或者新产品测试过程中,客户需要了解基于某个应用的数据库产品在该服务器平台上的性能表现,判定新硬件平台能否满足客户业务的需要和选择数据库产品时该硬件平台能否支持。
现有的技术中往往通过一个模型数据进行模拟,不能代表实际意义,所得测试结果与实际偏离较大,参考价值有限;而且实现时只能按照固定参数进行。另外,现有技术中不能对数据库的容错性能进行测试。
【发明内容】
本发明要解决的技术问题是提供一种服务器上数据库兼容性测试的技术方法,及时、准确、灵活性强、不需要人值守,能基于真实的数据库协议进行测试。
为了解决上述问题,本发明提供了一种服务器上数据库兼容性测试的装置,包括:建库模块、功能组件测试模块、容错模块、压力测试模块及数据收集模块;
所述建库模块用于在服务器上进行建库,并采用生成的数据或实际数据进行数据库的数据填充,完成后启动所述功能组件测试模块;
所述功能组件测试模块用于模拟数据库管理员的操作对数据库所提供的功能组件进行调整测试;测试完毕后启动所述容错模块或压力测试模块;
所述容错模块用于删除所述数据库中的数据,并测试删除后数据库是否能访问,以及是否能恢复;如果由压力测试模块启动,则测试完毕后启动所述数据收集模块,如果由功能组件测试模块启动,则测试完毕后启动所述压力测试模块;
所述压力测试模块用于模拟多个客户端对所述数据库的访问,以测试服务器的极限性能,测试硬件平台所能提供的最大并发数和事务处理能力;如果由容错模块启动,则测试完毕后启动所述数据收集模块,如果由功能组件测试模块启动,则测试完毕后启动所述容错模块;
所述数据收集模块用于根据所述功能组件测试模块、容错模块及压力测试模块的测试结果,判断所建立的数据库与所述服务器是否兼容。
进一步地,所述建库模块具体包括:
文件创建单元、用户管理单元及数据生成单元;
所述文件创建单元用于根据硬件配置确定数据库表空间及数据文件的分布,然后创建表空间和数据文件,创建完毕后启动所述用户管理单元;
所述用户管理单元用于创建进行用户访问的用户,并赋予相应的权限;完成后启动所述数据生成单元;
所述数据生成单元用于进行数据的加载;利用系统数据生成器自动生成测试数据,或直接加载用户的真实数据。
进一步地,所述功能组件测试模块具体包括:
参数测试单元、语句测试单元、接口测试单元及模式切换测试单元;
所述参数测试单元用于进行内存参数的调整并测试,以及测试锁数量、后台进程数据量、日志模式,测试完毕后启动所述语句测试单元;
所述语句测试单元用于在数据库临时表空间区进行数据库的DDL和DML语句测试;测试完毕后启动所述接口测试单元;
所述接口测试单元用于对数据库数据进行存储过程、触发器函数等接口的测试,测试完毕后启动所述模式切换测试单元;
所述模式切换测试单元用于保存不同数据库协议对应的切换模式,根据不同的协议选择对应的切换模式,在数据库底层调用存储过程或者函数直接切入到模式切换当中;然后系统睡眠一段时间后,再进行联机切换,模式切换完成通过数据传输查看日志验证是否成功。
进一步地,所述容错模块具体包括:
数据损坏测试单元及恢复测试单元;
所述数据损坏测试单元用于以root身份强制删除数据文件,查看数据库是否能对外提供访问;根据建库模块中创建的用户名密码进行非交互式登录验证,同时将反馈结果输出的错误数据流中,如果错误日志非空,则表明破坏性测试成功;完毕后启动所述恢复测试单元;
所述恢复测试单元用于对数据文件利用备份数据对数据库执行全库冷恢复;在进行恢复完成后,进行数据恢复成功的验证,首先根据数据建库模块的统计数据存放到结构体中,该结构体包含数据量大小,表的个数,每个表中的记录数成员变量,通过对恢复前和恢复后的结构体进行比较来判定数据恢复是否成功。
进一步地,所述压力测试模块具体包括:
加压测试单元及性能收集单元;
所述加压测试单元用于建立一个并发请求发送梯度数组和每个请求所携带的客户访问量,根据数组中的记录并发的发送请求,然后请求所述性能收集单元指示;根据所述性能收集单元的继续指示,按照预定的步长递增生成访问的请求数量,并请求所述性能收集单元指示;根据所述性能收集单元的停止指示,保存当前的访问请求的个数作为最大并发数;
所述性能收集单元用于监控所述服务器中各资源的利用率,包括处理器,磁盘,内存,磁盘IO使用情况;当收到所述加压测试单元的请求后,如果所述利用率为递增状态,则发送继续指示给所述加压测试单元,否则发送停止指示,并保存当前的利用率。
本发明还提供了一种服务器上数据库兼容性测试的方法,包括:
A、在服务器上进行建库,并采用生成的数据或实际数据进行数据库的数据填充;
B、模拟数据库管理员的操作对数据库所提供的功能组件进行调整测试;先进行C1、C2中任一步,完成后进行另一步,C1、C2都完成后进行D;
C1、删除所述数据库中的数据,并测试删除后数据库是否能访问,以及是否能恢复;
C2、模拟多个客户端对所述数据库的访问,以测试服务器的极限性能,测试硬件平台所能提供地最大并发数和事务处理能力;
D、根据所述功能组件测试模块、容错模块及压力测试模块的测试结果,判断所建立的数据库与所述服务器是否兼容。
进一步地,所述步骤A具体包括:
根据硬件配置确定数据库表空间及数据文件的分布,然后创建表空间和数据文件;
创建进行用户访问的用户,并赋予相应的权限;
进行数据的加载;利用系统数据生成器自动生成测试数据,或直接加载用户的真实数据。
进一步地,所述步骤B具体包括:
进行内存参数的调整并测试,以及测试锁数量、后台进程数据量、日志模式;
在数据库临时表空间区进行数据库的DDL和DML语句测试;
对数据库数据进行存储过程、触发器函数等接口的测试;
保存不同数据库协议对应的切换模式,根据不同的协议选择对应的切换模式,在数据库底层调用存储过程或者函数直接切入到模式切换当中;然后系统睡眠一段时间后,再进行联机切换,模式切换完成通过数据传输查看日志验证是否成功。
进一步地,所述步骤C1具体包括:
以root身份强制删除数据文件,查看数据库是否能对外提供访问;根据步骤A中创建的用户名密码进行非交互式登录验证,同时将反馈结果输出的错误数据流中,如果错误日志非空,则表明破坏性测试成功;
对数据文件利用备份数据对数据库执行全库冷恢复;在进行恢复完成后,进行数据恢复成功的验证,首先根据数据建库模块的统计数据存放到结构体中,该结构体包含数据量大小,表的个数,每个表中的记录数成员变量,通过对恢复前和恢复后的结构体进行比较来判定数据恢复是否成功。
进一步地,所述步骤C2具体包括:
建立一个并发请求发送梯度数组和每个请求所携带的客户访问量,根据数组中的记录并发的发送请求;监控所述服务器中各资源的利用率,包括处理器,磁盘,内存,磁盘IO使用率;
如果所述利用率为递增状态,则按照预定的步长递增生成访问的请求数量,否则保存当前的利用率,保存当前的访问请求的个数作为最大并发数。
本发明的技术方案可以根据用户的业务数据灵活的定制数据库的业务模型,保证较好的反映硬件平台所提供的数据库性能,能最大可能地覆盖数据库兼容性测试的所有空间,基于真实的数据库协议进行测试,具有测试范围广,测试数据准确的特点;基于模块化设计,可移植性强;可以针对不同的业务应用进行性能模拟测试,根据用户的业务需求动态修改,实现灵活;基于标准的shell脚本实现,自动化程度高,几乎不需要测试人员干预;具备内存参数调整、数据库模式切换和容错测试功能;及时性准确性主要表现在采用数据动态加载和卸载的方法实现基于主流数据库协议进行测试,实现过程中,用户可以利用生产库中的数据进行加载测试,可以准确反映该数据库在linux高端容错服务器平台上的兼容性问题;本发明的技术方案适合于高端容错服务器研发人员通过该技术方案快速定位硬件平台与数据库平台的兼容性问题,同时又适合于测试人员评估系统平台的整体性能,譬如数据库的并发数,事物处理能力等等,以便查找系统性能瓶颈,释放整个平台的性能。
【附图说明】
图1为实施例一的数据库兼容性测试的装置的示意框图。
【具体实施方式】
下面将结合附图及实施例对本发明的技术方案进行更详细的说明。
需要说明的是,如果不冲突,本发明实施例以及实施例中的各个特征可以相互结合,均在本发明的保护范围之内。另外,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
实施例一,一种服务器上数据库兼容性测试的装置,如图1所示,包括:
建库模块、功能组件测试模块、容错模块、压力测试模块及数据收集模块;
所述建库模块用于在服务器上进行建库,并采用生成的数据或实际数据进行数据库的数据填充,完成后启动所述功能组件测试模块;
所述功能组件测试模块用于模拟数据库管理员的日常操作对数据库所提供的功能组件进行调整测试,以验证数据库功能组件能否正常运行;测试完毕后启动所述容错模块或压力测试模块;
所述容错模块用于删除所述数据库中的数据,并测试删除后数据库是否能访问,以及是否能恢复,以模拟介质故障和数据灾难发生时,实施数据挽救和恢复,测试数据库的容错性;如果由压力测试模块启动,则测试完毕后启动所述数据收集模块,如果由功能组件测试模块启动(此为图1中所示的情况),则测试完毕后启动所述压力测试模块;
所述压力测试模块用于模拟多个客户端对所述数据库的访问,以测试服务器的极限性能,测试硬件平台所能提供的最大并发数和事务处理能力;如果由容错模块启动,则测试完毕后启动所述数据收集模块,如果由功能组件测试模块启动,则测试完毕后启动所述容错模块;
所述数据收集模块用于根据所述功能组件测试模块、容错模块及压力测试模块的测试结果,判断所建立的数据库与所述服务器是否兼容。如果兼容,则说明兼容性测试通过,否则说明未通过。
本实施例中,所述服务器为linux高端容错服务器,所述数据库为关系型数据库。实际应用中,也适合于其他的服务器平台和数据库。
本实施例中,所述建库模块根据所要测试的数据库类型,按照数据库的基准规模进行建库。
本实施例中,所述功能组件测试模块还可以对其它一些相关参数进行测试;进一步地还可以调动态修改配置参数文件、数据库运行模式及模拟数据库的DDL操作和DML操作等业务逻辑,尽最大可能覆盖关系型数据库所能提供的功能空间。
本实施例中,所述建库模块具体可以但不限于包括:文件创建单元、用户管理单元及数据生成单元。
所述文件创建单元用于在服务器和操作系统完全配置完毕的前提下,根据硬件配置(包括磁盘、处理器、内存等详细信息)确定数据库表空间及数据文件的分布,然后创建表空间和数据文件(比如对于关系型数据库,可利用其提供的sql可执行文件创建),创建完毕后启动所述用户管理单元;
所述用户管理单元用于创建进行用户访问的用户,并赋予相应的权限,譬如connect、resource、DBA权限等;完成后启动所述数据生成单元;
所述数据生成单元用于进行数据的加载;所述数据加载包括两种方式,一是可以利用系统数据生成器自动生成测试数据,也可以通过用户选择的方法直接加载用户的真实数据,通过加载用户的真实数据,可以真实反应用户的实际业务情况,使数据类型更能反应真实业务需求;用户的真实数据采用文本文件的格式存储。
本实施例中,所述功能组件测试模块具体可以但不限于包括:参数测试单元、语句测试单元、接口测试单元及模式切换测试单元。
所述参数测试单元用于进行内存参数的调整并测试,以及测试锁数量、后台进程数据量、日志模式等参数,测试完毕后启动所述语句测试单元;
锁数量,后台进程数据量,日志模式等参数的调整是直接在线调整。
在调整内存参数的过程中,首先获取整个各系统的主要硬件配置(处理器,内存)以及各资源占用情况,然后根据内置的规则建立一个阈值数组,在数组中保存每次参数调整的具体值,顺序进行调整。其中的规则可以按照初始态,在保证处理器利用率小于40%的阈值时,调整数据缓冲区为内存总量的50%,日志缓冲区,共享区页进行相应加大,具体加大的数值依赖于采用的算法是平均置法还是调整步长方法。在结束态设置规则为处理器利用率小于80%,数据库共享内存占系统内存的80%时停止调整。在数组每下移一次,读取一个值时,系统自动调用触发器进行调整测试状态改变,同时将结果记录到日志文件中。具体规则的设置依赖于测试的需求。
所述语句测试单元用于在数据库临时表空间区进行数据库的DDL和DML语句测试;这样的好处是不影响数据库的测试数据,数据库重启后临时表空间数据自动撤销;测试完毕后启动所述接口测试单元;
所述接口测试单元用于对数据库数据进行存储过程、触发器函数等接口的测试,测试完毕后启动所述模式切换测试单元;
所述模式切换测试单元用于保存不同数据库协议对应的切换模式,根据不同的协议选择对应的切换模式,在数据库底层调用存储过程或者函数直接切入到模式切换当中;然后系统睡眠一段时间后,再进行联机切换,模式切换完成通过数据传输查看日志验证是否成功;此过程中需要不断重启数据库。
数据库的模式切换测试主要是考虑到数据库可以以不同的模式运行,譬如informix数据库可以运行在静态、单用户、联机模式,而oracle可以运行在nomount、mount、open这三种模式;数据库能够运行在不同的状态下对于容错服务器是至关重要的,它为后期故障的修复、数据恢复提供了一个外界接口。
实际应用中,上述几个单元的启动顺序也可以调换。
本实施例中,所述容错模块具体可以但不限于包括:数据损坏测试单元及恢复测试单元;
所述数据损坏测试单元用于以root身份强制删除数据文件,查看数据库是否能对外提供访问;具体是通过在shell中嵌入访问数据库的接口,譬如测试oracle,调用sqlplus,测试informix数据库,调用DB-access,然后根据建库模块中创建的用户名密码进行非交互式登录验证,同时将反馈结果输出的错误数据流中,如果错误日志非空,则表明破坏性测试成功;完毕后启动所述恢复测试单元;
所述恢复测试单元用于对数据文件执行在线恢复,主要是利用备份数据对数据库执行全库冷恢复,在进行恢复完成后,进行数据恢复成功的验证,数据验证只进行大体校验:首先根据数据建库模块的统计数据存放到结构体中,该结构体主要包含数据量大小,表的个数,每个表中的记录数成员变量,通过对恢复前和恢复后的结构体进行比较来判定数据恢复是否成功。
本实施例中,所述压力测试模块具体可以但不限于包括:加压测试单元及性能收集单元。
所述加压测试单元用于建立一个并发请求发送梯度数组和每个请求所携带的客户访问量,根据数组中的记录并发的发送请求,然后请求所述性能收集单元指示;根据所述性能收集单元的继续指示,按照预先设计的步长递增生成访问的请求数量,并请求所述性能收集单元指示;根据所述性能收集单元的停止指示,保存当前的访问请求的个数作为最大并发数;
所述性能收集单元用于监控所述服务器中各资源的利用率,包括处理器,磁盘,内存,磁盘IO使用情况,并可以进一步生成报警日志;当收到所述加压测试单元的请求后,如果所述利用率为递增状态,则发送继续指示给所述加压测试单元,否则发送停止指示,并保存当前的利用率。
所述加压测试单元可以根据用户的实际业务需求,嵌入内置的sql语句、存储过程、函数等业务逻辑,利用shell端模拟多个客户的访问来实施对数据库服务器进行加压,测试该系统平台的最大并发数和事务处理能力。
本实施例中,所述数据收集模块可以建立一个标准的错误输出信息表,表中主要包含错误序号ID和错误内容和可能原因及备注四列内容,错误序号主要来自于数据库中到处的标准错误,然后根据错误信息录入该表中,形成一个标准的错误信息表,系统的每次输出到日志中的错误值都会包含错误序号,通过过滤日志中的错误需要与标准错误输出信息表中记录的错误序号进行比较,然后定位问题,根据标准错误输出信息表中错误号对应的错误内容列中的提示信息,譬如,在informix数据库测试中,错误号ID对应-1810,错误内容为:Disconnect error,可能原因列内容为:A DISCONNECT ALLstatement has not disconnected a connection.Thedatabase server for one of theconnections might have terminated.If not,the cause is internal to the software.Ifthe error recurs,please note allcircumstances,and contact the Informix TechnicalSupport Department.然后可以根据可能原因中的提示定位问题。
确定该关系型数据库在linux高端容错服务器平台上兼容性测试是否通过。在数据库中建立一个测试结果正确的输出表,该表中包含记录号ID和成功提示两列,譬如informix数据库中,ID号为0,成功提示内容为:Success,The operation succeeded.The database server returns thisSQLCODEvalue to an application when an SQL statement executes successfully,通过比较测试结果正确输出表,判定测试成功执行到具体阶段,从而判定关系型数据库在linux高端容错服务器台上的兼容性测试是否通过。
实施例二、一种服务器上数据库兼容性测试的方法,包括:
A、在服务器上进行建库,并采用生成的数据或实际数据进行数据库的数据填充;
B、模拟数据库管理员的操作对数据库所提供的功能组件进行调整测试;先进行C1、C2中任一步,完成后进行另一步,C1、C2都完成后进行D;
C1、删除所述数据库中的数据,并测试删除后数据库是否能访问,以及是否能恢复;
C2、模拟多个客户端对所述数据库的访问,以测试服务器的极限性能,测试硬件平台所能提供的最大并发数和事务处理能力;
D、根据所述功能组件测试模块、容错模块及压力测试模块的测试结果,判断所建立的数据库与所述服务器是否兼容。
本实施例中,所述步骤A具体包括:
根据硬件配置确定数据库表空间及数据文件的分布,然后创建表空间和数据文件;
创建进行用户访问的用户,并赋予相应的权限;
进行数据的加载;利用系统数据生成器自动生成测试数据,或直接加载用户的真实数据。
本实施例中,所述步骤B具体包括:
进行内存参数的调整并测试,以及测试锁数量、后台进程数据量、日志模式;
在数据库临时表空间区进行数据库的DDL和DML语句测试;
对数据库数据进行存储过程、触发器函数等接口的测试;
保存不同数据库协议对应的切换模式,根据不同的协议选择对应的切换模式,在数据库底层调用存储过程或者函数直接切入到模式切换当中;然后系统睡眠一段时间后,再进行联机切换,模式切换完成通过数据传输查看日志验证是否成功。
实际应用中,步骤B中几个步骤的顺序也可以调换。
本实施例中,所述步骤C1具体包括:
以root身份强制删除数据文件,查看数据库是否能对外提供访问;根据步骤A中创建的用户名密码进行非交互式登录验证,同时将反馈结果输出的错误数据流中,如果错误日志非空,则表明破坏性测试成功;
对数据文件利用备份数据对数据库执行全库冷恢复;在进行恢复完成后,进行数据恢复成功的验证,首先根据数据建库模块的统计数据存放到结构体中,该结构体包含数据量大小,表的个数,每个表中的记录数成员变量,通过对恢复前和恢复后的结构体进行比较来判定数据恢复是否成功。
本实施例中,所述步骤C2具体包括:
建立一个并发请求发送梯度数组和每个请求所携带的客户访问量,根据数组中的记录并发的发送请求;监控所述服务器中各资源的利用率,包括处理器,磁盘,内存,磁盘IO使用率;
如果所述利用率为递增状态,则按照预定的步长递增生成访问的请求数量,否则保存当前的利用率,保存当前的访问请求的个数作为最大并发数。
下面用一个具体的例子进行说明;首先设计主要接口如下:
建库模块CreateDbspaces.sh,功能是根据高端容错服务器磁盘的容量、数量以及用户要求建立的测试规模,创建表空间和数据文件。
入口参数:磁盘数量、容量、是否raid,raid级别,数据库基准规模
出口参数:成功0,失败1。
功能组件测试模块FunctionTest.sh,功能是对数据库的内存参数、日志模式、及其它参数进行在线修改;
主要依赖于测试的要求,编写sql语句,直接在脚本中调用。
譬如:
Create table tablename(col1 datatype,col2 datatype,....)in dbspace;
Select * from tablename where col=.....
Delect from tablename where col=....
Insert into tablename(col1,col2,...)values(val1,val2...)
Alter table tablename add(col datatype)
Alter table tablename modify(col datatype)
....
Function testfuc(datatype in...Datatype out...)
Return val
....
容错模块TolerTest.sh,可调用rm功能,强制删除容错文件,恢复删除的容错文件,整库删除数据文件,然后利用全库0级备份进行系统恢复验证;利用关系型数据库所提供的备份恢复工具进行恢复测试,可以在该模块中直接调用restore,revocer,ontape等等。
压力测试模块BenchTest.sh,首先通过在循环语句中调用大量耗费系统资源的内置函数进行测试,使系统处理能力短时间内达到峰值,实现对数据库的加压测试;其次通过广播嵌入到用户实际业务的应用脚本模拟多客户端加压,测试数据库的最大并发数和事务处理能力。
数据收集模块Display_result.sh,首先收集利用Spotlight监控到的性能数据;其次,读取数据库在线系统生成的数据库报警日志和操作系统生成的日志,进行分析,定位问题,确定该关系型数据库兼容性是否通过。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明的权利要求的保护范围。