面向SQLite的TPC-E基准测试系统的设计与实现
2018-08-21王龙翔魏晓林陈跃辉董小社
王龙翔,魏晓林,陈跃辉,刘 成,董小社
(西安交通大学 电子与信息工程学院,陕西 西安 710049)
0 引 言
在信息化时代下,数据呈现爆发式增长,如何能够快速地挖掘出有价值的信息,成为当今社会信息化发展的重要问题。数据库技术作为信息化发展的核心技术,如何选择合适的数据库技术以及采取什么样的标准来衡量数据库的性能,成为了信息化时代亟需解决的重要问题。
事务处理性能委员会[1],即TPC(transaction processing performance council)[2]组织制定了一系列的性能评测标准[3],从此性能评测体系逐渐统一化和规范化[4-6]。TPC-E是其组织发布的最新OLTP性能评测基准。目前在TPC-E负载下,存在H-store、MySQL等不同类型数据库的评测系统,但是这些数据库的测试系统都不具备可移植性。
SQLite数据库是最典型的嵌入式轻量级数据库,具有文件数据库特性和内存数据库特性,目前广泛应用于各类应用系统中[7-12]。因此,对SQLite性能进行评价对于实际应用系统具有十分重要的参考价值。然而,目前缺少面向SQLite数据库的TPC-E实现及相应研究。
针对上述问题,设计和实现了面向SQLite的TPC-E基准测试系统。该系统能够在TPC-E负载下完成对SQLite文件数据库特性和内存数据库特性的事务处理性能评测功能。通过对数据的分析,客观真实地给出在TPC-E负载下SQLite两种数据库特性下的事务处理性能测试数据。
1 相关技术研究
1.1 嵌入式数据库系统研究
在一些系统的软硬件资源紧张的应用下,重量级的数据库系统如Oracle的基本特性不能很好地得到应用,而基于磁盘文件的轻量级数据库系统[13]如SQLite就能发挥其明显的优势,保持了数据库的基本特性[14]。
嵌入式轻量级SQLite数据库管理系统是用C语言实现的一款开源的嵌入式数据库引擎。SQLite数据库引擎具有很多突出的优点,如可嵌入、可支持大部分的SQL92标准以及计算机语言、零配置、在任何两种不同的操作系统上具有可移植性和独立性强等。
1.2 数据库性能测试基准TPC-E
TPC-E是由TPC组织在2007年发布的最新的OLTP测试模型,以纽约交易所为模型。TPC-E测试基准用于替代目前被大家所公认和普遍使用的TPC-C。TPC-E规定了一个比较全面的商业模式,能够涵盖目前几乎所有的交易种类。
TPC-E测试基准的工作负载集中体现在三种范畴的交易行为,分别是普通客户交易范畴、股票市场交易范畴和经纪人交易范畴,共包含了33张表和12种事务。
2 系统设计与实现
2.1 测试系统设计思路和目标
根据TPC-E测试模型,对面向SQLite的TPC-E基准测试系统整体框架进行设计,同时严格按照规范文档中限定的各个功能模块的描述和SQLite数据库的特性,进行基准测试系统客户端的详细设计。文中的基准测试系统采用的是经典的C/S体系架构。通过模拟证券交易所的用户功能,从客户端提出服务请求,访问服务器。服务器处理用户请求并将处理的结果返回,同时该测试系统还需要记录该基准测试系统在整个运行过程中各个事务执行的性能指标信息。该基准测试系统主要包括客户端和后台服务器两部分,其中客户端主要负责测试系统的参数配置、数据装载、事务生成、事务的发送与接收和运行指标信息统计和打印。
设计出来的面向SQLite的TPC-E基准测试系统,应具备SQLite文件数据库特性和内存数据库特性在TPC-E负载下的事务处理性能评测功能,能够客观真实地评测出嵌入式数据库SQLite的两种数据库在TPC-E负载下的事务处理性能。同时设计方案简单高效,系统功能满足鲁棒性和完整性等要求。
2.2 系统体系架构
面向SQLite的TPC-E基准测试系统的体系架构如图1所示,主要由驱动器(Driver)和待测系统(SUT)组成。图中用四种符号标示不同的内容:黑色加粗横线表示TPC定义接口;加下划线的部分表示必须由TPC-E测试的主办方实现;字体加粗加黑的部分表示TPC官方提供的程序,在测试中强制要求使用;斜体字部分表示商用的组件,例如数据库管理系统、数据库驱动程序。
图1 基准测试系统的体系架构
通过对TPC-E基准文档的研究和TPC所提供的EGen程序包中实现的功能分析,可知测试实现的内容主要包含如下几个方面:
(1)驱动和报告:驱动器端的驱动与报告由两部分功能模块实现,分别是总控模块和基准测试运行结果数据的统计与输出模块。其中总控模块的功能有读取配置参数、建立事务缓冲队列、网络连接和创建工作线程等;基准测试运行结果数据的统计与输出模块是对基准测试系统测试运行过程中保存的各种测试指标数据进行统计,并在测试运行结束后输出统计的指标数据。
(2)CE、MEE和DM:主要作用是模拟事务的生成。该部分的功能由TPC组织提供的EGen程序包实现。EGen程序包中的EGenDriverCE、EGenDriverMEE和EGenDriverDM分别实现客户模拟驱动器、市场模拟驱动器和数据维护驱动器的功能。事务生成的模式是通过随机事务类型生成方式。EGen只提供事务类型生成功能,而事务内部的逻辑事务帧功能,就需要测试主办者自己根据待测系统的特征进行设计。
(3)驱动链接器:主要作用是将随机事务类型结构体不断发送到待测系统,同时接收反馈信息。
(4)事务连接器:主要作用是通过网络接收驱动器层的消息指令,启动特定事务的执行,并将事务执行的结果信息传输到驱动器层。
(5)事务帧执行器:主要任务是调度选定的随机事务对应的底层数据库的存储过程,传入信息,同时获取返回信息。
(6)数据库逻辑:根据测试主办者所写的事务帧逻辑进行测试,比如存储过程。
2.3 TPC-E基准事务设计
TPC-E基准规范中定义了12种事务,其中每一个事务都是由一个或者多个带参数输入和输出的事务帧,按照一定的逻辑关系组成。事务帧是指数据库管理系统的单个存储过程。12种事务中有10种事务是常规类事务类型,其中有8种事务是由证券公司启动执行的,2种事务是由交易所启动执行的;还有2种事务是通过设定固定时间间隔机制,进行自动启动,执行清理程序(Trade_Cleanup)和数据维护类程序(Data_Maintenance),完成所有的数据库表数据的检查和更新操作。
2.4 面向SQLite的TPC-E基准测试系统驱动器设计
驱动器部分的功能实现是面向SQLite的TPC-E基准测试系统的核心问题,在基准测试系统的逻辑架构中,驱动器的功能可以划分为总控制模块、参数配置模块、数据装载模块、事务生成模块、事务发送与响应接收和测试指标信息统计与打印模块等。这些功能模块共同完成了面向SQLite的TPC-E基准测试系统Driver的功能。下面就这些功能模块的详细设计进行介绍。
2.4.1 总控制模块
总控制模块是在整个基准测试系统中主要负责系统运行时间和规模等参数的输入,同时对驱动器的其他功能模块和SUT中客户和市场驱动器的运行调度和控制。
总控制模块根据输入的参数启动相应的功能模块的执行,同时向运行结果统计和打印模块、客户端的市场驱动模拟器和客户驱动模拟器发送启动指定,开始基准测试系统的测试工作,直到测试时间结束。最后总控制模块向测试系统指标信息统计与打印模块发送使能信号,将测试指标信息统计结果打印输出。
2.4.2 参数配置和数据装载
参数配置模块的主要功能是配置测试系统的运行参数。该模块为整个系统的执行生成了一个运行参数配置文件,信息配置模块响应总控模块的使能信号,完成配置文件的录入与导出操作[15]。
2.4.3 事务生成模块
事务生成模块的主要作用是通过事务模拟器对象生成随机事务信息结构体,然后将生成的随机事务信息结构体信息封装成对应事务对象,存放到相应的事务缓冲队列中,等待事务派发线程将其从事务缓冲队列中取出,并发送到SUT进行执行。事务生成模块共建立了三种事务模拟线程:CE事务模拟线程、DM事务模拟线程和MEE事务模拟线程,实现事务对象的生成,并且每一个事务模拟对象只对应一个FIFO的事务缓冲队列,用于存放事务对象。
2.4.4 事务发送与响应接收
事务发送和接收模块是通过多线程技术循环处理多个用户并发访问和反馈信息接收。其中每一个工作线程都代表一个用户。
2.4.5 测试指标信息统计和打印模块
指标信息统计和打印模块的主要功能是对面向SQLite的TPC-E基准测试系统的测试运行中的性能指标数据进行记录和统计,并在测试结束后将统计好的指标按照一定格式进行打印输出。
2.5 基准测试系统应用服务器设计
基准测试系统中,应用服务器主要负责Driver端与SUT端之间的通信,接收事务请求消息并驱动事务的执行,解析事务帧的逻辑并将其转化为数据库底层具体的信息存取操作,以及将事务操作的结果信息封装成响应消息,返回到Driver端。应用服务器端的设计分为三部分:事务接收模块、CE/MEE型事务帧的解析与发送和CE/MEE型事务执行模块。其中CE/MEE型事务帧的解析与发送是事务接收模块和CE/MEE型事务执行模块之间的桥梁。
2.6 系统实现
文中在浪潮服务器系统上实现了面向SQLite的TPC-E基准测试系统。测试程序分客户端驱动器层程序(Driver)和应用服务器层(SUT)两部分来实现。其中Driver程序是对客户类事务的操作功能进行模拟,产生随机事务信息结构体,并发送到SUT程序;应用服务器程序包括CEServer和MEEServer。应用服务器中的CEServer程序和MEEServer程序分别用来模拟证券公司的服务操作和交易所的服务操作。CEServer程序执行CE和DM对象产生的事务并返回执行结果信息;MEEServer程序执行MEE对象产生的事务并返回执行结果信息。而CEServer将Trade_Order事务的执行结果信息转换成事务类型信息结构体,存储在TMEEIndexTable,从而驱动MEEServer执行市场类事务。
TPC-E基准测试系统Driver的实现是根据2.1节测试系统的功能模块的设计思路,这里基于测试系统功能模块的总控制模块实现的详细说明,对面向TPC-E基准测试系统的功能模块的具体实现细节进行介绍。总控模块对整个测试过程的控制操作,具体分为四个部分:
(1)启动测试指标信息统计与输出模块,对测试结果进行统计,并利用Python语言进行打印输出;
(2)启动Driver层的随机事务生成模拟器,产生随机事务类型信息结构体;
(3)启动客户事务驱动模拟器和市场事务驱动模拟器,对事务进行帧解析和分发;
(4)启动数据库连接接口,接收上一层发来的逻辑事务帧,并对数据库进行存储操作。
应用服务器端(SUT)的作用是对接收到的事务逻辑请求进行处理,主要功能有事务执行参数接受、事务帧的逻辑解析、消息的接收与发送和数据库连接设置。根据应用服务器端设计,应用服务器端的实现也可以分为三部分:事务接收模块、CE/MEE型事务帧解析与发送和CE/MEE型事务执行模块。其中CE/MEE型事务帧的解析与发送的逻辑实现在TPC-E基准规范中已经给出,EGen程序包中的EGenTxnHarness程序已经给出了事务接收与执行模块的调用接口和事务执行顺序的程序。
3 实验结果与分析
3.1 测试参数配置
文中对两种特性下的参数配置进行了统一。SQLite在TPC-E负载下的规模参数配置如表 1所示。对该系统的功能和性能进行测试和验证。
表1 TPC-E基准测试系统的参数配置
3.2 文本数据库特性测试结果与分析
Trade_Result事务每秒所能执行的事务处理性能指标值的统计结果如图2所示。SQLite数据库在TPC-E负载下的性能指标tpsE的平均值为1.763 211。表明磁盘I/O是待测系统较为明显的瓶颈之一。
图2 性能指标统计结果(文本数据库)
在整个测试过程中,通过对这27个不同测试执行时间的性能进行了监控,这里选取了系统内存使用情况数据进行统计,分别选取了五组数据求平均值,以减少其他因素带来的误差。这些数据包括测试系统运行时使用的内存、空闲内存、交换区内存。具体的内存统计结果如图3所示。
图3 内存使用情况统计结果(文本数据库)
从以上对SQLite数据库的文件数据库特性在TPC-E负载下的功能测试结果可以得出,面向SQLite的TPC-E基准测试系统在文本数据库特性下,符合TPC-E基准规范的要求和SQLite文本数据库的性能标准,测试数据具有一定的参考价值和可靠性。同时从文件数据库特性的性能测试结果可以看出,内存利用平均值在3.5 G左右。
3.3 内存数据库特性测试结果与分析
通过对测试结果的统计,SQLite内存数据库特性的事务处理性能指标值的统计结果如图4所示。从图中可以看出,SQLite的内存数据库特性在TPC-E负载下,通过不断延长测试时间,来增加面向SQLite的TPC-E基准测试系统的测试压力,而待测系统的性能指标基本处于稳定状态。经过计算可得,tpsE的平均值为3.462 819。
图4 性能指标统计结果(内存数据库)
在进行SQLite数据库的内存数据库特性的测试过程中,测试系统在这27个不同测试运行时间内,内存监测数据统计结果如图5所示。
图5 内存使用情况统计结果(内存数据库)
分析可知,面向SQLite的TPC-E基准测试系统在内存数据库模式下符合TPC-E基准规范。从性能测试结果可以看出,内存利用基本上在90%以上,因此内存是待测系统的内存数据库特性较为明显的瓶颈之一。
4 结束语
设计和实现了面向SQLite的TPC-E基准测试系统,在模拟的金融证券交易场景下测试了SQLite应用于金融证券交易平台的处理性能瓶颈,对SQLite数据库的事务处理性能优化提供了重要数据,为实际应用提供了性能参考依据。