
目录一、什么叫压测二、集群规划三、搭建守护主备集群四、TPCC测试准备1、上传安装包2、修改配置五、TPCC测试1、创建表空间/测试用户2、建立测试表3、装载数据4、TPCC正常测试5、TPCC摸高测试6、TPCC故障转移测试主机宕机7、TPCC故障转移测试备机宕机六、总结一、什么叫压测定义压测全称压力测试是指通过模拟大量并发用户或高频率请求对数据库系统施加超出日常业务水平的负载以此评估系统在极限负载条件下的性能表现。本次实战采用TPC-C基准测试规范开展压测验证达梦守护主备集群的高可用能力重点观测集群在故障转移过程中的业务抖动是否在可接受范围内。二、集群规划本次实战采用经典的两节点守护主备集群提前规划好IP、端口及实例名。机器1机器2业务IP192.168.159.156192.168.159.157心跳IP192.168.159.156192.168.159.157实例名GRP1_RT_01GRP1_RT_02实例端口52365236MAL端口53365336MAL守护进程端口54365436守护进程端口55365536OGUID4533145331守护组GRP1GRP1安装目录/home/dmdba/dmdbms/home/dmdba/dmdbms实例目录/dmdata/data/dmdata/data三、搭建守护主备集群搭建守护主备集群并非本文重点在此仅做概括性说明。详细步骤可参考达梦在线服务平台文档中的运维指南或搜索《守护主备集群搭建》相关博文进行搭建。四、TPCC测试准备1、上传安装包将宿主机上的JDK压缩包、BenchmarkSQL源码包与Apache-Ant构建工具上传至Linux虚拟机。JDK安装将压缩包放置在/home目录下进行解压随后在bash_profile文件中配置java环境变量确保系统能够识别java和javac命令。tar -zxvf jdk-8u202-linux-x64.tar.gzvi .bash_profileexport JAVA_HOME/home/jdk1.8.0_202export PATH$JAVA_HOME/bin:$PATHsource .bash_profileBenchmarkSQL安装将压缩包放置在/home目录下进行解压。unzip benchmarksql-5.0.zipApache-Ant安装将压缩包放置在/home目录下进行解压。Ant是一个Java构建工具用于将 BenchmarkSQL的源码编译为可执行的字节码文件。gzip -dc apache-ant-1.9.16-bin.tar.gz |tar xvf -达梦数据库的JDBC驱动位于数据库安装目录的/drivers/jdbc下将其拷贝到BenchmarkSQL 的/lib/dameng目录中使BenchmarkSQL在编译和运行时能够识别达梦数据库。mkdir -p /lib/damengcp /home/dmdba/dmdbms/drivers/jdbc/DmJdbDriver8.jar benchmarksql-5.0/lib/dameng所有安装包统一放置在/home目录下目录结构如下2、修改配置BenchmarkSQL默认并未内置达梦数据库的支持因此需要修改其源码中数据库类型识别模块新增达梦数据库类型确保编译和运行时能够正确加载达梦JDBC驱动。即vim /home/benchmarksql-5.0/src/client/jTPCC.java进入BenchmarkSQL根目录执行ant命令进行编译。[rootdmtest01 benchmarksql-5.0] /home/apache-ant-1.9.16/bin/antAnt会将源码编译为字节码文件并生成可执行的JAR包存放在benchmarksql/dist目录下。编译成功后BenchmarkSQL即可与达梦数据库正常建立连接并执行测试。接下来编写BenchmarkSQL的核心配置文件props.dm该文件定义了压测的全部运行参数vi /home/BenchmarkSQL/run/props.dm仓库数warehouses设为10受限于测试环境的磁盘空间,终端数terminals设为12模拟12个并发数据库连接测试时长runMins设为5分钟每次压测持续运行5分钟事务权重按照TPCC标准配比新订单NEW_ORDER占比45%支付PAYMENT占比43%订单查询ORDER_STATUS占比4%发货DELIVERY占比4%库存水平STOCK_LEVEL占比4%客户端还需配置dm_svc.conf文件定义服务名DMDW对应主备节点的IP与端口。其中LOGIN_MODE(0)表示客户端优先连接主库若主库不可用客户端会依次尝试连接服务名中定义的备库同时设置尝试次数300次与重试间隔1秒并开启自动重连机制确保集群故障切换期间应用能自动恢复连接。五、TPCC测试环境准备就绪后正式进入TPCC压测阶段。1、创建表空间/测试用户SQL create tablespace BENCHMARKSQL1 datafile tpcc.dbf size 2048 CACHE NORMAL;SQL CREATE USER BENCHMARKSQL IDENTIFIED BY ****** DEFAULT TABLESPACE BENCHMARKSQL1;SQL GRANT DBA TO BENCHMARKSQL;2、建立测试表BenchmarkSQL按照TPCC规范创建10张标准业务表表结构涵盖订单处理全链路。createtable BENCHMARKSQL.bmsql_config(cfg_name varchar(30) cluster primary key,cfg_value varchar(50));createtable BENCHMARKSQL.bmsql_warehouse(w_id integer not null,w_ytd decimal(22, 2) ,w_tax float ,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) ,cluster primary key(w_id))STORAGE(FILLFACTOR 1);createtable BENCHMARKSQL.bmsql_district(d_w_id integer not null,d_id integer not null,d_ytd decimal(22, 2) ,d_tax float ,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) ,cluster primary key(d_w_id, d_id))STORAGE(FILLFACTOR 1);createtable BENCHMARKSQL.bmsql_customer(c_w_id integer not null ,c_d_id integer not null ,c_id integer not null ,c_discount float ,c_credit char(2) ,c_last varchar(16) ,c_first varchar(16) ,c_credit_lim float ,c_balance float ,c_ytd_payment float ,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) ,cluster primary key(c_w_id, c_d_id, c_id));createtable BENCHMARKSQL.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 float ,h_data varchar(24))storage(branch(32, 32),without counter);createtable BENCHMARKSQL.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 float ,o_all_local float ,o_entry_d timestamp ,cluster primary key(o_w_id, o_d_id, o_id))storage(without counter);createtable BENCHMARKSQL.bmsql_new_order(no_w_id integer not null,no_d_id integer not null,no_o_id integer not null,cluster primary key(no_w_id, no_d_id, no_o_id))storage(without counter);createtable BENCHMARKSQL.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 float ,ol_supply_w_id integer ,ol_quantity float ,ol_dist_info char(24) ,cluster primary key(ol_w_id, ol_d_id, ol_o_id, ol_number))storage(without counter);createtable BENCHMARKSQL.bmsql_stock(s_w_id integer not null,s_i_id integer not null,s_quantity float ,s_ytd float ,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) ,cluster primary key(s_w_id, s_i_id));createtable BENCHMARKSQL.bmsql_item(i_id integer not null,i_name varchar(24) ,i_price float ,i_data varchar(50) ,i_im_id integer ,cluster primary key(i_id));3、装载数据在BenchmarkSQL的run目录下执行runLoader.sh脚本脚本会根据props.dm配置的仓库数量10仓随机生成测试数据并插入各张表中。cd /home/benchmarksql-5.0/run/./runLoader.sh props.dm数据装载完成后库内数据量达到一定规模可有效模拟真实业务环境。4、TPCC正常测试在BenchmarkSQL的run目录下执行runBenchmark.sh脚本执行标准TPCC压测任务。该脚本会按照props.dm配置文件设定的仓库数、并发终端数以及事务权重比例持续对数据库施加5分钟的业务负载。./runBenchmark.sh props.dm压测期间重点关注两项核心指标tpmC每分钟处理的新订单事务数这是TPCC标准中衡量数据库事务处理能力的核心指标直接反映系统在处理复杂订单业务时的综合性能TPS每秒事务数即系统每秒完成的事务总量涵盖新订单、支付、订单查询等全部五种事务类型反映系统的整体吞吐能力。本轮测试获取的性能数据作为基准基线与后续摸高测试、故障转移测试中的结果进行横向对比量化不同场景下的性能差异。5、TPCC摸高测试所谓摸高测试是指在标准压测基础上不断加大负载压力直至系统吞吐量触及上限。本次实战使用SQL脚本进行优化。首先将准备好的SQL脚本上传至/home/dmdba目录。该脚本包含两类优化措施一是为TPCC业务表创建适配的索引加速查询过滤与关联操作二是调整SQL写法或执行计划减少全表扫描或低效关联从而降低高并发下的资源消耗。SQL start /home/dmdab/xxx.sqlSQL脚本执行成功后dm.ini文件中的相关参数得到针对性优化此时重新执行压仓操作再次启动测试结果如下通过上述结果可以看出SQL脚本优化有效tpmC与TPS都有一定程度地提高。6、TPCC故障转移测试主机宕机①测试步骤启动5分钟的压测任务。在压测进行约40秒时手动停止机器1主机的数据库服务与守护进程模拟主机突发故障systemctl stop DmServiceGRP_RT_01systemctl stop DmWatcherServiceWatche约60秒时手动启动机器1的数据库服务与守护进程模拟主机修复后重新加入集群systemctl start DmServiceGRP_RT_01systemctl start DmWatcherServiceWatche②现象与结果从40秒至60秒期间TPS急剧下降至0业务完全中断对应集群检测故障、选举新主、完成主备切换的过程约60秒后机器2原备机切换为新主库业务恢复TPS回升此时集群处于单机模式TPS较两节点更为平稳且略有提升机器1修复后重新加入集群集群回归两节点模式TPS出现小幅度波动性能略有下降③结论单机模式的事务处理性能优于集群模式但集群模式提供了高可用保障故障转移控制在20秒内对业务影响有限。主机宕机后监视器自动完成切换且客户端通过重连机制成功连接到新主库验证了守护集群自动故障转移的有效性。7、TPCC故障转移测试备机宕机①测试步骤同样执行5分钟压测在压测进行约25秒时停止机器2备机的守护进程和数据库服务模拟备机故障systemctl stop DmServiceGRP_RT_02systemctl stop DmWatcherServiceWatcher约70秒时手动开启机器2的数据库服务与守护进程模拟备机修复后重新加入集群。②现象与结果25秒至75秒集群仅剩单主机运行TPS曲线保持稳定且未出现业务中断数值明显高于双节点集群模式印证了单机性能更优的结论约75秒后备机恢复并重新加入集群集群恢复两节点状态TPS曲线出现短暂小幅波动。③结论备机宕机不影响主机对外服务业务连续性好单机模式性能更优但失去冗余保护集群模式在备机恢复后能快速完成数据同步并重新加入集群具备良好的自愈能力。六、总结1、文章围绕达梦数据库守护主备集群以TPCC标准压测为手段系统地验证了集群在高负载下的性能表现与高可用能力2、无论是主机宕机还是备机宕机集群能在十秒内完成故障检测与自动切换业务中断时间可控3、单机模式性能优于集群模式但集群模式提供了不可替代的冗余保护生产环境需根据业务对RTO/RPO的要求综合选型4、更多细节及高级配置请参阅达梦官方文档https://eco.dameng.com