TPCC性能测试.docx
- 文档编号:29987247
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:15
- 大小:61.92KB
TPCC性能测试.docx
《TPCC性能测试.docx》由会员分享,可在线阅读,更多相关《TPCC性能测试.docx(15页珍藏版)》请在冰豆网上搜索。
TPCC性能测试
TPC-C性能测试
前言
事务处理性能协会(TransactionProcessingPerformanceCouncil,简称TPC)是一个专门评价大型数据库系统硬、软件性能的组织。
至今(1998年12月),TPC颁布了A、B、C、D四种系统性能测试标准,简称为TPC-A、TPC-B、TPC-C、TPC-D。
其中TPC-A与TPC-B为早期标准,最新标准TPC-D仍在指定过程中,目前普遍使用针对联机事务处理(OLTP)的TPC-C标准。
TPCBenchmarkC是一套评价OLTP性能的测试程序,被全球主流计算机硬件厂商、数据库厂商公认为性能评价标准。
TPC-C测试程序模拟了一个库存、销售系统,其中的数据库结构设计、应用程序规划代表了对RDBMS的标准用法。
本文以TPC在1998年8月14日分布的《TPCBENCHMARKC-StandardSpecificationRevision3.4》英文版(可以从TPC主页“www.tpc.org”下载)为蓝本,选择翻译了其中逻辑设计部分,为提高可读性,多处进行了意译,并加入了注解。
由于译者水平有限,恐怕挂一漏万,如果能够对数据库应用程序员有一点参考价值,也就达到目的了。
2.逻辑数据库设计
2.1业务和应用程序环境
TPC-C由一组基本操作组成,用以测试典型的复杂联机事务处理(OLTP)系统性能。
TPC-C的模拟程序并不针对特定的商业对象,可以模拟含有管理、销售、分发产品、服务的任何工业(例如:
汽车出租,食物分配,零件供应等等)。
TPC-C中虚拟的公司是一家仓库销售供应商,拥有一批分布在不同地方的仓库和地区分公司。
当公司业务扩大时,将建立新的仓库和地区分公司。
通常每个仓库供货覆盖10家地区分公司,每个地区分公司服务3000名客户。
公司共有100,000种商品,分别储存在各个仓库中。
图表1描述了仓库、地区分公司、客户的隶属关系。
图表1
系统功能包括:
客户向公司下订单,查询旧订单。
订单平均由10行分录组成。
订单中1%的商品当地仓库缺货,由其他仓库供货。
同时还要处理付款、发货,和库存报警。
2.2数据库实体、关系、属性
TPC-C数据库由9张独立的表组成。
图表2表示了表和表之间的关系。
图表2
说明:
数字表示数据库的容量需求
实体块中的数字表示表的基数(行数)。
这些数字以仓库数W为因数,决定数据库的缩放能力
关系箭头上的数字表示关系的基数(父子对应平均数)
在关系的基数和表的基数后的加号表示随着行的增减,数值可能增长
2.3表结构
表中出现的属性(attribute)定义:
NuniqueIDs,不重复的代码,至少可以存储N个。
不限制物理类型(例如:
二进制binary、压缩十进制packeddecimal、字符alphabetic等等)
variabletext,sizeN,变长字符串,最大长度为N。
如果用定长字符串模拟,则在字符串尾追加空格
fixedtext,sizeN,定长字符串,长度为N
dateandtime,日期时间,可以表示从1990年1月1日至2100年12月31日的日期,精度至少为1秒
numeric,Ndigits,数字型,可以表示N位数字。
当用于存储货币时必须能表示用户所在国货币定义。
例如在美国,可以定义为(12,2)有符号数字;也可以定义为至少41比特(bits)的有符号整数;还可以定义为64比特(bits)双精度浮点数(REAL)
null,表示无意义数值
注释1:
表中所有的属性可以以任意顺序创建,可以用目标系统支持的任意物理数据类型实现
注释2:
表的名称和字段的名称只是用于说明,实现时可以改为其他名称
2.3.1WAREHOUSE(仓库)
字段名称
字段定义
注释
W_ID
2*WuniqueIDs
W是仓库数目
W_NAME
Variabletext,size10
W_STREET_1
variabletext,size20
W_STREET_2
variabletext,size20
W_CITY
variabletext,size20
W_STATE
fixedtext,size2
W_ZIP
fixedtext,size9
W_TAX
numeric,4digits
销售税
W_YTD
numeric,12digits
本年余额(Yeartodatebalance)
PrimaryKey:
W_ID
2.3.2DISTRICT(地区)
字段名称
字段定义
注释
D_ID
20uniqueIDs
通常为10个
D_W_ID
2*WuniqueIDs
D_NAME
variabletext,size10
D_STREET_1
variabletext,size20
D_STREET_2
variabletext,size20
D_CITY
variabletext,size20
D_STATE
fixedtext,size2
D_ZIP
fixedtext,size9
D_TAX
numeric,4digits
销售税
D_YTD
numeric,12digits
本年余额(Yeartodatebalance)
D_NEXT_O_ID
10,000,000uniqueIDs
下一张定单号
PrimaryKey:
(D_W_ID,D_ID)
D_W_IDForeignKey,referencesW_ID
2.3.3CUSTOMER(客户)
字段名称
字段定义
注释
C_ID
96,000uniqueIDs
通常为3,000
C_D_ID
20uniqueIDs
C_W_ID
2*WuniqueIDs
C_FIRST
variabletext,size16
C_MIDDLE
fixedtext,size2
C_LAST
variabletext,size16
C_STREET_1
variabletext,size20
C_STREET_2
variabletext,size20
C_CITY
variabletext,size20
C_STATE
fixedtext,size2
C_ZIP
fixedtext,size9
C_PHONE
fixedtext,size16
C_SINCE
dateandtime
登记日期
C_CREDIT
fixedtext,size2
信用(“GC”=good,“BC”=bad)
C_CREDIT_LIM
numeric,12digits
透支限额
C_DISCOUNT
numeric,4digits
折扣
C_BALANCE
signednumeric,12digits
欠款余额
C_YTD_PAYMENT
numeric,12digits
累计付款金额
C_PAYMENT_CNT
numeric,4digits
累计付款次数
C_DELIVERY_CNT
numeric,4digits
累计发货次数
C_DATA
variabletext,size500
备注
PrimaryKey:
(C_W_ID,C_D_ID,C_ID)
(C_W_ID,C_D_ID)ForeignKey,references(D_W_ID,D_ID)
2.3.4HISTROY(历史记录)
字段名称
字段定义
注释
H_C_ID
96,000uniqueIDs
H_C_D_ID
20uniqueIDs
H_C_W_ID
2*WuniqueIDs
H_D_ID
20uniqueIDs
H_W_ID
2*WuniqueIDs
H_DATE
dateandtime
H_AMOUNT
numeric,6digits
价格
H_DATA
variabletext,size24
PrimaryKey:
None
(H_C_W_ID,H_C_D_ID,H_C_ID)ForeignKey,references(C_W_ID,C_D_ID,C_ID)
(H_WID,H_D_ID)ForeignKey,references(D_W_ID,D_ID)
2.3.5NEW_ORDER(新定单)
字段名称
字段定义
注释
NO_O_ID
10,000,000uniqueIDs
NO_D_ID
20uniqueIDs
NO_W_ID
2*WuniqueIDs
PrimaryKey:
(NO_W_ID,NO_D_ID,NO_O_ID)
(NO_W_ID,NO_D_ID,NO_O_ID)ForeignKey,references(O_W_ID,O_D_ID,O_ID)
2.3.6ORDER(定单)
字段名称
字段定义
注释
O_ID
10,000,000uniqueIDs
O_D_ID
20uniqueIDs
O_W_ID
2*WuniqueIDs
O_C_ID
96,000uniqueIDs
O_ENTRY_D
dateandtime
制单时间
O_CARRIER_ID
10uniqueIDs,ornull
货运代号
O_OL_CNT
from5to15
分录数
O_ALL_LOCAL
numeric,1digit
是否全部本地供货
PrimaryKey:
(O_W_ID,O_D_ID,O_ID)
(O_W_ID,O_D_ID,O_C_ID)ForeignKey,references(C_W_ID,C_D_ID,C_ID)
2.3.7ORDER_LINE(定单分录)
字段名称
字段定义
注释
OL_O_ID
10,000,000uniqueIDs
OL_D_ID
20uniqueIDs
OL_W_ID
2*WuniqueIDs
OL_NUMBER
15uniqueIDs
分录代码
OL_I_ID
200,000uniqueIDs
商品代码
OL_SUPPLY_W_ID
2*WuniqueIDs
供货仓库代码
OL_DELIVERY_D
dateandtime,ornull
发货时间
OL_QUANTITY
numeric,2digits
数量
OL_AMOUNT
numeric,6digits
价格
OL_DIST_INFO
fixedtext,size24
PrimaryKey:
(OL_W_ID,OL_D_ID,OL_O_ID,OL_NUMBER)
(OL_W_ID,OL_D_ID,OL_O_ID)ForeignKey,references(O_W_ID,O_D_ID,D_ID)
(OL_SUPPLY_W_ID,OL_I_ID)ForeignKey,references(S_W_ID,S_I_ID)
2.3.8ITEM(供货商品)
字段名称
字段定义
注释
I_ID
200,000uniqueIDs
通常是100,000
I_IM_ID
200,000uniqueIDs
商品图象代码
I_NAME
I_PRICE
numeric,5digits
价格
I_DATA
variabletext,size50
PrimaryKey:
I_ID
2.3.9STOCK(存货)
字段名称
字段定义
注释
S_I_ID
200,000uniqueIDs
通常是100,000
S_W_ID
2*WuniqueIDs
S_QUANTITY
numeric,4digits
库存
S_DIST_01
fixedtext,size24
S_DIST_01
fixedtext,size24
S_DIST_02
fixedtext,size24
S_DIST_03
fixedtext,size24
S_DIST_04
fixedtext,size24
S_DIST_05
fixedtext,size24
S_DIST_06
fixedtext,size24
S_DIST_07
fixedtext,size24
S_DIST_08
fixedtext,size24
S_DIST_09
fixedtext,size24
S_DIST_10
fixedtext,size24
S_YTD
numeric,8digits
累计供货数量
S_ORDER_CNT
numeric,4digits
累计定单数量
S_REMOTE_CNT
numeric,4digits
累计其他仓库供货数量
S_DATA
variabletext,size50
备注
PrimaryKey:
(S_W_ID,S_I_ID)
S_W_IDForeignKey,referencesW_ID
S_I_IDForeignKey,referencesI_ID
3.业务和用户界面
3.1输入域和显示域
输入域只能输入合法字符。
对于字符输入域,未输入部分转换为空格或空。
对于数字输入域,只能输入小于限额的数字,并且右对齐。
必须输入的输入域要在向数据库提交事务前检测,并当未输入时报错
输入域可以以任意顺序输入和修改:
用户可以在所有输入域中,向前或者向后移动输入光标;不能指定用户输入顺序;启动事务前,用户可以修改之前输入的内容。
数字输入域只能输入数字,如果输入了非数字则提示用户
事务结束后,所有显示域应更新为新内容
3.2业务
3.2.1新定单(New-Order)
在一个事务中输入一张完整定单。
它是中重量级的读写事务,发生频率高,要求响应时间短。
●输入仓库代码(W_ID),地区代码(D_W_ID,D_ID),客户代码(C_W_ID,C_D_ID_,C_ID),分录数(OL_CNT),各分录对应的商品代码(OL_I_ID)、供货仓库代码(OL_SUPPLY_W_ID)、数量(OL_QUANTITY)
●启动事务
●仓库(WAREHOUSE)中查询仓库代码(W_ID)。
取税率(W_TAX)
●地区(DISTRICT)中查询地区代码(D_W_ID,D_ID)。
取税率(D_TAX);取下一定单号(D_NEXT_O_ID)并且对其加一。
●客户(CUSTOMER)中查询客户代码(C_W_ID,C_D_ID,C_ID)。
取客户折扣率(C_DISCOUNT),姓(C_LAST),信用(C_CREDIT)
●新定单(NEW_ORDER)与定单(ORDER)中插入定单信息。
货运代码(O_CARRIER_ID)置空。
如果定单中的商品均在本地仓库,则O_ALL_LOCAL置1,否则置0。
●对每笔分录
✧ITEM中查询商品代码(I_ID)。
取价格(I_PRICE)、名称(I_NAME)、备注(I_DATA);如果商品代码不存在,报错并回滚事务
✧STOCK中查询商品代码(S_I_ID=OL_I_ID)与仓库代码(S_W_ID=OL_SUPPLY_W_ID)。
取库存(S_QUANTITY)、地区说明(S_DIST_xx,xx为地区代码)、备注(S_DATA);库存量减去商品数量(S_QUANTITY=S_QUANTITY-OL_QUANTITY);累计供货数量加上商品数量(S_YTD=S_YTD+OL_QUANTITY);累计定单数量(S_ORDER_CNT)加一;如果分录中的商品在其他仓库,则累计其他仓库供货数量加一(S_REMOTE_CNT)
✧计算价格(OL_AMOUNT=OL_QUANTITY*I_PRICE)
✧ORDER_LINE插入分录信息。
供货时间(OL_DELIVERY_D)置空;分录号(OL_NUMBER)赋值;地区信息(OL_DIST_INFO)赋值为(S_DIST_xx)
●计算定单总价格SUM(OL_AMOUNT)*(1-C_DISCOUNT)*(1+W_TAX+D_TAX)
●提交事务
3.2.2付款(Payment)
在一个事务中更新客户余额、地区、仓库的销售数据。
它是轻重量级的读写事务,发生频率高,要求响应时间短。
另外,此事务中有不按关键字访问CUSTOMER的情况。
●输入仓库代码(W_ID),地区代码(D_W_ID,D_ID),客户代码(C_W_ID,C_D_ID,C_ID)或者客户姓氏(C_W_ID,C_D_ID,C_LAST),支付金额(H_AMOUNT)
●启动事务
●仓库(WAREHOUSE)中查询仓库代码(W_ID)。
取名称(W_NAME),地址1(W_STREET_1),地址2(W_STREET_2),城市(W_CITY),州(W_STATE),邮政编码(W_ZIP),累计发生额(W_YTD)。
累计发生额加上支付金额(W_YTD=W_YTD+H_AMOUNT)
●地区(DISTRICT)中查询地区代码(D_W_ID,D_ID)。
取名称(D_NAME),地址1(D_STREET_1),地址2(D_STREET_2),城市(D_CITY),州(D_STATE),邮政编码(D_ZIP),累计发生额(D_YTD)。
累计发生额加上支付金额(D_YTD=D_YTD+H_AMOUNT)
●情况1由客户代码查找客户。
CUSTOMER中查询客户代码(C_W_ID,C_D_ID,C_ID)。
取姓名(C_FIRST,C_MIDDLE,C_LAST),地址1(C_STREET_1),地址2(C_STREET_2),城市(C_CITY),州(C_STATE),邮政编码(C_ZIP),电话(C_PHONE),登记日期(C_SINCE),信用(C_CREDIT),超支限额(C_CREDIT_LMT),折扣(C_DISCOUNT),欠款余额(C_BALANCE)。
欠款余额减去支付金额(C_BALANCE=C_BALANCE-H_AMOUNT),累计支付金额加上支付金额(C_YTD_PAYMENT=C_YTD_PAYMENT+H_AMOUNT),支付次数(C_PAYMENT_CNT)加一。
情况2由客户姓氏查找客户。
CUSTOMER中查询客户姓氏(C_W_ID,C_D_ID,C_LAST),查询时显示按客户名(C_FIRST)排序的列表由用户选择。
当用户选择某客户时,取姓名(C_FIRST,C_MIDDLE,C_LAST),地址1(C_STREET_1),地址2(C_STREET_2),城市(C_CITY),州(C_STATE),邮政编码(C_ZIP),电话(C_PHONE),起始日期(C_SINCE),信用(C_CREDIT),超支限额(C_CREDIT_LMT),折扣(C_DISCOUNT),欠款余额(C_BALANCE)。
若客户列表有n行,则平均查找客户信息n/2行。
欠款余额减去支付金额(C_BALANCE=C_BALANCE-H_AMOUNT),累计支付金额加上支付金额(C_YTD_PAYMENT=C_YTD_PAYMENT+H_AMOUNT),支付次数(C_PAYMENT_CNT)加一。
●如果信用(C_CREDIT)为“BC”,则客户备注(C_DATA)右移,左端插入客户代码(C_W_ID,C_D_ID,C_ID)、地区代码(D_ID)、仓库代码(W_ID)、支付金额(H_AMOUNT)
●历史记录备注(H_DATA)追加仓库名称(W_NAME)、地区名称(D_NAME)
●提交事务
3.2.3查询定单(Order-Status)
显示指定客户最近的定单状态。
它是中重量级的只读事务,发生频率高。
另外,此事务中有不按关键字访问CUSTOMER的情况。
●输入客户代码(C_W_ID,C_D_ID,C_ID)或客户姓氏(C_W_ID,C_D_ID,C_LAST)
●启动事务
●情况1由客户代码查找客户。
CUSTOMER中查询客户代码(C_W_ID,C_D_ID,C_ID)。
取姓名(C_FIRST,C_MIDDLE,C_LAST),欠款余额(C_BALANCE)。
情况2由客户姓氏查找客户。
CUSTOMER中查询客户姓氏(C_W_ID,C_D_ID,C_LAST),查询时显示按客户名(C_FIRST)排序的列表由用户选择。
当用户选择某客户时,取姓名(C_FIRST,C_MIDDLE,C_LAST),欠款余额(C_BALANCE)。
若客户列表有n行,则平均取客户信息n/2行。
●定单(ORDER)中查询仓库代码(O_W_ID=C_W_ID)、地区代码(O_D_ID=O_D_ID)、客户代码(O_C_ID=C_ID),并且定单代码(O_ID)最大的行。
取定单代码(O_ID),制单日期(O_ENTRY_D),货运代码(O_CARRIER_ID)
●定单分录(ORDER_LINE)中查询满足仓库代码(O_W_ID=OL_W_ID)、地区代码(O_D_ID=OL_D_ID)、定单代码(O_ID=OL_O_ID)条件的所有记录,并按定单分录代码(OL_I_ID)排序。
取供应仓库代码(OL_SUPPLY_W_ID),数量(OL_QUANTITY),金额(OL_QUANTITY),发货日期(OL_DELIVERY_D)
●提交事务
3.2.4发货(Delivery)
以10笔新订单(NEW_ORDER,未发货订单)为一批处理,一张订单的处理必须在一个读写型事务中完成。
至于一个数据库事务中只处理一张订单还是处理多张订单,在实现时可以根据情况调整。
一笔业务处理包括一个或多个数据库事务(最多10个),发生频率低,响应时间要求低。
输入仓库(W_ID),对其下属地区(D_W_ID,D_ID),和指定的运输代码(O_CARRIER_ID)
启动事务
新订单(NEW_ORDER)中查询仓库(NO_W_ID=W_ID)、地区(NO_D_ID=D_ID)的最小订单号(NO_O_ID),如果不存在则略过以下步骤。
新订单(NEW_ORDER)中删除记录
订单(ORDER)中查询仓库(O_W_ID=W_ID)、地区(O_D_ID=D_ID)、订单号(O_O_ID=NO_O_ID),取客户代码(O_C_ID),更新运输代码(O_CARRIER_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- TPCC 性能 测试