数据库测试是依据数据库设计规范对软件系统的数据库结构、数据表及其之间的数据调用关系进行的测试。本文主要介绍了两项常用的测试基准 TPC-C 和 TPC-H ,并通过达梦数据库 DM8 分别进行了数据库测试。
制定测试大纲,编写测试用例,测试执行,形成测试报告。
功能、性能、可靠性、安全性、易用性、维护性、可扩展性、兼容性。
针对数据库不同的使用场景 TPC 组织发布了多项测试标准。其中被业界广泛接受和使用的有 TPC-C 、TPC-H 和 TPC-DS。
TPC-C、TPC-H 和 TPC-DS 三者最大的一个区别是,TPC-C 是针对 OLTP 数据库进行性能测试,而 TPC-H 和 TPC-DS 是针对 OLAP 数据库进行测试的。本文主要讲解和实践 TPC-C 和 TPC-H 基准测试。
TPC(transaction processing performance council)被称为事务处理性能委员会,负责定义诸如 TPC-C、TPC-H & TPC-R 和 TPC-W 基准测试之类的事务处理与数据库性能基准测试,并依据这些基准测试项目发布客观性能数据。
TPC-C 是衡量联机事务处理(OLTP,Online Transaction Processing)系统的工业标准,是行业中公认的权威和最为复杂的在线事务处理基准测试。它通过模拟仓库和订单管理系统,测试广泛的数据库功能,包括查询、更新和 mini-batch 事务(队列式小批量事务)。TPC-C基准测试针对一种模拟订单录入与销售环境测量每分钟商业事务(tpmC)吞吐量。
TPC-C 测试用到的模型是一个大型的商品批发销售公司,它拥有若干个分布在不同区域的商品仓库。每个仓库负责为10个销售点供货,其中每个销售点为3000个客户提供服务,每个客户提交的订单中,平均每个订单有10项产品(5-15件),所有订单中约1%的产品在其直接所属的仓库中没有存货,必须由其他区域的仓库来供货。同时,每个仓库都要维护公司销售的100000种商品的库存记录。
表名 | 意义 | 数量级 |
---|---|---|
C_ITEM | 商品种类:固定值 | 100K |
C_WAREHOUSE | 仓库数 | W |
C_STOCK | 库存数=仓库数*商品种类 | W*100K |
C_DISTRICT | 分区数=仓库数*10 | W*10 |
C_CUSTOMER | 客户数=分区数*3000 | W*30K |
C_ORDER | 订单数=客户数 | W*30K+ |
C_HISTORY | 历史订单数=客户数 | W*30K+ |
C_NEW_ORDER | 新订单数=订单数*900/3000 | W*9K+ |
C_ORDER_LINE | 订单行数=订单数100.99… | W*300K+ |
事务类型 | 混合的最小百分比 | 最小按键时间 | 第90个百分比响应时间约束 | 最小平均时间分布思考 |
---|---|---|---|---|
新订单 | n/a | 18 秒 | 5 秒 | 12 秒 |
支付 | 43 | 3 秒 | 5 秒 | 12 秒 |
订单状态 | 4 | 2 秒 | 5 秒 | 10 秒 |
发货 | 4 | 2 秒 | 5 秒 | 5 秒 |
库存级别 | 4 | 2 秒 | 20 秒 | 5 秒 |
(1) 初始化数据库
(2) 建表、装载数据
(3) 扩库及日志和创建索引
(4) 数据冷备份
(5) 性能调优
(6) 配置TPCC工具进行测试
BenchmarkSQL 是一款经典的开源数据库测试工具,其包含 TPCC 测试脚本,应用范围广泛。支持达梦数据库、MySQL、Oracle、EnterpriseDB、PostgreSQL 以及 SQL Server 等数据库的性能压力测试。
BenchmarkSQL 是基于 Java 语言开发的,可以跨平台运行。在安装压测工具之前,必须先安装 JDK(要求 JDK1.7 及以上)并且配置 JAVA 环境变量。
BenchmarkSQL 是非标准TPC-C模型,纯压力测试。
(1) 执行SQL工具建表
./runSQL.sh props.pg sqlTableCreates
(2) 执行数据装载工具装载数据
./runLoader.sh props.pg numWarehouses 100
(3) 执行测试工具
./runBenchmark.sh props.pg
(4) 为提高性能,通常采用后台运行的方式
nohup ./runBenchmark.sh props.pg > /dev/null 2>&1 &
(5) 测试报告打印在run/log文件下
Benchmarksql.log
(1) TPCC基准测试一致性验证语句
(Select w_id, w_ytd from warehouse) except (select d_w_id, sum(d_ytd) from district group by d_w_id);
(Select d_w_id, d_id, D_NEXT_O_ID - 1 from district) except (select o_w_id, o_d_id, max(o_id) from oorder group by o_w_id, o_d_id);
(Select d_w_id, d_id, D_NEXT_O_ID - 1 from district) except (select no_w_id, no_d_id, max(no_o_id) from new_order group by no_w_id, no_d_id);
select * from (select (count(no_o_id)-(max(no_o_id)-min(no_o_id)+1)) as diff from new_order group by no_w_id, no_d_id) where diff != 0;
(select o_w_id, o_d_id, sum(o_ol_cnt) from oorder group by o_w_id, o_d_id) except (select ol_w_id, ol_d_id, count(ol_o_id) from order_line group by ol_w_id, ol_d_id);
(select d_w_id, sum(d_ytd) from district group by d_w_id) except (Select w_id, w_ytd from warehouse);
连接到数据库做以上查询,如果结果全为0行,则说明tpcc库是一致的,否则说明此库在运行过程中数据出现混乱。
(2) 验证 bmsql_history 表新增的记录数
transaction count * 43% 约等于 bmsql_history 表增加的数据量,不能存在数量级的偏差。
TPC-H 是一个决策支持的基准,它由一系列面向商务应用的查询和并行数据修改组成。基准里选择的查询和组成数据库的数据在商业上都具有广泛的代表性并且易于实现。主要针对OLAP数据库进行测试的。
TPC-H 数据库由八个单独的表(基本表)组成和22个查询语句。
TPCH 标准包含执行功能测试和吞吐率测试。
TPC-H是一款面向商品零售业的决策支持系统测试基准,它定义了 8 张表,22 个查询,遵循 SQL92;
表名 | 行数 |
---|---|
SUPPLIER | SF*10000 |
PART | SF*200000 |
PARTSUPP | SF*800000 |
CUSTOMER | SF*150000 |
ORDERS | SF*1500000 |
LINEITEM | SF*6000000 |
NATION | 25 |
REGION | 5 |
(1)使用 dbgen 工具生成数据
(2)使用 dmfldr 工具 加载数据
(3)通过 Q22 查询验证
利用 TPCC 测试工具 BENCHMARKSQL,测试单机 10 warehouse 的性能。
环境准备:
具体步骤:
(1) 切换为 root,在 opt 目录下创建 tpcc 文件夹,移动安装包到 /opt/tpcc 并解压,添加 dmdba:dinstall 权限,得到如下文件。
(2) 进入 run 文件夹,查看 props.dm 文件。
(3) 修改配置。
需要关注的参数:
(4) 在DM管理工具里创建表空间、用户和表。
(5) 查看表中数据量,均为0。
(6) 执行./runLoader.sh 装载数据。
偶尔因为网络原因导致加载仓库顺序有变化,属于正常现象。
(7) 查看当前数据量。
(8) 创建序列。
(9) 执行测试工具。
225.23÷496.42≈45.37% ,与 43%相比偏高了。
结果参数说明:
(10) 执行TPCC基准测试一致性验证语句,结果都为空。
(11) 验证 bmsql_history 表新增的记录数。
transaction count * 43% 约等于 bmsql_history 表增加的数据量。
利用TPCH测试工具简单进行1G规模测试 。
具体步骤:
(1) 使用dbgen生成数据。
(2) 在数据库中创建表结构。
(3) 利用 degen 工具模拟生成1G的数据。会在当前目录下生成数据源文件,用来之后 dmfldr 导入的元数据。
(4) 返回 linux 目录,修改每个表的 dmfldr 控制文件。
主要是修改两个路径,如下图所示。
(5) 使用 dmfldr 工具加载数据。( dmfldr 的路径在 /dm/dmdba/dmdbms/bin )
依次执行:
./dmfldr userid=SYSDBA/SYSDBA:5236 control=\'/opt/tpch/linux/customer.ctrl\'
./dmfldr userid=SYSDBA/SYSDBA:5236 control=\'/opt/tpch/linux/lineitem.ctrl\'
./dmfldr userid=SYSDBA/SYSDBA:5236 control=\'/opt/tpch/linux/nation.ctrl\'
./dmfldr userid=SYSDBA/SYSDBA:5236 control=\'/opt/tpch/linux/orders.ctrl\'
./dmfldr userid=SYSDBA/SYSDBA:5236 control=\'/opt/tpch/linux/part.ctrl\'
./dmfldr userid=SYSDBA/SYSDBA:5236 control=\'/opt/tpch/linux/partsupp.ctrl\'
./dmfldr userid=SYSDBA/SYSDBA:5236 control=\'/opt/tpch/linux/region.ctrl\'
./dmfldr userid=SYSDBA/SYSDBA:5236 control=\'/opt/tpch/linux/supplier.ctrl\'
(此处只列举了一个 customer 的导入进程。)
(6) 更新统计信息。
(7) 通过 Q22 查询验证。(此处为Q20)
本文介绍了数据库测试中的 TPCC 和 TPCH 两项测试基准,并完成实践 DM8 数据库测试。
如果文中有误,欢迎指出,大家共同交流进步!
更多达梦技术资讯,请访问达梦技术社区:
达梦数据库 - 新一代大型通用关系型数据库 | 达梦云适配中心
https://eco.dameng.com/