IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  XML | Information Management | Open source  >

使用 TPoX 测试 XML 数据库的性能

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 中级

张巍 (wzzhang@cn.ibm.com), 软件工程师, IBM
高小明 (gaoxm@cn.ibm.com), 软件工程师, IBM

2009 年 7 月 30 日

本文将对一款 XML 数据库事务处理性能测试工具 TPoX 进行介绍。它对数据库处理 XML 事务的整体能力进行性能测试,不同于其他测试工具仅对 XQuery 执行效率进行测试。 TPoX 的部分测试数据来源于金融领域的实际情景,并且具有一定的仿真性。

前言

XML 数据库是近年来新出现的支持 XML 功能操作的数据库。各种 XML 数据库良莠不齐,用户对 XML 数据库的需求也不尽相同。性能,无疑是是大多数用户的首要挑选条件。因此,各种各样的性能测试工具应运而生,XMach-1,XPathMark,XBench 等等。但是这些测试工具仅针对数据库的某个方面进行测试,如 XQuery 的查询性能等。本文将为大家介绍一款针对于 XML 数据库的整体事务处理能力进行测试的工具—— TPoX,Transaction Processing over XML 。





回页首


TPoX 概述

TPoX 是一款基于金融场景的针对 XML 数据库的性能基准测试工具。它主要用来评估 XML 数据库的以下性能:XQuery,SQL/XML, XML 存储 , XML 索引, XML Schema 验证, XML 更新,并发操作等。 TPoX 由负载驱动程序,测试用 XML Schema,测试用 XML 数据,示例负载描述文件和事务模板组成。

现介绍如下:

  • XML schema:定义了该测试所用 XML 数据,包括一个 FIXML 的 schema ;
  • 数据生成工具:可以生成该测试所用的数据;
  • 示例负载描述文件和事务模板:这两者组成了测试用负载,它包括一系列的事务,事务可以包括 XQuery,insert,update 等操作,这些事务将被执行在生成的数据上;
  • 负载驱动程序:Java 应用程序,用来执行用户定义的负载,并且收集和打印测试结果;可以通过配置文件定制模拟的并发用户数量;此外,它最大的特点是每次执行的事务都可以通过 Parameter   Maker 来动态的生成随机测试数据;
  • 文档:描述 TPoX 的实现细节及使用方法的文档。





回页首


数据模型

TPoX 的数据模型是基于金融系统中的交易场景。它包括 2 个业务实体:客户和经纪行(如下图所示)。客户通过订单 Order 来买卖证券,经纪行根据客户的请求来处理交易。该系统的核心便是一个支持 XML 功能的数据库,它的性能决定了该应用的性能。


图 1. 交易场景
图 1. 交易场景

下图显示了 TPoX 的主要逻辑数据实体关系以及其对应的 schema 。每个客户 Customer 有 1 或多个账户 Account,每个账户 Account 可以下 1 或多个订单 Order,每个订单 Order 每次可以买或者卖 1 个权证 Security,每个权证 Security 可以有 1 或多个持有 Holding,就是说该权证可以被多个账户购买;同理,每个账户 Account 可以包括 1 或多个持有 Holding 。每一个权证 Security 可以存在于 Customer 的多个订单 Order 或者持有 Holding 里。


图 2. 实体关系
图 2. 实体关系




回页首


事务模板

TPoX 的测试方式是执行用户指定的事务。 TPoX 提供了一些基本的事务模板,他们存放在 TPoX/WorkloadDriver/DB2/ 下,用户可以修改或者增加所需执行的事务。同一个事务应当放在同一个文件中,它应该由一条或者多条增删改查语句组成。每条语句应当由 % 作为结束符。负载驱动会在每个文件的最后一条语句执行完后提交 commit,除非该事务中有 commit 语句。

事务模板可以包含参数 Parameter,如下所示,其中包括像“ |1 ” 这样的参数,该参数的生成规则由负载描述文件提供,在执行测试中由 Parameter Maker 生成。


