分类:
2008-04-24 09:48:29
既然 DB2 9 发布了,现在是时候对它的最新特性之一 —— pureXML® 进行测试驱动了。为此,建立了一个模拟的经纪业务环境。这个环境具有以下特征:
高事务量和并发性
小的事务大小
大量小型 XML 文档
可变的 XML 文档结构 —— 测试包含符合 FIXML 的数据,FIXML 是 Financial Information eXchange(FIX)标准的金融业 XML 实现。
请记住,XML 应用程序大致分成以下两类:
面向数据的(高数据量,小文档,这个测试就是针对这种情况)
面向文档的(可变数据量,大文档)
另外,涉及 XML 的数据库应用程序也是各种各样的,包括以下情况:
以 XML 形式发布关系数据
用 XML 全文本搜索进行内容和文档管理
合并不同的数据源
表单处理
对 Web 服务和面向服务体系结构(SOA)的后端支持
基于消息的事务处理和基于 XML 的在线事务处理(OLTP),尤其是在金融业中
本文在一个基于 XML 的事务处理场景中进行性能度量,这个场景模拟一个面向数据的金融应用程序。测试设备包括最新的 POWER5 服务器(p5 560Q)以及 AIX 5.3 和 TotalStorage DS8100 磁盘系统。
DB2 9 和 XML
DB2 9 中新的 XML 支持包括纯 XML 存储、XML 索引、XQuery、SQL/XML 和高级的 XML 模式处理。“纯” 意味着以标注上类型的树的形式存储和处理 XML 文档,这与商业关系数据库中以前的任何技术都不同。尤其是,pureXML 与将 XML 存储为大对象(BLOB 或 CLOB)或者将 XML 分解到关系表中的技术有显著差异。更多的信息请参考以前的文章 “What's new in DB2 Viper” (developerWorks,2006 年 2 月)和 “Native XML Support in DB2 Universal Database”。
测试场景:在线经纪业务
这个测试场景对在线经纪业务进行建模。我们曾经帮助金融公司采用 XML。这些经历帮助我们理解了他们的数据和处理特征。这个场景有意地进行了简化,但是在文档、事务和 XML 模式方面仍然具有代表性。
这个场景中主要的逻辑数据实体如下(见图 1):
Customer: 一个客户可以有一个或多个帐号(account)。
Account: 每个帐号包含一个或多个持有物(holding)。
Holding: 某一证券 的数量。
Security: 某一持有物的标识符(例如,股票名称)。
Order: 为一个帐号 买卖一种证券 的订单。
文档处理和大小因文档类型而异:
对于每个客户,有一个 CustAcc 文档,其中包含这个客户的所有客户信息、帐号信息和持有物信息。CustAcc 文档的大小在 4KB 和 20KB 之间。
使用 FIXML 4.4 表示订单。FIXML 是用于交易相关消息(比如买卖订单)的行业标准 XML 模式()。订单文档的大小是 1KB 到 2KB。订单文档有许多属性,而且数据节点的比例很高。
证券文档(20833 个)使用实际的证券符号和名称,表示在美国交易的大多数股票和共同基金。它们的大小在 3KB 和 10KB 之间。
使用 Toxgene 数据生成器为这三个模式生成实例文档。关于 Toxgene 数据生成器的更多信息,请参考 ToXgene - the ToX XML Data Generator。
测试设备和配置
测试在以下设备上运行:
处理器: IBM System p5 560Q,使用 8 个处理器的逻辑分区(LPAR),这是一个中等的 IBM System p5 560Q。8 个处理器以 1.5GHz 的频率运行。
内存: 32GB
操作系统: AIX 5L v5.3 TL04(系统类型:9116-561,两个 4 芯片模块)
并发多线程提供 16 个并发执行线程或逻辑处理器。
安装了一个多路径子系统设备驱动程序(SDD)。这个特性可以改进存储服务器访问,比如改进数据可用性和存储服务器上跨光纤通道适配器的动态 I/O 负载平衡。
存储: IBM TotalStorage DS8100,通过 4 个光纤通道适配器连接到 LPAR。
AIX 配置
在安装 DB2 期间,会自动执行所有必需的操作系统参数调整。设置了以下的虚拟内存管理参数,从而更好地控制文件系统缓存使用的内存量:
vmo -o minperm%=5
vmo -o maxclient%=15
vmo -o maxperm%=15
另外,为了防止在数据装载期间试图缓存输入文件,在挂装命令中使用 -o cio 选项,用 JFS2 文件系统的并发 I/O 特性挂装包含原始 XML 输入文件的文件系统。
存储配置
使用 TotalStorage DS8100 的标准默认配置。DS8100 在内部基本上是一个 POWER5 eServer p5 570。与之前的 ESS 使用 SSA 循环不同,DS8100 磁盘互连是一个 Switched Fiber Channel Arbitrated Loop(FC-AL),可以提供更快的数据访问和高可用性。DS8100 配置了 128 个磁盘,在这些磁盘上创建了 16 个卷。在其中,8 个卷(64 个磁盘)分配给这个 LPAR。4 个卷使用 6+Parity+Spare 设置为 388GB。另外 4 个卷使用 7+Parity 设置为 452GB。创建了一个跨越所有 8 个卷的卷组(VG)。在这个卷组上定义了 DB2 数据库的所有存储组件,包括表空间、日志和备份。表 1 总结了配置。
表 1. 存储配置
方面 | 配置 |
---|---|
处理器 | 两个处理器,每个附带 pSeries POWER5 1.9 GHz 两路 CEC |
内存(缓存) | 32GB |
磁盘互连 | Switched FC-AL |
磁盘数量 | 128 个(只有 64 个由主机 LPAR 使用) |
磁盘大小/速度 | 73 GB,15000 RPM |
DB2 配置
DB2 9 包含许多新特性,包括新的自治自调整功能。在这个测试中,利用了其中几种自治功能,包括:
自动存储管理
自调整内存管理
因为启动了 DB2 的自调整内存管理器(STMM),它会连续调整一系列 DB2 配置参数的设置。在测试运行期间 STMM 管理和调整的一些关键的 DB2 配置参数见表 2。要意识到的重要情况是,STMM 会根据正在运行的工作负载类型(比如纯插入、纯查询或混合型工作负载)自主地修改这些值。
表 2. 数据库配置,自调整
DB 配置参数名 | 初始设置 |
---|---|
SELF_TUNING_MEM | ON(默认值) |
DATABASE_MEMORY | AUTOMATIC(默认值) |
SORTHEAP | 156 |
SHEAPTHRES_SHR | 10000 |
LOCKLIST | 53000 |
MAXLOCKS | 80 |
PCKCACHESZ | 27000 |
缓冲池名 | 初始设置 |
IBMDEFAULTBP | 1100000 |
CATBP | 4000 |
TEMPBP | 1000 |
DBA 只需要执行很少的数据库配置任务,见表 3。
表 3. 数据库配置,手工
方面 | 配置/设置 |
---|---|
数据库 | Unicode。所有表空间采用自动存储。DB2 日志在单独的条带上 |
内存 | 为所有测试启用 STMM |
页面大小 | 16K(表空间和缓冲池) |
表和索引 | 3 个表:CustAcc、order、security。24 个 XML 索引:10 个在 CustAcc 上,5 个在 order 上,9 个在 security 上 |
表空间 | 一共 6 个表空间:3 个表各有一个表空间,每个表的索引各有一个表空间。对所有表空间禁用文件系统缓存 |
缓冲池 | 一共 3 个缓冲池:默认缓冲池、用于编目表空间的缓冲池和用于临时表空间的缓冲池 |
工作负载
设计、执行并度量了三种 XML 工作负载:
插入(只写)
查询(只读)
混合(读-写)
这些工作负载都具有很高的并发性。工作负载由一个 Java 驱动程序执行,这个程序产生一个到 n 个并发线程。每个线程模拟一个用户,该用户连接到数据库并提交一个事务流,而不考虑次数。每个事务流是以加权方式从一系列事务模板中随机选择的一系列事务。每个事务被分配一个权重,这个权重决定这个事务在工作负载中的百分比。在运行时,事务中的参数标志替换为具体的值,这些值是从可配置的随机值分布和输入列表中提取的。
插入工作负载:只写
插入工作负载用大约 100GB 的原始 XML 数据填充数据库:
600 万个 CustAcc 文档
3000 万个订单
20833 种证券
首先,83 个并发用户插入所有证券。然后,分阶段插入 CustAcc 和订单文档,从而检验插入性能是可伸缩的。在每个阶段使用 100 个并发用户,见表 4。
表 4. 分阶段的数据库填充
阶段 | 数据库中的 CustAcc 文档数量 | 数据库中的订单文档数量 |
---|---|---|
1 | 100,000 | 500,000 |
2.1 | 200,000 | 1,000,000 |
2.2 | 300,000 | 1,500,000 |
2.3 | 400,000 | 2,000,000 |
2.4 | 500,000 | 2,500,000 |
2.5 | 600,000 | 3,000,000 |
3.1 | 1,000,000 | 5,000,000 |
3.2 | 1,500,000 | 7,500,000 |
3.3 | 2,000,000 | 10,000,000 |
4.1 | 2,500,000 | 12,500,000 |
4.2 | 3,000,000 | 15,000,000 |
4.3 | 3,500,000 | 17,500,000 |
4.4 | 4,000,000 | 20,000,000 |
5.1 | 4,500,000 | 22,500,000 |
5.2 | 5,000,000 | 25,000,000 |
5.3 | 5,500,000 | 27,500,000 |
5.4 | 6,000,000 | 30,000,000 |