目录
概述
Sysbench 是一个开源且模块化的多线程性能测试工具,广泛用于硬件环境和数据库的性能评估。为了支持达梦数据库(DM)的测试,通常需要通过源码编译的方式来适配。测试时,Sysbench 会运行 Lua 脚本,并且每次测试都需要严格按照 prepare(数据准备)、run(运行测试)、cleanup(数据清理)这三个步骤进行操作,以确保测试的完整性和准确性,避免因步骤缺失而导致错误。
Sysbench 自带的 OLTP 测试脚本模拟了对单表的查询、更新、删除和插入操作,并以主键作为过滤条件。测试表以 `sbtest` 为前缀,后接数字加以区分。虽然表结构相对简单,事务操作也不复杂,但这些测试脚本能够有效模拟数据库在高并发场景下的性能表现。常见的测试场景中,单表数据量通常以十万级别为主,因此测试压力主要集中在 CPU 性能上。尽管表结构简单,但建议不要随意修改测试脚本中的列类型或场景,以免影响测试结果的准确性和可比性。
安装
在该社区地址下下载对应的安装包:
https://eco.dameng.com/community/question/616ca08f52818c4e3d94d52f415dba7c
将文件放到指定目录并解压
unzip sysbench-master-dm.zip -d /opt/sysbench-master
cd /opt/sysbench-master/
unzip sysbench-master-dpi-20200604-src.zip
检查软件安装情况
rpm -qa|grep gcc
yum -y install gcc
yum -y install automake libtool
执行./autogen.sh脚本来生成对应的configure配置文件。如此步骤出错,说明该系统缺少基本的编译工具,解决检查并解决环境问题。
./autogen.sh
配置达梦数据库
检查环境变量
echo $DM_HOME
如果没有的话需要自行配置达梦数据库的路径:
export DM_HOME=/home/dmdba/dmdbms
再次检查出现环境变量即可
执行配置文件
默认是以编译的方式支持测试MySQL和DM数据库。在编译的过程中需要MySQL的动态库和头文件,此时会进行检查。命令如下:
./configure --without-mysql --with-dm
出现达梦数据库支持yes即表示支持达梦数据库测试
编译
进入到一开始解压的主目录文件执行make命令即可开始编译
在编译成功后,在src目录下生成可执行文件sysbench,测试方便将sysbench拷贝到src/lua目录下,然后进入src/lua目录运行sysbench。这里我重新命名为newsysbench
mv sysbench ./lua/newsysbench
测试说明
sysbench的数据库测试脚本在src/lua目录下,都是以oltp为前缀。其中oltp_common.lua脚本是最基础的测试脚本,定义了表结构,事务的基本操作。剩余oltp脚本都是引用oltp_common脚本,将其中query进行组合,实现各种测试场景。最常使用的3个脚本如下:
脚本名称 | 说明 |
oltp_read_write.lua | 读写混合性能测试,包含查询,更新,删除,插入操作。 |
oltp_read_only.lua | 读性能测试,包含查询操作。 |
oltp_write_only.lua | 包含更新,删除,插入操作。 |
测试
进入lua目录
参数说明
参数 | 说明 |
--db-driver=dm | 表示使用dm驱动 |
--dm-db=localhost:5236 | 表示dm的连接信息 |
--dm-user=SYSDBA | 表示dm的登录用户名 |
--dm-password=SYSDBA | 表示dm的登录密码 |
--table-size=2500 | 表示每个测试表填充数据量为 2500 |
--tables=25 | 表示25张表 |
--threads=64 | 表示发起64个并发连接 |
--report-interval=10 | 表示每10秒输出一次测试进度报告 |
--time=180 | 表示最大执行时长为180秒 |
--auto-inc=0 | 自增主键,默认为0即可 |
读写测试
准备数据
./ newsysbench oltp_read_write.lua --tables=25 --table-size=2500 --db-driver=dm --dm-db=localhost:5236 --dm-user=SYSDBA --dm-password=SYSDBA --auto-inc=0 --threads=64 --time=180 --report-interval=10 prepare
开始测试
./ newsysbench oltp_read_write.lua --tables=25 --table-size=2500 --db-driver=dm --dm-db=localhost:5236 --dm-user=SYSDBA --dm-password=SYSDBA --auto-inc=0 --threads=64 --time=180 --report-interval=10 run
测试完成
清除数据
./ newsysbench oltp_read_write.lua --tables=25 --table-size=2500 --db-driver=dm --dm-db=localhost:5236 --dm-user=SYSDBA --dm-password=SYSDBA --auto-inc=0 --threads=64 --time=180 --report-interval=10 cleanup
纯读测试
创建数据
./newsysbench --db-driver=dm --dm-db=localhost:5236 --dm-user=SYSDBA --dm-password=SYSDBA --table_size=250 --tables=25 --events=0 --time=120 oltp_read_only prepare --auto-inc=0
开始测试
./newsysbench --db-driver=dm --dm-db=localhost:5236 --dm-user=SYSDBA --dm-password=SYSDBA --table_size=250 --tables=25 --events=0 --time=120 oltp_read_only run --auto-inc=0 --threads=32 --percentile=95 --range-selects=0 --skip-trx=1 --report-interval=1
测试完成
清除数据
./newsysbench --db-driver=dm --dm-db=localhost:5236 --dm-user=SYSDBA --dm-password=SYSDBA --table_size=250 --tables=25 --events=0 --time=120 oltp_read_only cleanup --auto-inc=0 --threads=32 --percentile=95 --range-selects=0 --skip-trx=1 --report-interval=1
纯写测试
准备数据
./newsysbench --db-driver=dm --dm-db=localhost:5236 --dm-user=SYSDBA --dm-password=SYSDBA --table_size=250 --tables=25 --events=0 --time=120 oltp_write_only prepare --auto-inc=0
开始测试
./newsysbench --db-driver=dm --dm-db=localhost:5236 --dm-user=SYSDBA --dm-password=SYSDBA --table_size=250 --tables=25 --events=0 --time=120 oltp_write_only run --auto-inc=0 --threads=32 --percentile=95 --range-selects=0 --skip-trx=1 --report-interval=1
测试完成
清除数据
./newsysbench --db-driver=dm --dm-db=localhost:5236 --dm-user=SYSDBA --dm-password=SYSDBA --table_size=250 --tables=25 --events=0 --time=120 oltp_write_only cleanup --auto-inc=0 --threads=32 --percentile=95 --range-selects=0 --skip-trx=1 --report-interval=1
指标解析
我们一般关注的指标主要有:
response time avg:平均响应时间(后面的95%的大小可以通过–percentile=98的方式去更改)。
transactions:精确的说是这一项后面的TPS,但如果使用了–skip-trx=on,这项事务数为0,需要用total number of events去除以总时间,得到tps(其实还可以分为读tps和写tps)。
queries:用它除以总时间,得到吞吐量QPS。