测试TPCC性能

  1. 下载TPCC标准测试工具BenchmarkSQL5.0**。**
  2. 将目录lib/postgresql下面的*.jar 替换为openGauss适配的jar包。

1. $ pwd 2. /your path/benchmarksql-5.0/lib/postgres 3. $ ls 4. postgresql.jar #openGauss jdbc驱动。 5. postgresql-9.3-1102.jdbc41.jar.bak # 自带jar备份。

openGauss适配的JDBC版本包获取路径为openGauss-x.x.x-JDBC .tar.gz。 3. 进入benchmarksql-5.0根目录, 输入ant命令进行编译。

1. $ cd /your path/benchmarksql-5.0/ 2. $ ant

编译成功后会生成build和dist两个目录。 4. 创建benchmarkSQL配置文件,使用benchmarkSQL前需要配置数据库相关的信息, 包括数据库账号、密码、端口、数据库名称.。

1. $ cd /your path/benchmarksql-5.0/run 2. $ cp props.pg props.openGauss.1000w 3. $ vim props.openGauss.1000w

从props.pg拷贝一份配置文件并按如下修改,斜体处请根据真实情况进行修改。

``` db=postgres driver=org.postgresql.Driver // 修改连接字符串, 包含IP、端口号、数据库,其中8.92.4.238为数据库服务端的千兆网卡IP。 conn=jdbc:postgresql://8.92.4.238:21579/tpcc1000?prepareThreshold=1&batchMode=on&fetchsize=10 // 设置数据库登录用户和密码。 user=bot password=XXXXXXXX

warehouses=1000 loadWorkers=200

// 设置最大并发数量, 跟服务端最大work数对应。 terminals=812 //要为每个终端运行指定事务—runMins必须等于零 runTxnsPerTerminal=0 //要运行指定的分钟 - runTxnsPerTerminal必须等于零 runMins=5 //每分钟总事务数 limitTxnsPerMin=0

1. //在4.x兼容模式下运行时,设置为True。
2. //设置为false以均匀使用整个配置的数据库。
3. terminalWarehouseFixed=false

5. //以下五个值相加之和为100。
6. //45、43、4、4和4的默认百分比与TPC-C规范匹配。
7. newOrderWeight=45
8. paymentWeight=43
9. orderStatusWeight=4
10. deliveryWeight=4
11. stockLevelWeight=4

13. //创建文件夹以收集详细结果数据。
14. //通过注释取消此内容。
15. resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS
16. osCollectorScript=./misc/os_collector_linux.py
17. osCollectorInterval=1
18. //收集OS负载信息。
19. osCollectorSSHAddr=osuer@10.44.133.78
20. osCollectorDevices=net_enp3s0 blk_nvme0n1 blk_nvme1n1 blk_nvme2n1 blk_nvme3n1
21. ```
  1. TPCC导入数据前准备。

使用如下文件替换benchmarkSQL中的文件,路径为benchmarksql-5.0/run/sql.common/。该文件主要增加了两个表空间和一些附加数据属性。

