TDSQL Boundless TPC-C 测试

提供 TDSQL Boundless 的 TPC-C 测试报告,作为 TDSQL Boundless 不同版本的性能对比基准。

相关产品
TDSQL Boundless 产品页,含版本规格、价格与购买入口。

一、测试概述

注意:说明:

注意:TPC-C 是业界常用的一套 Benchmark,由 TPC 委员会制定发布,用于评测数据库的联机交易处理(偏向 OLTP)能力。主要涉及10张表,包含了 NewOrder(新订单的生成)、Payment(订单付款)、OrderStatus(最近订单查询)、Delivery(配送)和 StockLevel(库存缺货状态分析)等五类业务事务模型。TPC-C 使用 tpmC 值(Transactions per Minute)来衡量系统最大有效吞吐量(MQTh,Max Qualified Throughput),其中Transactions 以 NewOrder Transaction 为准,即最终衡量单位为每分钟处理的新订单数。

二、硬件环境

节点类型 节点规格 节点个数
对等节点 16Core CPU/32GB Memory/增强型 SSD 云硬盘300GB 3
管理节点 4Core CPU/8GB Memory 3

三、软件版本

节点类型 软件版本
对等节点 v21.1.0
BenchmarkSQL v5.0

四、参数配置

set persist audit_log_policy = "NONE";set persist max_prepared_stmt_count = 1000000;set persist temptable_max_mmap = 214748364800

五、准备压测工具

下载社区的开源的 BenchmarkSQL 压测工具,解压缩并进行测试。

六、准备测试数据

基于1000 Warehouse 定量进行。在压测机上执行如下命令,修改 props.mysql配置文件,并填写对应的实例连接信息:

cd benchmarksql/runvi props.mysql

其中,配置文件 props.mysql及主要参数如下:

db=mysqldriver=com.mysql.jdbc.Driver conn=jdbc:mysql://{ip}:{port}/tpcc?useSSL=false&useServerPrepStmts=true&useConfigs=maxPerformance&rewriteBatchedStatements=true&cachePrepStmts=true&prepStmtCacheSize=1000&prepStmtCacheSqlLimit=2048user={user}password={password}warehouses=1000 loadWorkers=20 terminals={terminals} runTxnsPerTerminal=0runMins=5 limitTxnsPerMin=0 terminalWarehouseFixed=truenewOrderWeight=45paymentWeight=43orderStatusWeight=4deliveryWeight=4stockLevelWeight=4

创建数据库:

create database tpcc;

开始创建表和索引,修改核心表的表定义为 Hash 分区表,默认创建9个分区:

cd benchmarksql/run/sql.common# 修改表结构,核心表定义为Hash分区表,默认9个分区cp tableCreates.sql tableCreates_tdsql.sqlvi tableCreates_tdsql.sql CREATE TABLE bmsql_config (cfg_name varchar(30) primary key,cfg_value varchar(50));CREATE TABLE bmsql_warehouse ( w_id integer not null, w_ytd decimal(12,2), w_tax decimal(4,4), w_name varchar(10), w_street_1 varchar(20), w_street_2 varchar(20), w_city varchar(20), w_state char(2), w_zip char(9), primary key(w_id)) partition by hash(w_id) partitions 9;CREATE TABLE bmsql_district ( d_w_id integer not null, d_id integer not null, d_ytd decimal(12,2), d_tax decimal(4,4), d_next_o_id integer, d_name varchar(10), d_street_1 varchar(20), d_street_2 varchar(20), d_city varchar(20), d_state char(2), d_zip char(9), PRIMARY KEY (d_w_id, d_id)) partition by hash(d_w_id) partitions 9;CREATE TABLE bmsql_customer ( c_w_id integer not null, c_d_id integer not null, c_id integer not null, c_discount decimal(4,4), c_credit char(2), c_last varchar(16), c_first varchar(16), c_credit_lim decimal(12,2), c_balance decimal(12,2), c_ytd_payment decimal(12,2), c_payment_cnt integer, c_delivery_cnt integer, c_street_1 varchar(20), c_street_2 varchar(20), c_city varchar(20), c_state char(2), c_zip char(9), c_phone char(16), c_since timestamp, c_middle char(2), c_data varchar(500), PRIMARY KEY (c_w_id, c_d_id, c_id)) partition by hash(c_w_id) partitions 9;CREATE TABLE bmsql_history ( hist_id integer, h_c_id integer, h_c_d_id integer, h_c_w_id integer, h_d_id integer, h_w_id integer, h_date timestamp, h_amount decimal(6,2), h_data varchar(24)) partition by hash(h_w_id) partitions 9;CREATE TABLE bmsql_new_order ( no_w_id integer not null , no_d_id integer not null, no_o_id integer not null, PRIMARY KEY (no_w_id, no_d_id, no_o_id)) partition by hash(no_w_id) partitions 9;CREATE TABLE bmsql_oorder ( o_w_id integer not null, o_d_id integer not null, o_id integer not null, o_c_id integer, o_carrier_id integer, o_ol_cnt integer, o_all_local integer, o_entry_d timestamp, PRIMARY KEY (o_w_id, o_d_id, o_id)) partition by hash(o_w_id) partitions 9;CREATE TABLE bmsql_order_line ( ol_w_id integer not null, ol_d_id integer not null, ol_o_id integer not null, ol_number integer not null, ol_i_id integer not null, ol_delivery_d timestamp, ol_amount decimal(6,2), ol_supply_w_id integer, ol_quantity integer, ol_dist_info char(24), PRIMARY KEY (ol_w_id, ol_d_id, ol_o_id, ol_number)) partition by hash(ol_w_id) partitions 9;CREATE TABLE bmsql_item ( i_id integer not null, i_name varchar(24), i_price decimal(5,2), i_data varchar(50), i_im_id integer, PRIMARY KEY (i_id));CREATE TABLE bmsql_stock ( s_w_id integer not null, s_i_id integer not null, s_quantity integer, s_ytd integer, s_order_cnt integer, s_remote_cnt integer, s_data varchar(50), s_dist_01 char(24), s_dist_02 char(24), s_dist_03 char(24), s_dist_04 char(24), s_dist_05 char(24), s_dist_06 char(24), s_dist_07 char(24), s_dist_08 char(24), s_dist_09 char(24), s_dist_10 char(24), PRIMARY KEY (s_w_id, s_i_id)) partition by hash(s_w_id) partitions 9;

库表创建完毕后,开始导入压测数据:

cd ..nohup ./runLoader.sh props.mysql &

数据导入完成后,执行如下 SQL 创建索引:

create index bmsql_customer_idx1 on bmsql_customer (c_w_id, c_d_id, c_last, c_first);create unique index bmsql_oorder_idx1 on bmsql_oorder (o_w_id, o_d_id, o_carrier_id, o_id);

七、执行测试

运行以下命令运行 TPC-C 测试:

cd benchmarksql/run./runBenchmark.sh props.mysql

八、测试结果

线程数 tpmTOTAL tpmC (NewOrders)
64 208,948.14 94,035.97
128 310,788.33 139,550.15
256 379,050.95 170,517.90
512 412,147.72 185,392.99
1,024 434,737.57 195,442.64
赞 (0)
上一篇 4天前
下一篇 4天前