测试TPCC性能

    1. 将目录lib/postgresql下面的*.jar 替换为openGauss适配的jar包。

      openGauss适配的JDBC版本包获取路径为openGauss-x.x.x-JDBC .tar.gz

    2. 进入benchmarksql-5.0根目录, 输入ant命令进行编译。

      1. $ ant

      编译成功后会生成build和dist两个目录。

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

      1. CREATE TABLESPACE example2 relative location 'tablespace2';
      2. CREATE TABLESPACE example3 relative location 'tablespace3';
      3. create table bmsql_config (
      4. cfg_name varchar(30),
      5. cfg_value varchar(50)
      6. );
      7. create table bmsql_warehouse (
      8. w_id integer not null,
      9. w_ytd decimal(12,2),
      10. w_tax decimal(4,4),
      11. w_name varchar(10),
      12. w_street_1 varchar(20),
      13. w_street_2 varchar(20),
      14. w_city varchar(20),
      15. w_state char(2),
      16. w_zip char(9)
      17. ) WITH (FILLFACTOR=80);
      18. create table bmsql_district (
      19. d_w_id integer not null,
      20. d_id integer not null,
      21. d_ytd decimal(12,2),
      22. d_tax decimal(4,4),
      23. d_next_o_id integer,
      24. d_name varchar(10),
      25. d_street_1 varchar(20),
      26. d_street_2 varchar(20),
      27. d_city varchar(20),
      28. d_state char(2),
      29. d_zip char(9)
      30. ) WITH (FILLFACTOR=80);
      31. create table bmsql_customer (
      32. c_w_id integer not null,
      33. c_d_id integer not null,
      34. c_id integer not null,
      35. c_discount decimal(4,4),
      36. c_credit char(2),
      37. c_first varchar(16),
      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. ol_w_id integer not null,
      80. ol_o_id integer not null,
      81. ol_number integer not null,
      82. ol_i_id integer not null,
      83. ol_delivery_d timestamp,
      84. ol_amount decimal(6,2),
      85. ol_supply_w_id integer,
      86. ol_quantity integer,
      87. ol_dist_info char(24)
      88. ) WITH (FILLFACTOR=80);
      89. create table bmsql_item (
      90. i_id integer not null,
      91. i_name varchar(24),
      92. i_price decimal(5,2),
      93. i_data varchar(50),
      94. i_im_id integer
      95. );
      96. create table bmsql_stock (
      97. s_w_id integer not null,
      98. s_i_id integer not null,
      99. s_quantity integer,
      100. s_ytd integer,
      101. s_order_cnt integer,
      102. s_remote_cnt integer,
      103. s_data varchar(50),
      104. s_dist_01 char(24),
      105. s_dist_02 char(24),
      106. s_dist_03 char(24),
      107. s_dist_04 char(24),
      108. s_dist_05 char(24),
      109. s_dist_06 char(24),
      110. s_dist_07 char(24),
      111. s_dist_08 char(24),
      112. s_dist_09 char(24),
      113. s_dist_10 char(24)
      114. ) WITH (FILLFACTOR=80) tablespace example3;
    2. 导入数据。

      1. 创建数据库用户。

        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. 执行如下命令导入数据。

    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 ./

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

    5. 运行TPCC程序。

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

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

      测试TPCC性能 - 图3

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