清单 1. 示例模板
declare default element namespace "http://tpoxbenchmark. 
 com/custacc"; 
 for $cust in db2-fn:xmlcolumn("CUSTACC.CADOC")/Customer 
 where $cust/@id=|1 and $cust/Nationality="|2" 
 return 
 <Customer_Profile CUSTOMERID="{$cust/@id}"> 
 {$cust/Name} 
 {$cust/DateOfBirth} 
 {$cust/Gender} 
 {$cust/Nationality} 
 {$cust/Addresses} 
 {$cust/EmailAddresses} 
 </Customer_Profile> 
 %





回页首


负载描述文件

负载描述文件用来控制负载驱动的执行,它告诉负载驱动去执行配置的事务以及如何实现其中的参数。一些示例负载描述文件位于 TPoX/WorkloadDriver/properties 。负载描述文件可以指定一个包含模板的目录或者显式地指出所要执行的模板列表。


清单 2. 负载描述文件示例

numOfTransactions = 4 

 t1 = myqueries/listSecurities.xqr 
 w1 = 50 
 p1|1 = file|input/security_types.txt 

 t2 = myqueries/getCustomerProfile.xqr 
 w2 = 20 
 p2|1 = uniform|2000-4000 
 p2|2 = uniform|5000-20000 

 t3 = myqueries/listOrders.xqr 
 w3 = 15 

 t4 = myqueries/customized.xqr 
 w4 = 15

  • numOfTransactions 指定该模板中包含的事务数量。上例中这个负载包含 4 个事务,它们位于 TPoX/WorkloadDriver/myqueries/ 目录下;该路径可以是绝对路径,也可以是相对于 WorkloadDriver 的相对路径;
  • t1 为模板的名字,w1 为该事务的权值,如果有一个权值被指定,那么所有的事务都应该分配权值,并且所有权值相加应当为 100,否则报错;权值的作用在于,如果用户指定此次测试时间为 100s,那么在此负载下,t1 会被执行 50% 即 50s ;
  • p1 为事务 t1 中的参数 parameter 的生成规则,parameter maker 会在测试执行过程中跟据该规则生成具体的数值,其中 p1|1 表示第一个事务的第一个参数,p2|1 表示第二个事务的第一个参数,p2|2 为第二个事务中的第二个参数。 p1|1 表明,第 1 个参数从文件 File 中随机抽取,“ | ”后为该文件的地址; p2|1 表明,事务 2 的第 1 个参数随机取自整型 Integer 的均匀分布,分布从 2000 到 4000,假如第二个事务中有条语句是“ ... where $doc/num = |1 ”, 则“ |1 ”会被 2000-4000 中的一个随机数代替。




回页首


使用 TPoX

1. 安装 TPoX

首先,登录http://tpox.sourceforge.net/下载最新的 TPoX 。

解压后,我们首先来看下 TPoX 的文件夹结构:


清单 3. 文件夹结构

TPoX 
 ------------------------------ 
 datagen 
 DB2 
 documentation 
 generatedXML 
 MSSQL 
 Oracle 
 sample_documents 
 schemas 
 toxgene 
 WorkloadDriver

  • datagen:测试数据生成工具;
  • DB2,MSSQL,Oracle:用来测试特定数据库的相关文件;
  • generatedXML:用来存放生成的 XML 文件的目录;
  • schemas:测试所用的 schema 文件;
  • WorkloadDriver:负载驱动文件夹,TPoX 的主程序所在;

然后,登录 http://www.ibiblio.org/maven/commons-cli/jars/ 下载负载驱动程序的库文件 commons-cli-1.0.jar, 并且将它放在 TPoX/WorkloadDriver/plugins/ 下。

最后,需要修复 Windows 和 Linux 不同回车符的问题,执行以下命令:


清单 4. 修复命令
 
 cd TPoX/ 
 chmod a+x fix 
 chmod a+x fixAll 
 ./fixAll
 

2. 准备测试数据

2.1 下载测试数据

http://tpox.sourceforge.net/ 下载测试数据,这些测试数据是由 datagen 按照 XXS(最小)的标准生成的。如果你需要更大的测试数据,请单独运行 datagen 来生成符合你条件的测试数据。生成数据方法请参阅 2.2 。

解压后,将数据拷贝到 generatedXML 目录,如下所示:

TPoX/generatedXML/XXS/custacc/batch-[1-7]
TPoX/generatedXML/XXS/order/batch-[1-7]
TPoX/generatedXML/XXS/security
TPoX/generatedXML/XXS/account/batch-1
			

