注册
在kylin10 sp1环境下使用jmeter对达梦数据库进行压测的环境配置过程
专栏/技术分享/ 文章详情 /

在kylin10 sp1环境下使用jmeter对达梦数据库进行压测的环境配置过程

anon 2025/07/18 332 0 0
摘要

在一些大型项目中,数据库性能往往是整体性能的瓶颈。达梦数据库作为国产数据库的代表,在各行各界中有着广泛使用,而kylin10 sp1作为国产操作系统的代表,二者的兼容性与性能表现备受关注。本文将详细介绍如何在Kylin10 SP1 环境下使用 jmeter 对 达梦 数据库进行压测,为数据库性能优化提供数据支撑。

一.环境准备

  • 操作系统: Kylin10 SP1
  • 数据库:DM8(dm8_20250507_FTarm2000_kylin10_sp1_64.iso),服务器端口号设置为1111(可以在初始化时在参数中设置)
  • 压测工具:Apache JMeter 5.6.3(运行时端口号为4445)
  • JDK版本:OpenJDK 1.8.0_272

二.DM8安装

1.上传并执行安装程序

将下载的DM8(dm8_20250507_FTarm2000_kylin10_sp1_64.iso)iso文件解压,将其中的DMInstall.bin文件移动到需要安装目录下

image.png

使用

chmod 755 ./DMInstall.bin

命令,为文件赋予执行权限,接着执行

./DMInstall.bin -i

命令,执行命令行安装程序。

注意事项:上述命令的参数-i是指使用使用命令行进行安装,如果需要使用图形化安装直接使用命令:

./DMInstall.bin

即可

2.安装DM8

执行完安装指令后,会进行一些基础设置,根据自己需求选择即可。走到下图所示即表示安装完成。

image.png

3.数据库初始化

在启动数据库之前,首先先得对数据库进行初始化,注册实例。我们首先进入到安装完成的dm8的bin目录下:

cd /data/test6/dljDmTest/dmdbms/bin/

在该目录下执行命令:

./dminit  path=/data db_name=dljDmTest instance_name=dljDmTest port_num=1111 page_size=16 CASE_SENSITIVE=0 sysdba_pwd="admin123!@#A" SYSAUDITOR_PWD="admin123!@#A" log_size=256 BUFFER=1024 AUTO_ADJ_CPUS=0

进行数据库初始化。

**注意事项:**在这里我设置的port_num=1111表示设置DM数据库的运行端口为1111,可以根据自己的需求进行修改。

下面是对上述命令的参数解释

关键字 说明(默认值)
PATH 初始数据库存放的路径
DB_NAME 数据库名(DAMENG)
INSTANCE_NAME 实例名(DMSERVER)
PORT_NUM 监听端口号(5236)
PAGE_SIZE 数据页大小(8),可选值:4, 8, 16, 32,单位:K
CASE_SENSITIVE 大小敏感(Y),可选值:Y/N,1/0
SYSDBA_PWD 设置SYSDBA密码
SYSAUDITOR_PWD 设置SYSAUDITOR密码
LOG_SIZE 日志文件大小(4096),单位为:M,范围为:256M ~ 8G
BUFFER 系统缓存大小(8000),单位M

4.启动数据库

初始化完成之后,使用命令:

cd dljDmTest/dmdbms/bin

进入到达梦数据库安装的bin目录下,在该目录下使用命令:

./dmserver /data/test6/dljDmTest/dmdbms/dljDmTest/dljDmTest/dm.ini

**注意事项:**这里的/data/test6/dljDmTest/dmdbms/dljDmTest/dljDmTest/dm.ini应该改成你自己安装的DM数据库中dm.ini路径。

即可启动数据库。
image.png

输出SYSTEM IS READY即表示数据库启动成功。

三.JMeter安装

1.验证jdk环境

因为JMeter的运行依赖于jdk。而JMeter 5.6.3需要jdk 1.8及以上环境才可以运行,所以首先我们需要验证一下服务器中是否存在jdk1.8以上的环境。

使用

java -version

image.png

如上所示,我的服务器中已存在jdk 1.8.0_272环境。

2.将下载的JMeter压缩包上传到服务器并解压

首先我们现在服务器上创建jmeter目录,用来存放jmeter压缩包,使用命令:

mkdir jmeter

这里我将apache-jmeter-5.6.3.zip上传到服务器的jmeter目录下,并使用命令

unzip apache-jmeter-5.6.3.zip

进行解压,下图即表示安装成功。

image.png

3.验证JMeter是否安装成功

解压完成后,进入到解压后的bin目录下,在bin目录下使用命令

./jmeter -v

出现下面消息即表示JMeter安装成功。
image.png

注意事项:jmeter解压后就不需要额外的配置,通过命令:

./jmeter -n -t 路径/001.jmx -l 路径/001.jtl

即可执行测试计划生成测试结果。

4. Jmeter菜单树及子项说明

