首页 > 其他分享 >[转帖]测试TPCC性能

[转帖]测试TPCC性能

时间:2024-06-04 14:15:27浏览次数:23  
标签:24 char varchar 转帖 TPCC 测试 integer null id

  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=Gaussdba@Mpp

    warehouses=1000 loadWorkers=200

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

  1. //在4.x兼容模式下运行时,设置为True。
  2. //设置为false以均匀使用整个配置的数据库。
  3. terminalWarehouseFixed=false
  4. //以下五个值相加之和为100。
  5. //45、43、4、4和4的默认百分比与TPC-C规范匹配。
  6. newOrderWeight=45
  7. paymentWeight=43
  8. orderStatusWeight=4
  9. deliveryWeight=4
  10. stockLevelWeight=4
  11. //创建文件夹以收集详细结果数据。
  12. //通过注释取消此内容。
  13. resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS
  14. osCollectorScript=./misc/os_collector_linux.py
  15. osCollectorInterval=1
  16. //收集OS负载信息。
  17. [email protected]
  18. osCollectorDevices=net_enp3s0 blk_nvme0n1 blk_nvme1n1 blk_nvme2n1 blk_nvme3n1
  19. ```
  1. TPCC导入数据前准备。

    使用如下文件替换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_last varchar(16),
    38. c_first varchar(16),
    39. c_credit_lim decimal(12,2),
    40. c_balance decimal(12,2),
    41. c_ytd_payment decimal(12,2),
    42. c_payment_cnt integer,
    43. c_delivery_cnt integer,
    44. c_street_1 varchar(20),
    45. c_street_2 varchar(20),
    46. c_city varchar(20),
    47. c_state char(2),
    48. c_zip char(9),
    49. c_phone char(16),
    50. c_since timestamp,
    51. c_middle char(2),
    52. c_data varchar(500)
    53. ) WITH (FILLFACTOR=80) tablespace example2;
    54. create sequence bmsql_hist_id_seq;
    55. create table bmsql_history (
    56. hist_id integer,
    57. h_c_id integer,
    58. h_c_d_id integer,
    59. h_c_w_id integer,
    60. h_d_id integer,
    61. h_w_id integer,
    62. h_date timestamp,
    63. h_amount decimal(6,2),
    64. h_data varchar(24)
    65. ) WITH (FILLFACTOR=80);
    66. create table bmsql_new_order (
    67. no_w_id integer not null,
    68. no_d_id integer not null,
    69. no_o_id integer not null
    70. ) WITH (FILLFACTOR=80);
    71. create table bmsql_oorder (
    72. o_w_id integer not null,
    73. o_d_id integer not null,
    74. o_id integer not null,
    75. o_c_id integer,
    76. o_carrier_id integer,
    77. o_ol_cnt integer,
    78. o_all_local integer,
    79. o_entry_d timestamp
    80. ) WITH (FILLFACTOR=80);
    81. create table bmsql_order_line (
    82. ol_w_id integer not null,
    83. ol_d_id integer not null,
    84. ol_o_id integer not null,
    85. ol_number integer not null,
    86. ol_i_id integer not null,
    87. ol_delivery_d timestamp,
    88. ol_amount decimal(6,2),
    89. ol_supply_w_id integer,
    90. ol_quantity integer,
    91. ol_dist_info char(24)
    92. ) WITH (FILLFACTOR=80);
    93. create table bmsql_item (
    94. i_id integer not null,
    95. i_name varchar(24),
    96. i_price decimal(5,2),
    97. i_data varchar(50),
    98. i_im_id integer
    99. );
    100. create table bmsql_stock (
    101. s_w_id integer not null,
    102. s_i_id integer not null,
    103. s_quantity integer,
    104. s_ytd integer,
    105. s_order_cnt integer,
    106. s_remote_cnt integer,
    107. s_data varchar(50),
    108. s_dist_01 char(24),
    109. s_dist_02 char(24),
    110. s_dist_03 char(24),
    111. s_dist_04 char(24),
    112. s_dist_05 char(24),
    113. s_dist_06 char(24),
    114. s_dist_07 char(24),
    115. s_dist_08 char(24),
    116. s_dist_09 char(24),
    117. s_dist_10 char(24)
    118. ) 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. 执行如下命令导入数据。

      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可以重新进行测试。

标签:24,char,varchar,转帖,TPCC,测试,integer,null,id
From: https://www.cnblogs.com/jinanxiaolaohu/p/18230630

相关文章

  • 探索sqlmap在WebSocket安全测试中的应用
    探索sqlmap在WebSocket安全测试中的应用WebSocket与HTTP的区别WebSocket,对于初次接触的人来说,往往会引发一个疑问:既然我们已经有了广泛使用的HTTP协议,为何还需要引入另一种协议?WebSocket又能为我们带来哪些实质性的好处呢?这背后的答案在于HTTP协议的一个关键限制——通信的发起......
  • C/C++结构体对齐测试
    #include<stddef.h>#include<iostream>structs1{inta;intb;};#pragmapack(8)structs2{charc;inta;doubleb;};structs3{charb[10];doublea;};#pragmaunpackstructs4{c......
  • allure的suites(测试套)中未显示返回值参数,显示No information about test execution is
    转自大佬:https://blog.csdn.net/sbdxmnz/article/details/137016423 ExecutionNoinformationabouttestexecutionisavailable.  解决方法:添加代码,因为pytest输出文本形式测试报告时未存储响应内容#将接口响应的文本内容附加到Allure报告中allure.attach(接口响......
  • 图形学初识--深度测试
    文章目录前言正文为什么要有深度测试?画家算法循环遮挡深度测试当代最常见实现方式?总述什么是z-buffer呢?z-buffer从哪来呢?如何利用z-buffer实现深度测试?举个例子结尾:喜欢的小伙伴点点关注+赞哦!前言本章节补充一下深度测试的内容,主要包含:为什么要有深度测试?深度测......
  • Helm 图表在调用测试(test-connection.yml)时出现任何错误,如何在 NOTES.txt 中显示错误
    下面是我的test-connection.ymlapiVersion:v1kind:Pod元数据:name:"{{include"demohelmapi.fullname".}}-test-connection";labels:{{-include"demohelmapi.labels".|nindent4}}annotations:"helm.sh/hook&qu......
  • 和GPT-4这些大模型玩狼人杀,人类因太蠢被票死,真·反向图灵测试
    最近,一位昵称「ToreKnabe」的网友在X平台发布的一段视频引发了人们的讨论。这是一次「反向图灵测试」,几个全球最先进的大模型坐在一起,坐着火车唱着歌,但其中混进了人类:而AI的任务,是把这个人类揪出来。最近,一位昵称「ToreKnabe」的网友在X平台发布的一段视频引发了......
  • 【测试开发】api开发神器-第1篇-magic-api后端低代码框架
    #Magic-api介绍(低代码后端框架) magic-api是一个基于Java的接口快速开发框架。使用magic-api,彻底摆脱手动编写繁杂的Controller、Service、Dao、Mapper、XML、VO等Java对象,而是通过在线可视化UI界面,在线编写接口(动态脚本,即写即用)。通过magic-api,我们可以快速而轻松......
  • 浏览器 performance 测试页面性能,查看阻塞代码
    截图黄色指的js执行紫色指的浏览器渲染一般只需要看js和render这2个就行,其他不用看,并从这2个中看出哪里的代码导致阻塞线程比较久。main线程推测main线程就是浏览器的主线程,主要负责浏览器的渲染和js代码执行,由此可见,浏览器用于渲染和js执行是一个线程,也就是主线程。渲......
  • 测试管理-测试过程监控
    测试活动的监控,对于整体测试工程而言是非常重要的管理内容。测试工作本身是非常依赖项目其他环节的,测试活动的进行充满了变数。所以对测试的实行情况进行持续的监控和做出及时应对,是管好一个测试项目的必要工作。 测试的监控是一个贯穿于整个测试周期内的工作。在一些情况......
  • 各类信息化项目第三方验收测试的作用
    验收测试各类信息化项目第三方验收测试的作用主要体现在以下几个方面:1.客观性:第三方验收测试的突出特点是其客观性。与项目开发团队或相关利益方相比,第三方测试机构能够更加客观地进行测试,不受项目具体背景、利益关系等因素的影响。这种客观性有助于确保测试结果的准确性......