全部产品
云市场
云游戏

PolarDB-X TPC-H 50G测试说明

更新时间:2020-06-16 21:32:14

TPC-H 说明

TPC-H 是业界常用的一套 Benchmark,由 TPC 委员会制定发布,用于评测数据库的分析型查询能力。TPC-H 查询包含 8 张数据表、22 条复杂的 SQL 查询,大多数查询包含若干表 Join、子查询和 Group-by 聚合等。

测试设计

以下测试结果基于 50G 数据量(Scalar Factor = 50),其中主要表数据量如下:LINEITEM表约3亿行,ORDERS表7500万行,PARSUPP表4000万行。

以Q18为例,包含4张千万到亿级表的Join(含一个子查询 SemiJoin)和Group-by聚合。在PolarDB-X计算资源DRDS实例上查询执行时间约11秒。

  1. select c_name, c_custkey, o_orderkey, o_orderdate, o_totalprice, sum(l_quantity)
  2. from CUSTOMER, ORDERS, LINEITEM
  3. where o_orderkey in (
  4. select l_orderkey
  5. from LINEITEM
  6. group by l_orderkey
  7. having sum(l_quantity) > 314
  8. )
  9. and c_custkey = o_custkey
  10. and o_orderkey = l_orderkey
  11. group by c_name, c_custkey, o_orderkey, o_orderdate, o_totalprice
  12. order by o_totalprice desc, o_orderdate
  13. limit 100;

更多关于TPCH的信息,请参见TPCH22条SQL语句分析

测试结果

  • 企业版测试环境:PolarDB-X计算资源DRDS实例企业版32c128G(单节点16c64G)、4台RDS MySQL 5.7实例(8c32g独享型)。
  • 标准版测试环境:PolarDB-X计算资源DRDS实例标准版16c64G(单节点8c32G)、4台RDS MySQL 5.7实例(4c32g 独享型)。

:PolarDB-X计算资源DRDS实例入门版不具备Parallel Query能力,不建议用于执行分析型查询。

结果

Query 企业版(单位:秒) 标准版(单位:秒)
Q01 55.82 111.84
Q02 6.12 11.54
Q03 15.99 30
Q04 17.71 36.56
Q05 10.89 23.01
Q06 8.06 16.76
Q07 17.09 34.80
Q08 13.44 26.09
Q09 53.81 101.51
Q10 8.73 19.67
Q11 18.25 19.74
Q12 8.80 18.60
Q13 14.15 31.33
Q14 17.49 42.43
Q15 20.62 42.79
Q16 2.13 4.15
Q17 1.93 4.07
Q18 11.01 22.82
Q19 12.97 27.61
Q20 27.77 49.25
Q21 38.84 68.08
Q22 5.27 11.29
总计 386.77 754.65

如何运行TPCH测试?

Step 1. 准备压力机ECS

首先准备一个ECS,这是以下所有操作的基础,准备数据、运行压测等都用的是这台机器。

  • 建议选择VPC网络,经典网络有可能遇到RDS某些规格没有库存。记住这个VPC的ID和名称,之后我们所有的东西都部署在这个VPC里面。

  • 建议使用最新的Debian或者CentOS镜像,防止编译时缺少依赖库。

Step 2. 准备数据中转的RDS

首先准备一个RDS用于导入数据,因为TPC-H DBGEN生成的是 .tbl 文件,需要用LOAD DATA命令导入到MySQL,而PolarDB-X暂不支持这个命令。

创建RDS,注意要和ECS放在同一个VPC中。

在ECS上下载编译TPC-H DBGEN,详情请参见使用TPC-H测试性能TPC-H数据导入MySQL教程

最后用LOAD DATA命令将生成的数据导入RDS:

  1. mysql --local-infile -hrm-XXXXXXXXXX.mysql.rds.aliyuncs.com -u<user> -p<password>
  1. LOAD DATA LOCAL INFILE 'customer.tbl' INTO TABLE customer FIELDS TERMINATED BY '|';

(其他几张表以此类推)

Step 3. 准备压测用的PolarDB-X计算资源DRDS实例

创建PolarDB-X计算资源DRDS实例以及相应的RDS实例,注意要和ECS放在同一个VPC中。