下图是本次测试DM数据库的Jmeter生成的测试示例中用到的菜单树和子项。下面我将一个一个介绍下述子项。
image.png

  • Test Plan: 整个压测的根节点,可配置全局属性,如添加JAR包到类路径(用于引入数据库驱动等)。

image.png

在上图红框区域可以选择要引入的jar包,比如说本次测试是测DM数据库,那么我们就需要引入DM的jdbc驱动,我们此时需要将jdbc驱动引入到Linux服务器中的Jmeter中,驱动可以直接在DM8的安装包下面的目录\source\drivers\jdbc下查找到,选择DmJdbcDriver8.jar驱动即可。

需要将DMJdbcDriver8.jar包引入到服务器中的jmeter下。而一般jmeter引入的驱动存放在目录/jmeter/apache-jmeter-5.6.3/lib/ext下面。

  • 线程组

    • 作用:模拟用户并发请求,是压测的核心配置。
    • 子项说明:
      • 线程数:模拟的并发用户数。
      • Ramp-up 时间(秒):多久内启动所有线程,若线程数为 100、Ramp-up 为 10,则每秒启动 10 个线程。
      • 循环次数:每个线程执行测试计划的次数,“永远” 表示持续执行直到手动停止。
      • 调度器:可设置持续时间和启动延迟,用于控制压测时长和开始时间。
    • 影响:若连接池最大连接数小于线程数,会导致线程等待连接,影响压测效率,线程数设置过大会增加服务器负载,若超过数据库处理能力,会导致响应时间变长、错误率上升。
      image.png

    例如上图,我这里设置的就是每秒启动5个线程,每个线程循环执行1000次,合计执行5000次。

  • JDBC Connection Configuration

    • 作用:配置数据库连接信息,建立连接池。
    • 子项说明:
      • Variable Name Bound to Pool:连接池名称,需与 JDBC Request 中一致。
      • Max Number of Connections:连接池最大连接数。
      • Max Wait(ms):获取连接的最大等待时间。
      • Database URL:数据库连接地址,格式为jdbc:dm://IP:端口
      • JDBC Driver class:驱动类名,达梦为dm.jdbc.driver.DmDriver
      • Username/Password:数据库登录账号密码。
    • URL 配置错误会导致无法连接数据库,可通过检查 IP、端口是否正确,以及数据库是否启动来排查。
      image.png
  • JDBC Request

    • 作用:执行 SQL 请求,与数据库交互。
    • 子项说明:
      • Variable Name of Pool declared in JDBC Connection Configuration:选择对应的连接池名称。
      • 填写要执行的 SQL 语句。

    image.png

  • 监听器

    • 作用:收集和展示压测结果,如聚合报告、查看结果树等。
    • 子项说明:
      • 聚合报告:显示样本数、平均值、中位数、吞吐量等关键指标。
      • 查看结果树:可查看每个请求的详细响应数据,便于排查错误。

四.编写测试计划,进行测试

1.创建jmx和jtl目录

首先我们先进入到jmeter的安装目录中,在该目录下创建jmx和jtl目录

mkdir jmx
mkdir jtl

其中jmx目录用来存放测试计划,我们先在windows上面的jmeter生成我们的测试计划,然后将这些测试计划放入到jmx目录中。

而jtl目录用来存放执行jmx测试计划后生成的测试结果。

2.生成测试计划

我们首先在windowsjmeter下面生成测试计划001.jmx

首先线程组设置为:

image.png

JDBC Connection Configuration设置为:
image.png

JDBC Request中设置的请求SQL语句为:

SELECT count(*) FROM sysobjects;

首先先测试查询语句。

然后将测试计划保存为001.jmx,将该测试计划放入上一步创建的jmx目录中

注意事项:image.png

这个位置需要修改为你的DM数据库的服务器地址和端口。

3.执行测试计划

进入到服务器的jmeter的bin目录下,然后到该目录下执行以下命令:

./jmeter -n -t /data/test6/dljDmTest/jmeter/apache-jmeter-5.6.3/jmx/001.jmx -l /data/test6/dljDmTest/jmeter/apache-jmeter-5.6.3/jtl/001.jtl

该命令的意思就是通过jmeter执行/data/test6/dljDmTest/jmeter/apache-jmeter-5.6.3/jmx目录下的001.jmx文件,然后将执行结果生成为/data/test6/dljDmTest/jmeter/apache-jmeter-5.6.3/jtl目录下的001.jtl文件。

4.解决运行Jmeter时出现的JDBC驱动查询不到的问题

在执行完上述命令后,发现jmeter报错如下:![image-20250711170533075]image.png

通过排查发现是dm数据库查询不到jdbc驱动。

于是我查看执行计划,发现一下问题:

image.png

此处使用的jdbc驱动是我windows系统引入的驱动。

注意事项:我们此时需要将jdbc驱动引入到Linux服务器中的Jmeter中,驱动可以直接在DM8的安装包下面的目录\source\drivers\jdbc下查找到,选择DmJdbcDriver8.jar驱动即可。