2.2 生成测试数据

如果下载的测试数据不能满足你的需求,你可以用 TPoX 自带的数据生成工具来生成满足你要求的数据。运行之前,请先下载下列库文件:

1. ToxGene(http://www.cs.toronto.edu/tox/toxgene/downloads.html),解压后放到 TPoX/toxgene 目录下;

2. PoBoy.jar(http://www.cs.toronto.edu/tox/toxgene/downloads.html),保存到 toxgene/lib 目录下;

3. Xerces 解析器(http://xml.apache.org/dist/xerces-j/Xerces-J-bin.2.5.0.zip)解压后保存到 toxgene/lib 目录下;

最后将所有 jar 包加入到 CLASSPATH 变量中,将 toxgene 加入到 PATH 中。


清单 5. export CLASSPATH 示例
			
export CLASSPATH=$CLASSPATH:...PoBoy.jar:...xercesImpl.jar:...xmlParserAPIs.jar 
 export PATH=$PATH:$HOME/TPoX/toxgene/bin


清单 6. 运行 generateXML.ksh
			
cd TPoX/datagen 

 ./generateXML.ksh 

 Usage: generateXML.ksh 

 [-o OUTPUTPATH]  output directory relative to the datagen directory (default: ../gene 
 [-t DOCUMENT TYPE]  Possible values: c, custacc, o, order, s, security, a, account, all. 
 [-s SCALE]     defines the scale factor (integer), skips input prompt. (default is 
 [-p PARALLEL_GEN]  max number of parallel toxgene sessions  (default: 4) 
 [-d PARALLEL_DEL]  max parallelism to delete existing data  (default: 30) 
 [-e EXTRA_DOCS]    generate additional XML docs for insert transactions on top of 
          the populated database [0%, 15%, 33%, 50%, 66%, 100%]  (default: 15% 

 --> Scale factor must be an integer. Decimal points not allowed. 

 --> the output path will be : /home/zhangw/TPoX/datagen/../generatedXML 
 \n 
 ****************************************** 
 ****    TPoX XML DATA GENERATION      **** 
 ******************************************\n 
 PLEASE ENTER SCALE FACTOR FOR DATA GENERATION (DocType: * all *) 
 =======================================================================\n 
 XXXS (100MB:  6K custacc,  30K order)  --> 1 
 XXS  (1GB:   60K custacc, 300K order)  --> 10 
 XS   (10GB: 600K custacc,   3M order)  --> 100 
 S    (100GB:  6M custacc,  30M order)  --> 1000 
 M    (1TB:   60M custacc, 300M order)  --> 10000 
 L    (10TB: 600M custacc,   3B order)  --> 100000 
 XL   (100TB:  6B custacc,  30B order)  --> 1000000 
 XXL  (1PB:   60B custacc, 300B order)  --> 10000000 
 CUSTOM SCALE  --> [Integer]\n 
 ENTER SCALE:
 

在提示处,你可以输入自己想要的测试数据大小,如 1,10,100 … .10000000 等。数据会生成在 generatedXML 目录下。

3. 创建数据库

本文使用 DB2 v9.5 作为目标数据库(免费版本下载 http://www.ibm.com/db2/express )。


清单 7. 执行脚本
			
db2start 
 SQL1063N  DB2START processing was successful. 

 db2 create db XMLDB using codeset utf-8 territory CN pagesize 16 k 
 DB20000I  The CREATE DATABASE command completed successfully. 

 db2 connect to xmldb 

   Database Connection Information 

 Database server        = DB2/LINUX 9.5 
 SQL authorization ID   = ZHANGW 
 Local database alias   = XMLDB 

 db2 "create table custacc (cadoc xml)" 
 DB20000I  The SQL command completed successfully. 

 db2 "create table security (sdoc xml)" 
 DB20000I  The SQL command completed successfully. 

 db2 "create table order (odoc xml)" 
 DB20000I  The SQL command completed successfully.
 
 

4. 性能测试

接下来我们以 TPoX 自带的一些负载描述文件来进行 Insert 和 Query 性能测试,首先确保 CLASSPATH 中包含下列 CLASS 或 Jar 包。

  • db2jcc.jar
  • db2jcc_license_cisuz.jar (or any other db2_jcc_license*.jar file)
  • TPoX/WorkloadDriver/plugins/commons-cli-1.0.jar
  • TPoX/WorkloadDriver/classes
  • TPoX/DB2/classes

在 TPoX/WorkloadDriver 目录下进行性能测试。

insert 测试:

现在我们进行无 Schema 验证的 XML 插入性能测试,插入 250 个 security 文档,模拟 5 个并发用户,每个用户执行 50 次事务:


清单 8. insert 测试
			
java -classpath $CLASSPATH WorkloadDriver -d XMLDB -w 
 properties/insNoValidsecurity.properties -u 5 -tr 50 

 The WorkloadDriver program is running... 

 The following arguments are used (user id/password omitted): 
 -d XMLDB -u 5 -w properties/insNoValidsecurity.properties -tr 50 



 Longest connection time:                1 seconds 
 Workload execution starting date/time:  Mon Jun 29 11:14:04 CST 2009 
 Workload execution finishing date/time: Mon Jun 29 11:14:06 CST 2009 
 Workload execution elapsed time:        1 seconds 


 STATISTICS OVER THE COMPLETE RUN: 

 *** SYSTEM WORKLOAD STATISTICS *** 

 Tr. #     Name               Type     Count       %-age       Total Time (s)     
 Min Time (s)     Max Time (s)     Avg Time (s) 
 1         insNoValidsecurity I        250         100.00      9.81               
 0.01             1.05             0.04 

 *** SYSTEM THROUGHPUT *** 

 The throughput is 15000 transactions per minute (250.00 per second). 


 The output/output2009_06_29_1114 directory contains the files output.txt 
 and stats.txt (as well as stats_per_user.txt, if the verbosity level 
 is 1 or 2, and user1.txt, etc., if the verbosity level is 2). 
 Additionally, it contains comment.txt if -c option was used. 

 The last security document inserted was ../generatedXML/XXS/security/security250.xml
 
 

从中我们可以看到,WorkloadDriver 已经为我们做好了统计,让我们来看一下统计结果:

1. 执行的 transaction 是 insNoValidsecurity,类型为插入 I 操作;

2. 5 个并发用户,每个用户 50 次事务,所以总数 Count 是 250 次;

3. 因为只有一个 transaction,所以其所占比重是 100% ;

4. 250 次事务总共用时 9.81s,最小一次 transaction 0.01s,最大 1.04s,平均 0.04s ;

5. 吞吐率即 DB2 server 每分钟可以处理的事务数为 15000 次;

还可以对需要 schema 验证的插入进行性能测试,如下所示,插入 custacc 文档,需要 schema 验证,模拟 10 个并发用户,执行总时间为 60s。


清单 9. 带验证的 insert 测试
 
 java -classpath $CLASSPATH WorkloadDriver -d XMLDB -w 
 properties/insValidcustacc.properties -u 10 – ti 60
 
 

query 测试:

使用 5 个并发用户,每个用户 50 次事务。


清单 10. query 测试
			
java -classpath $CLASSPATH WorkloadDriver -d XMLDB -w 
 properties/queries.properties -u 5 -tr 50 

 The WorkloadDriver program is running... 

 The following arguments are used (user id/password omitted): 
 -d XMLDB -u 5 -w properties/queries.properties -tr 50 



 Longest connection time:                0 seconds 
 Workload execution starting date/time:  Mon Jun 29 12:43:20 CST 2009 
 Workload execution finishing date/time: Mon Jun 29 12:43:24 CST 2009 
 Workload execution elapsed time:        4 seconds 


 STATISTICS OVER THE COMPLETE RUN: 

 *** SYSTEM WORKLOAD STATISTICS *** 

 Tr. #     Name                      Type     Count       %-age       Total Time (s)     
 Min Time (s)     Max Time (s)     Avg Time (s) 
 1         get_order_sqlxml          Q        45          18.00       3.77               
 0.06             0.44             0.08 
 2         get_security_sqlxml       Q        28          11.20       1.93               
 0.05             0.26             0.07 
 3         customer_profile_sqlxml   Q        32          12.80       2.49               
 0.06             0.28             0.08 
 4         search_securities_sqlxml  Q        33          13.20       4.25               
 0.10             0.30             0.13 
 5         account_summary_sqlxml    Q        39          15.60       2.86               
 0.06             0.22             0.07 
 6         get_security_price_sqlxml Q        37          14.80       2.80               
 0.05             0.31             0.08 
 7         customer_max_order_sqlxml Q        36          14.40       2.40               
 0.06             0.11             0.07 

 *** SYSTEM THROUGHPUT *** 

 The throughput is 3750 transactions per minute (62.50 per second). 


 The output/output2009_06_29_1243 directory contains the files output.txt 
 and stats.txt (as well as stats_per_user.txt, if the verbosity level 
 is 1 or 2, and user1.txt, etc., if the verbosity level is 2). 
 Additionally, it contains comment.txt if -c option was used.
 

使用 4 个并发用户,运行时间 300 秒。


清单 11. query 测试
 
 java -classpath $CLASSPATH WorkloadDriver -d XMLDB – w 
 properties/queries.properties -u 4 -ti 300 

 The WorkloadDriver program is running... 

 The following arguments are used (user id/password omitted): 
 -d XMLDB -u 5 -w properties/queries.properties -ti 300 



 Longest connection time:                0 seconds 
 Workload execution starting date/time:  Mon Jun 29 12:45:05 CST 2009 
 Workload execution finishing date/time: Mon Jun 29 12:50:05 CST 2009 
 Workload execution elapsed time:        300 seconds 


 STATISTICS OVER THE COMPLETE RUN: 

 *** SYSTEM WORKLOAD STATISTICS *** 

 Tr. #     Name                      Type     Count       %-age       Total Time (s)     
 Min Time (s)     Max Time (s)     Avg Time (s) 
 1         get_order_sqlxml          Q        2667        14.20       219.91             
 0.06             1.24             0.08 
 2         get_security_sqlxml       Q        2631        14.01       177.64             
 0.05             1.53             0.07 
 3         customer_profile_sqlxml   Q        2727        14.52       195.19             
 0.06             1.57             0.07 
 4         search_securities_sqlxml  Q        2628        14.00       308.82             
 0.09             2.24             0.12 
 5         account_summary_sqlxml    Q        2720        14.49       204.83             
 0.06             1.89             0.08 
 6         get_security_price_sqlxml Q        2681        14.28       183.57             
 0.05             1.22             0.07 
 7         customer_max_order_sqlxml Q        2723        14.50       207.08             
 0.06             1.40             0.08 

 *** SYSTEM THROUGHPUT *** 

 The throughput is 3755 transactions per minute (62.59 per second). 


 The output/output2009_06_29_1245 directory contains the files output.txt 
 and stats.txt (as well as stats_per_user.txt, if the verbosity level 
 is 1 or 2, and user1.txt, etc., if the verbosity level is 2). 
 Additionally, it contains comment.txt if -c option was used. 

 Since the -ti or -fto option was used, some users may still be 
 finishing up their last transactions and closing their connections...
 
 





回页首


结论

TPoX 使用简单,功能强大,可配置性强。用户可以根据自己的需求对数据库进行测试。通过对事务模板和负载描述文件进行配置,用户可以模拟自己需求的真实场景,来获得数据库的整体性能测试结果。通过对比不同类型事务的性能,改善自己的应用程序。



参考资料

学习
  • 在这里找到更多的关于性能测试工具 XMach-1 的介绍。

  • 在这里找到更多的关于性能测试工具 X-Bench 的介绍。

  • 想了解 TPoX 的实现思路及技术细节,请参考 TPoX 技术文档

  • 了解更多关于 FIXML

  • 数据生成工具 ToxGene 项目介绍。


获得产品和技术
  • 下载 IBM 软件试用版,体验强大的 DB2®,Lotus®,Rational®,Tivoli®和 WebSphere®软件。

  • 下载最新的 TPoX


作者简介

张巍的照片

张巍,IBM CDL 软件工程师,曾先后从事数据仓库产品的测试工作,DB2 pureXML 相关的测试工作。目前从事 DB2 pureXML 相关的开发工作。可以通过 wzzhang@cn.ibm.com 与他联系。


高小明的照片

高小明,IBM CDL 软件工程师,具有丰富的开发经验,目前从事 DB2 pureXML 相关的开发工作。可以通过 gaoxm@cn.ibm.com 与他联系。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款