在PolarDB-X计算资源DRDS实例上创建库和表,注意要指定分库分表方式,建议使用以下表结构:

  1. CREATE TABLE `customer` (
  2. `c_custkey` int(11) NOT NULL,
  3. `c_name` varchar(25) NOT NULL,
  4. `c_address` varchar(40) NOT NULL,
  5. `c_nationkey` int(11) NOT NULL,
  6. `c_phone` varchar(15) NOT NULL,
  7. `c_acctbal` decimal(15,2) NOT NULL,
  8. `c_mktsegment` varchar(10) NOT NULL,
  9. `c_comment` varchar(117) NOT NULL,
  10. PRIMARY KEY (`c_custkey`)
  11. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 dbpartition by hash(`c_custkey`) tbpartition by hash(`c_custkey`) tbpartitions 4;
  12. CREATE TABLE `lineitem` (
  13. `l_orderkey` int(11) NOT NULL,
  14. `l_partkey` int(11) NOT NULL,
  15. `l_suppkey` int(11) NOT NULL,
  16. `l_linenumber` int(11) NOT NULL,
  17. `l_quantity` decimal(15,2) NOT NULL,
  18. `l_extendedprice` decimal(15,2) NOT NULL,
  19. `l_discount` decimal(15,2) NOT NULL,
  20. `l_tax` decimal(15,2) NOT NULL,
  21. `l_returnflag` varchar(1) NOT NULL,
  22. `l_linestatus` varchar(1) NOT NULL,
  23. `l_shipdate` date NOT NULL,
  24. `l_commitdate` date NOT NULL,
  25. `l_receiptdate` date NOT NULL,
  26. `l_shipinstruct` varchar(25) NOT NULL,
  27. `l_shipmode` varchar(10) NOT NULL,
  28. `l_comment` varchar(44) NOT NULL,
  29. PRIMARY KEY (`l_orderkey`,`l_linenumber`)
  30. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 dbpartition by RIGHT_SHIFT(`l_orderkey`,6) tbpartition by RIGHT_SHIFT(`l_orderkey`,6) tbpartitions 4;
  31. CREATE TABLE `orders` (
  32. `o_orderkey` int(11) NOT NULL,
  33. `o_custkey` int(11) NOT NULL,
  34. `o_orderstatus` varchar(1) NOT NULL,
  35. `o_totalprice` decimal(15,2) NOT NULL,
  36. `o_orderdate` date NOT NULL,
  37. `o_orderpriority` varchar(15) NOT NULL,
  38. `o_clerk` varchar(15) NOT NULL,
  39. `o_shippriority` int(11) NOT NULL,
  40. `o_comment` varchar(79) NOT NULL,
  41. PRIMARY KEY (`O_ORDERKEY`)
  42. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 dbpartition by RIGHT_SHIFT(`O_ORDERKEY`,6) tbpartition by RIGHT_SHIFT(`O_ORDERKEY`,6) tbpartitions 4;
  43. CREATE TABLE `part` (
  44. `p_partkey` int(11) NOT NULL,
  45. `p_name` varchar(55) NOT NULL,
  46. `p_mfgr` varchar(25) NOT NULL,
  47. `p_brand` varchar(10) NOT NULL,
  48. `p_type` varchar(25) NOT NULL,
  49. `p_size` int(11) NOT NULL,
  50. `p_container` varchar(10) NOT NULL,
  51. `p_retailprice` decimal(15,2) NOT NULL,
  52. `p_comment` varchar(23) NOT NULL,
  53. PRIMARY KEY (`p_partkey`)
  54. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 dbpartition by hash(`p_partkey`) tbpartition by hash(`p_partkey`) tbpartitions 4;
  55. CREATE TABLE `partsupp` (
  56. `ps_partkey` int(11) NOT NULL,
  57. `ps_suppkey` int(11) NOT NULL,
  58. `ps_availqty` int(11) NOT NULL,
  59. `ps_supplycost` decimal(15,2) NOT NULL,
  60. `ps_comment` varchar(199) NOT NULL,
  61. PRIMARY KEY (`ps_partkey`,`ps_suppkey`)
  62. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 dbpartition by hash(`ps_partkey`) tbpartition by hash(`ps_partkey`) tbpartitions 4;
  63. CREATE TABLE `supplier` (
  64. `s_suppkey` int(11) NOT NULL,
  65. `s_name` varchar(25) NOT NULL,
  66. `s_address` varchar(40) NOT NULL,
  67. `s_nationkey` int(11) NOT NULL,
  68. `s_phone` varchar(15) NOT NULL,
  69. `s_acctbal` decimal(15,2) NOT NULL,
  70. `s_comment` varchar(101) NOT NULL,
  71. PRIMARY KEY (`s_suppkey`)
  72. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 dbpartition by hash(`s_suppkey`) tbpartition by hash(`s_suppkey`) tbpartitions 4;
  73. CREATE TABLE `nation` (
  74. `n_nationkey` int(11) NOT NULL,
  75. `n_name` varchar(25) NOT NULL,
  76. `n_regionkey` int(11) NOT NULL,
  77. `n_comment` varchar(152) DEFAULT NULL,
  78. PRIMARY KEY (`n_nationkey`)
  79. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 broadcast;
  80. CREATE TABLE `region` (
  81. `r_regionkey` int(11) NOT NULL,
  82. `r_name` varchar(25) NOT NULL,
  83. `r_comment` varchar(152) DEFAULT NULL,
  84. PRIMARY KEY (`r_regionkey`)
  85. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 broadcast;

Step 4. 使用DTS同步数据到PolarDB-X

Step 4.1. 登录 DTS 控制台,选择【数据迁移】-【创建迁移任务】

4.1

Step 4.2. 填入刚刚创建的RDS实例和PolarDB-X计算资源DRDS实例信息:

4.2

Step 4.3.选择所有要同步的表(选择左边的项目,点 > 按钮放到右边),然后点【高级设置】

4.3

Step 4.4.点【预览】,确认下源端、目标端的库名和表名符合预期

4.4

Step 4.5.点【预检查并启动】,规格建议选 large,等待同步任务完成。

同步完成后,DTS和中转数据使用的RDS可以释放。

Step 5. 测试

运行TPCH测试前,使用ANALYZE命令采集统计信息(由于刚刚导入了大量数据,当前统计信息可能不准确,影响执行计划生成):

  1. analyze table customer;
  2. analyze table lineitem;
  3. analyze table nation;
  4. analyze table orders;
  5. analyze table part;
  6. analyze table partsupp;
  7. analyze table region;
  8. analyze table supplier;

最后,在压力机上使用MySQL客户端连接到PolarDB-X运行TPCH查询。