需要将DMJdbcDriver8.jar包引入到服务器中的jmeter下。而一般jmeter引入的驱动存放在目录/jmeter/apache-jmeter-5.6.3/lib/ext下面。

将准备好的jar包放入到 JMeter 安装目录下的lib/ext目录。再次测试:
image.png

发现已经Jmeter可以成功跑通测试。

5.查看测试结果

通过测试后会在jtl目录下生成001.jtl文件,将生成的jtl文件迁移到windows下面,然后通过windows下的jmeter即可查看测试结果![image-20250711173439031]image.png

之后可以通过不断调整线程组,来测试dm服务器的瓶颈和性能。

五.测试连接池最大线程连接数没有实际请求多时的影响

1.测试目的

本次压测的目的是探究DM数据库的连接池最大线程数没有实际请求线程数多会造成怎样的后果。

预测当DM数据库的连接池最大线程数没有实际请求线程数多,会导致线程等待连接,影响压测效率。

2.查看部署在DM数据库的连接池最大线程数

达梦数据库自身有最大连接数限制(默认值和配置值),可通过数据库内置视图或配置文件查看:

2.1.通过SQL语句查询

登录到DM数据库后,执行以下 SQL 查看当前数据库允许的最大连接数:

SELECT SF_GET_PARA_VALUE(2, 'MAX_SESSIONS');
  • 说明:MAX_SESSIONS是达梦数据库控制最大并发会话(连接)数的参数,默认值为 100,最大值可设置为 65535。

image.png

这里我查询出来的最大连接数为2500。

2.2通过配置文件查看

达梦数据库的参数配置文件为dm.ini,可通过以下步骤查看:

  1. 找到数据库实例的dm.ini路径(初始化数据库时指定,例如/data/test6/dljDmTest/dmdbms/dljDmTest/dljDmTest/dm.ini)。

  2. 使用grep命令搜索MAX_SESSIONS参数:

    grep "MAX_SESSIONS" /data/test6/dljDmTest/dmdbms/dljDmTest/dljDmTest/dm.ini

    输出结果类似:MAX_SESSIONS = 100,即表示当前最大连接数限制为 100。

image.png

这里我通过命令查询出来,可以看到最大的连接数同样是2500。

3.修改最大连接数

上面我们查询出来的最大连接数为2500,这个数有点大不适合我们测试,我们将连接池的最大连接线程数改的稍微低一些。

我们可以通过SQL进行修改:

SP_SET_PARA_VALUE(2, 'MAX_SESSIONS', 100); -- 将最大连接数改为500

修改后重启数据库,然后再次查询连接池最大连接数

image.png

image.png

再次通过上述两种方法都可以看出我们已经成功修改完成了连接池最大线程数。

4.编写测试用例

这里我准备了两个测试用例001.jmx002.jmx,下面是这两个测试用例的参数设置,两种测例的总请求数都为15000次。

001.jmx

下面是测例001.jmx,我这里设置的模拟的并发用户数为50,小于连接池最大线程数100。总请求数为15000。

image.png

002.jmx

下面是测例001.jmx,我这里设置的模拟的并发用户数为150,大于连接池最大线程数100。总请求数为15000。

image.png

执行的sql语句相同。

image.png

5.进行测试,得出测试结果

我们将这两个测试用例通过标题四所示过程放入到服务器中进行测试。

image.png

在执行的输出中,我们就可以初步看出001.jmx的执行通过率为100%,全部执行完成时间为9秒。

002.jmx的错误率为1.7%,错误请求数为2407,全部执行完成时间为1分4秒,两者之间的差距明显。

下面我将结合两者输出的jtl文件进行分析。

6.测试结果分析

001.jtl,下面是测试用例001.jmx的测试结果文件,查看报告可看出错误率为0%,无错误请求。全部执行完成时间为9秒。
image.png

002.jtl,下面是测试用例002.jmx生成的测试结果文件,查看报告可看出错误率为1.7%,错误请求数为2407。全部执行完成时间为1分4秒

image.png

通过排查002.jtl结果树,发现错误请求报错如下:

image.png

“Communication error” 直接指向网络层通信失败,即 JMeter 无法通过配置的 IP 和端口与达梦数据库建立连接。原因是请求的线程过多,错误请求长时间抢占不到连接池线程超时报错。

所以若连接池最大连接数小于线程数,会导致线程等待连接,影响压测效率,线程数设置过大会增加服务器负载,若超过数据库处理能力,会导致响应时间变长、错误率上升。

六.总结

通过上述步骤的配置,我们可以成功在在服务器上部署达梦数据库和Jmeter压测工具,然后通过编写Jmeter测试计划,来测出服务器的使用达梦数据库时的性能瓶颈。能够帮助我们更好的调试参数,让达梦数据库在服务器上有更好的表现。同时我们也知道若连接池最大连接数小于线程数,会导致线程等待连接,影响压测效率,线程数设置过大会增加服务器负载,若超过数据库处理能力,会导致响应时间变长、错误率上升,所以我们应该合理设置DM数据库连接池的最大线程数,以保证不会对数据库出来能力产生影响。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服