``` 1. CREATE TABLESPACE example2 relative location 'tablespace2'; 2. CREATE TABLESPACE example3 relative location 'tablespace3';

  1. create table bmsql_config (
  2. cfg_name varchar(30),
  3. cfg_value varchar(50)
  4. );

  5. create table bmsql_warehouse (

  6. w_id integer not null,
  7. w_ytd decimal(12,2),
  8. w_tax decimal(4,4),
  9. w_name varchar(10),
  10. w_street_1 varchar(20),
  11. w_street_2 varchar(20),
  12. w_city varchar(20),
  13. w_state char(2),
  14. w_zip char(9)
  15. ) WITH (FILLFACTOR=80);

  16. create table bmsql_district (

  17. d_w_id integer not null,
  18. d_id integer not null,
  19. d_ytd decimal(12,2),
  20. d_tax decimal(4,4),
  21. d_next_o_id integer,
  22. d_name varchar(10),
  23. d_street_1 varchar(20),
  24. d_street_2 varchar(20),
  25. d_city varchar(20),
  26. d_state char(2),
  27. d_zip char(9)
  28. ) WITH (FILLFACTOR=80);

  29. create table bmsql_customer (

  30. c_w_id integer not null,
  31. c_d_id integer not null,
  32. c_id integer not null,
  33. c_discount decimal(4,4),
  34. c_credit char(2),
  35. c_last varchar(16),
  36. c_first varchar(16),
  37. c_credit_lim decimal(12,2),
  38. c_balance decimal(12,2),
  39. c_ytd_payment decimal(12,2),
  40. c_payment_cnt integer,
  41. c_delivery_cnt integer,
  42. c_street_1 varchar(20),
  43. c_street_2 varchar(20),
  44. c_city varchar(20),
  45. c_state char(2),
  46. c_zip char(9),
  47. c_phone char(16),
  48. c_since timestamp,
  49. c_middle char(2),
  50. c_data varchar(500)
  51. ) WITH (FILLFACTOR=80) tablespace example2;

  52. create sequence bmsql_hist_id_seq;

  53. create table bmsql_history (

  54. hist_id integer,
  55. h_c_id integer,
  56. h_c_d_id integer,
  57. h_c_w_id integer,
  58. h_d_id integer,
  59. h_w_id integer,
  60. h_date timestamp,
  61. h_amount decimal(6,2),
  62. h_data varchar(24)
  63. ) WITH (FILLFACTOR=80);

  64. create table bmsql_new_order (

  65. no_w_id integer not null,
  66. no_d_id integer not null,
  67. no_o_id integer not null
  68. ) WITH (FILLFACTOR=80);

  69. create table bmsql_oorder (

  70. o_w_id integer not null,
  71. o_d_id integer not null,
  72. o_id integer not null,
  73. o_c_id integer,
  74. o_carrier_id integer,
  75. o_ol_cnt integer,
  76. o_all_local integer,
  77. o_entry_d timestamp
  78. ) WITH (FILLFACTOR=80);

  79. create table bmsql_order_line (

  80. ol_w_id integer not null,
  81. ol_d_id integer not null,
  82. ol_o_id integer not null,
  83. ol_number integer not null,
  84. ol_i_id integer not null,
  85. ol_delivery_d timestamp,
  86. ol_amount decimal(6,2),
  87. ol_supply_w_id integer,
  88. ol_quantity integer,
  89. ol_dist_info char(24)
  90. ) WITH (FILLFACTOR=80);

  91. create table bmsql_item (

  92. i_id integer not null,
  93. i_name varchar(24),
  94. i_price decimal(5,2),
  95. i_data varchar(50),
  96. i_im_id integer
  97. );

  98. create table bmsql_stock (

  99. s_w_id integer not null,
  100. s_i_id integer not null,
  101. s_quantity integer,
  102. s_ytd integer,
  103. s_order_cnt integer,
  104. s_remote_cnt integer,
  105. s_data varchar(50),
  106. s_dist_01 char(24),
  107. s_dist_02 char(24),
  108. s_dist_03 char(24),
  109. s_dist_04 char(24),
  110. s_dist_05 char(24),
  111. s_dist_06 char(24),
  112. s_dist_07 char(24),
  113. s_dist_08 char(24),
  114. s_dist_09 char(24),
  115. s_dist_10 char(24)
  116. ) WITH (FILLFACTOR=80) tablespace example3; ```
  117. 导入数据。

  118. 创建数据库用户。

    1. create user bot identified by 'Gaussdba@Mpp' profile default; 2. alter user bot sysadmin; 3. create database tpcc1000 encoding 'UTF8' template=template0 owner tpcc5q; 2. 执行如下命令导入数据。

    1. ./runDatabaseBuild.sh props.openGauss.1000w 3. 备份数据。

为了方便多次测试, 减少导入数据的时间,可以通过停止数据库,将整个数据目录执行一次拷贝对数据库进行备份。 4. 对数据进行分盘。

在性能测试过程中,为了增加IO的吞吐量,需要将数据分散到不同的存储介质上。由于机器上有4块NVME盘,可以将数据分散到不同的盘上。 将pg_xlog、tablespace2、tablespace3这三个目录放置在其他3个NVME盘上,并在原有的位置给出指向真实位置的软连接。pg_xlog位于数据库目录下,tablespace2、tablespace3分别位于数据库目录pg_location下。对tablespace2分盘的命令如下:

1. mv $DATA_DIR/pg_location/tablespace2 $TABSPACE2_DIR/tablespace2 2. cd $DATA_DIR/pg_location/ 3. ln -svf $TABSPACE2_DIR/tablespace2 ./

创建完成后的效果如下图:

测试TPCC性能 - 图1

测试TPCC性能 - 图2 5. 运行TPCC程序。

1. numactl –C 0-19,32-51,64-83,96-115 ./runBenchmark.sh props.openGauss.1000w

运行后的结果如下图,tpmC部分即为测试结果。

测试TPCC性能 - 图3 6. 验证数据测试过程正确性。

使用htop监控数据库服务端和tpcc客户端CPU利用情况,最佳性能测试情况下,各个业务CPU的占用率都非常高(> 90%)。如果有CPU占用率没有达标,可能是绑核方式不对或其他问题,需要定位找到根因进行调整。

下图是最佳性能测试情况下所有CPU的使用情况,其中黄线框中的是处理网络中断的CPU。

测试TPCC性能 - 图4 7. 如果为了避免数据的干扰,需要进行重新测试,可以通过步骤7备份的数据通过拷贝的方式恢复数据。重复步骤8~步骤10可以重新进行测试。