【IT168 专稿】众所周知,微软在OLTP基准测试方面已经从TPC-C转向了全新的TPC-E。TPC-C包括5种存储过程调用(stored procedure calls):新订单、付款、送货、订单状态和库存水平。其结果是用每分钟完成的交易次数来衡量的,即rate of New-Order calls。TPC-C平均每个新订单需要执行2.22次调用。
而全新的TPC-E数据类型更加丰富,由3类扩展为10类,模拟的交易条件更复杂。每一次交易都要对客户端的WEB页面作出响应,和现代的数据密集型应用相仿,也是由多个存储过程调用组成。对于TPC-E而言,平均每次交易有25.4次数据库存储过程调用。
这里我们比较HP ProLiant DL580 G5 和 IBM x3850分别参与TPC-C和TPC-E的结果。
HP ProLiant DL580 G5 配置4颗四核 Xeon X7350 2.93GHz 处理器,其TPC-C测试结果是407,079 tpm-C。这相当于每秒执行6785次交易,由于每次交易要做2.22次调用,也就是说每秒钟可执行15,062次 SQL Batches批处理,反过来说,每次调用大约需要消耗1毫秒的CPU资源(计算方法是Average CPU-sec / call = 处理器利用率*处理器数量/ SQL Batches/sec,这里处理器利用率是100%,由于是四路四核,所以处理器数量是16)。
IBM x3850同样是基于4颗四核 Xeon X7350处理器,其TPC-E的测试结果是479.51 tps-E(每秒完成交易次数),相当于12,180 SQL Batches/sec(计算方法是479.51*25.4),也就是说平均每次调用需要消耗1.2毫秒的CPU时间。
我之所以关注SQL Batches/sec 和每次调用CPU消耗时间(average CPU per call )这两个指标,是因为它们会影响到性能分析。对于一台满负荷运转的服务器来说,SQL Batches/sec值比较小的话,意味着每次调用都要消耗更多昂贵的CPU资源,这有可能是因为所执行的操作本身就比较消耗CPU资源,或者是CPU在指令编译过程中浪费了资源;而如果SQL Batches/sec值比较大的话,意味着在数据库查询/索引优化方面的空间不太大,关键是尽量去减少网络传输延迟。但受测试规则所限,网络调优不适合TPC基准测试。
TPC-C和TPC-E存有很大的差别。在TPC-C中,最常见的两种调用是新订单和付款。新订单大约有11行数据,可执行选择、更新和插入等操作,每个新订单包含10列字段。付款由3行更新和1次插入组成。TPC最重头的部分也就是对数据表的插入和更新。在TPC-C中,只有一次组合查询。而在TPC-E中,除了一般的操作外,还包含了多表连接查询,更加复杂。(本文编译自Joe Chang的博客:http://sqlblog.com/blogs/joe_chang/archive/2008/03/07/comments-on-tpc-e-and-tpc-c.aspx)