TPCE测试程序使用说明
白箱测试部 龙涛(flybird_lt@yahoo.com.cn)
1,数据库装载:
1.1 数据库目录的建立
由于TPCE测试数据库占用的存储非常大,在最低要求5000个客户的情况下,大约需要40G以上的空间。虽然可以选择将数据存储在一个文件上,但是这样可能会导致查询效率的降低,因此,也可以分为多个文件来存储。通过执行“0创建数据库目录.bat”的批处理文件来建立需要的文件夹,实际使用中可自行修改目录:
mkdir d:/Bigdb/dblogs
mkdir d:/Bigdb/dbbackups/backupA1
mkdir d:/Bigdb/dbRoots
for %%i in (A B C D E F G H I J) do @mkdir d:/Bigdb/cab%%i
1.2 数据库的建立
启动达梦数据库,建立tpce数据库,执行脚本“0创建数据库.sql”,需要注意的是,该脚本中的文件目录要和前面建立的目录一致。
1.3 数据类型的建立
启动达梦数据库,建立tpce数据库,执行脚本“1创建TPCE数据类型.sql”。在从SQL Server的原始脚本移植过来时,做了以下修改:
--CALL SP_DTYPE_ADD('LOB','VARCHAR',8188,-1);
CALL SP_DTYPE_ADD('LOB','TEXT',-1,-1);
因为在实际装载程序中插入的是100000长度的char类型记录。
1.4 创建测试表
在tpce数据库上执行脚本:“2创建动态增长表.sql”、“3创建固定表sql”、“4创建固定规模表.sql”、“5创建TID_Range表.sql”。
1.5 创建事务存储过程
在tpce数据库上执行脚本:“事务存储过程01DM_BrokerVolume.sql”、“事务存储过程02DM_Customer-Position.sql”、“事务存储过程03DM_DataMaintenance.sql”、“事务存储过程04DM_MarketFeed.sql”、“事务存储过程05DM_MarketWatch.sql”、“事务存储过程06DM_SecurityDetail.sql”、“事务存储过程07DM_TradeLookup.sql”、“事务存储过程08DM_TradeResult.sql” 、“事务存储过程09DM_TradeStatus.sql”、“事务存储过程10DM_TradeUpdate.sql”、“事务存储过程11DM_Get_Next_T_ID.sql”、“事务存储过程12DM_TradeOrder.sql”、“事务存储过程13DM_TradeCleanup.sql”。注意:在SQL Server的存储过程中用到了设置事务隔离级别的SQL语句,达梦只有6.0版才支持,至于SQL Server中为何在不同的事务中设置不同的隔离级别,还需要研究。
1.6 装载数据
执行TPCEDriver程序,在数据装载上设置好装载参数,参数的限制条件如下:
a) 开始客户数必须是一个装载单元(1000)的第一个值,比如1、1001、2001等;
b) 本测试客户数+开始客户数不能超过总客户数;
c) 总客户数和本实例客户数必须是一个装载单元(1000)的整数倍,理论上要求总客户数不能低于5000(1000个客户的理论性能结果为2tpsE,超出一定范围外的结果视为无效);
d) 其他参数通常使用默认参数,其中装载方式只能选择ODBC;
注意,装载和测试时要用到flat_in文件夹下面的原始数据,
1.7 创建聚簇索引
在tpce数据库上执行脚本:“10-Create_Clustered_Indexes_Fixed.sql”、“10Create_Clustered_Indexes_Growing.sql”、“10Create_Clustered_Indexes_Scaling.sql”。注意,由于装载后的数据量非常大,建立索引的过程会非常耗费时间,建议在dm.ini文件中设置以下参数:
ENABLE_FAST_BUILD_INDEX = 1
BUFFER和MEMORY_POOL根据实际情况调大一些
REDO_LOG = 0
1.8 创建普通索引
在tpce数据库上执行脚本:“11Create_NC_Indexes_Fixed.sql”、“11Create_NC_Indexes_Growing.sql”、“11Create_NC_Indexes_Scaling.sql”。
1.9 创建外键约束
在tpce数据库上执行脚本:“12Create_FK_Constraints.sql”。由于在SQL Server中的建表脚本没有创建主键,导致执行失败,因此在移植时给相应建表语句加上了主键。
2 启动CE服务器和MEE服务器
运行TPCEDriver程序,设置正确的数据库服务器和数据库,CE服务器的监听端口号选择39099,MEE服务器的监听端口号选择38122(可以使用自定义端口号,但是要和TPCEDriver中设置的参数一致),测试时最好不要勾选“显示详细信息”,会降低效率。
注意:达梦数据库的登录用户名和密码必须为SYSDBA,登录端口号为12345,SQL Server登录用户名和密码必须为sa。
由于达梦中SET NOCOUNT ON SET XACT_ABORT ON SET ARITHABORT ON无对应项,导致部分存储过程(Trade-Order等)执行后报“游标已经关闭”,因此在dm.ini文件中增加配置:RESULT_SET_FOR_QUERY = 1
3 测试运行
3.1 参数设置
打开TPCEDriver程序参数界面,设置连接CE服务器和MEE服务器的“主机名”和“端口号”;“监听端口号”为TPCEDriver接受CE服务器和MEE服务器返回的Trade-Request消息的网络监听端口;“发送模式”有异步和同步两种,异步方式表示“发送线程”发送完一个事务后不等待服务器返回消息就直接启动一个新的连接发送下一个事务,同步方式则表示“发送线程”要等待一个事务接收到返回消息或中断后才会发送一个事务。
勾选“共享连接池”时,“发送线程”每发送一个事务,会将该事务与该socket关联,在该事务处理完毕后,不会将该socket关闭,而是将其置于空闲队列中,这样,再发送下一个事务时可以重复使用空闲队列中的socket,提高测试性能;如果关闭该功能,则每当一个事务处理完毕后,会关闭与之关联的socket,发送下一个事务时,将与服务器重新建立连接。
“事务产生”队列大小设置,用于指定每个CE,MEE事务队列的最大长度,当CE和MEE对象将随机产生的事务往队列里Push时,如果队列已满,则会循环等待;需要注意的是,这个队列长度不是指所有队列加起来的总长度,而是与每个CE或MEE对象一一对应的单个事务队列的长度。
“发送速率”用于限定事务发送的速率,当发送速率超过该值时,“发送线程”会循环等待。DM事务不包括在统计范围内,因为DM事务事务要求每60秒执行一次;发送速率设置过小时,可能会出现“发送时间间隔超过1秒”的警告信息,按照标准要求,在正常测试情况下是不允许出现这种情况的,否者测试结果视为无效,可以适当增大发送速率。
“CE线程”表示使用的随机事务模拟产生的CE对象数量,它的值应该与“CE队列”数量相同,而“CE发送线程”应该是“CE队列”的整数倍;DM相关的参数都固定为1,因为它只需要每60秒产生一个事务,不需要设置太多的线程和队列;MEE相关参数和CE参数设置规则相同。
“设置CE分区”用于定制每一个CE对象随机产生事务的分区限制,分区的规则如下:
(1)C_ID子范围分区必须是一个连续的集合;
(2)子范围的最小C_ID值必须是一个装载单元Load Unit的起始值,通常Load Uint为1000个客户,则最小C_ID应该是1、1001、2001或者5001;
(3)最小的子范围大小为5000;
(4)子范围大小应该为一个装载单元的整数倍;
(5)每个对象的子范围大小不要求完全一样。
此外,一旦C_ID分区被使用,则EGenDriverCE代码会保证:
(1)50%的概率从整个配置的客户范围内选取C_ID值
(2)50%的概率从子范围分区内选取C_ID值
例如,数据库中有60000个配置客户数Configured Customers,4个CCE对象,头两个对象子范围为20000,剩下两个个对象子范围为10000,则有如下关系:
(1)第一个对象的开始客户位置为1,子范围大小为20000,分区百分比50%;
(2)第二个对象的开始客户位置为20001,子范围大小为20000,分区百分比50%;
(3)第三个对象的开始客户位置为40001,子范围大小为10000,分区百分比50%;
(4)第四个对象的开始客户位置为50001,子范围大小为10000,分区百分比50%;
在操作界面上可以增加和删除分区,注意,保存之后,显示出来的分区可能只有前面几个,是因为设定的“CE线程”数量小于添加的分区数量,读取配置文件的时候,超出“CE线程”数量的分区设置不会进行处理;如果设置的分区数小于“CE线程”数量,则前面的CE对象按照分区设置来处理,后面的CE对象则按照默认的无分区设置来处理。在Config.ini中对应的内容为:
[CEINSTANCE]
TYPE=2 默认为0
START_CID=1 默认为1
RANGE_COUNT=5000 默认为数据库总客户数
PERCENT=50 默认为50%
这里TYPE=2,其实总共有四种设置方式:0-无分区,自动RNG(随机种子);1-无分区,指定RNG;0-有分区,自动RNG;1-有分区,指定RNG。默认情况下都是使用自动随机种子产生事务,如果需要指定种子,只能手工修改Config.ini,指定其种子:
[CEINSTANCE]
TYPE=1
MIX_RNG_SEED=1
INPUT_RNG_SEED=1
“其他设置”里的参数与装载数据库时指定的参数要一致,TotalCustomerCount对应数据库总客户数,ConfiguredCustomerCount对应本测例客户数,ActiveCustomerCount根据实际测试情况进行调整,一般与ConfiguredCustomerCount相同,ScaleFactor对应规模因素,DaysOfInitialTrades对应工作日数。
MEEIndexTable用于设置CE服务器和MEE服务器发送Trade-Request消息的通讯表,通常情况下,只需要填写TPCEDriver程序所在主机信息就可以了(注意,这里的端口号要与“监听端口号”一致,否则TPCEDriver无法接收到服务器发送的消息)。
3.2 测试
如果没有报错误信息的话,可以点击“测试”开始运行了,运行流程大致如下:
a) 建立网络监听线程,准备接收服务器发送的Trade-Request消息;
b) 发送MEEIndexTable信息给CE服务器和MEE服务器;
c) 创建事务产生线程和事务发送线程
d) 启动图形显示和统计功能
e) 循环等待并显示队列信息
3.3 测量
当测试到达稳定期后,可以点击“开始测量”,进行性能统计,“测量时间段”指定了测量的时间长度,当到达指定时间后,则自动停止测量,在“状态信息”栏输出结果,也可以在下拉菜单中选择“测量阶段”来查看运行时结果或最终结果,当下次重新启动测试或开始测量时,会重新清理结果。
3.4 验证结果
测量结束后,点击“验证结果”按钮来验证结果的有效性,TPCEDriver程序自动根据统计信息计算各个参数,然后调用EGenValidate程序来验证,验证通过的话程序会打印“Passed!”,否则打印“Failed!”。