鲲鹏社区首页
中文
注册
开发者
达梦数据库性能调优

达梦数据库性能调优

达梦数据库鲲鹏处理器

发表于 2025/10/22

0

作者 | 朱勇

1、项目背景

某项目使用Sysbench测试达梦数据库性能测试未达到预期,测试场景分为只读和只写,其中读场景落后较多。本文档提供BIOS参数优化、热点函数优化以及加速库优化三种调优方式,提升其在鲲鹏服务器上的性能。

2、环境要求

硬件、操作系统和软件要求

服务器CPU内存操作系统软件
TaiShan 200服务器(型号2280)鲲鹏920 7260处理器*232G*8Linx(凝思)Sysbench-1.0、DM8

3、测试指导

为了避免网络差异,测试采用单机测试,即压测端和被测端均运行在同一台机器上。

当数据库服务无法启动或初次运行时,执行以下步骤。

1、初始化数据库实例。
cd /home/dmdba/dm/dmdbms_kp/bin
rm -rf /DMFCSAN/test_data/*
./dminit path=/DMFCSAN/test_data page_size=32 log_size=2048
chown -R dmdba.dinstall /DMFCSAN/test_data
./DmService start

2、数据库启动后,测试只读场景。

cd /opt/sysbench-master-dpi/src/lua
echo 3 > /proc/sys/vm/drop_caches
./sysbench --db-driver=dm --dm-db=localhost:15236 --dm-user=SYSDBA --dm-password=SYSDBA --table_size=25000 --tables=250 --events=0 --time=600   --threads=2048 --percentile=95 --range-selects=0 oltp_read_only cleanup
./sysbench --db-driver=dm --dm-db=127.0.0.1:15236 --dm-user=SYSDBA --dm-password=SYSDBA --table_size=25000 --tables=250 --events=0 --time=600 --auto-inc=0  --threads=64  oltp_read_only prepare
./sysbench --db-driver=dm --dm-db=127.0.0.1:15236 --dm-user=SYSDBA --dm-password=SYSDBA --table_size=25000 --tables=250 --events=0 --time=600  --percentile=95 --range-selects=0 --skip-trx=1 --report-interval=1 --thread_init-timeout=180 --threads=1000 oltp_read_only run

3、测试只写场景。

cd /opt/sysbench-master-dpi/src/lua
echo 3 > /proc/sys/vm/drop_caches
./sysbench --db-driver=dm --dm-db=localhost:15236 --dm-user=SYSDBA --dm-password=SYSDBA --table_size=25000 --tables=250 --events=0 --time=600   --threads=256 --percentile=95  oltp_write_only cleanup
./sysbench --db-driver=dm --dm-db=127.0.0.1:15236 --dm-user=SYSDBA --dm-password=SYSDBA --table_size=25000 --tables=250 --events=0 --time=600 --auto-inc=0  --threads=64  oltp_write_only prepare
./sysbench --db-driver=dm --dm-db=localhost:15236 --dm-user=SYSDBA --dm-password=SYSDBA --table_size=25000 --tables=250 --events=0 --time=600   --threads=100 --percentile=95 --report-interval=1 oltp_write_only run

4、调优实践

4.1、初始数据

测试工具

本次测试采用Sysbench工具,配置只读、只写场景,运行过程中使用nmon工具对服务器的I/O进行监控,分别获取插入数据时的写入大小、查询数据时的读出大小。

数据库版本

本次测试使用的数据库版本、数据库参数都是一致。

两个服务端的数据库版本为:DM Database 64 V8 05134283914-20220909-169171-20009。

4.2、调优措施

BIOS参数优化

关闭SMMU。

BIOS路径为“Advanced > MISC Config”,将“Support Smmu”设置为“Disable”。SMMU为虚拟化特性支持,虚拟化场景下开启,非虚拟化场景下关闭可以获取更好的性能。关闭CPU预取。

BIOS路径为“Advanced > MISC Config”,将“CPU Prefetching Configuration”设置为“Disabled”。对于数据比较集中的场景,预取的命中率高,适合打开CPU预取,反之需要关闭CPU预取。目前发现speccpu和x265软件场景适合打开CPU预取,STREAM测试工具、Nginx和数据库场景需要关闭CPU预取。

电源使用性能模式。

BIOS路径为“Advanced -> Performance Config” ,将“Power Policy”设置为“Performance”。有性能模式和节能模式两个选项,节能模式会降低CPU运行功耗,导致CPU降频,性能变差。性能模式会让CPU在高性能模式下工作,提升性能。

BIOS参数优化后读场景测试数据QPS为1133074.43/s。


写场景测试数据TPS为36169.13/s。

热点函数优化

1、使用perf top命令观察热点函数,发现三个锁相关函数os_interlock_inc、os_interlock_dec和os_interlock_read64占比较高。

2、进一步通过查看汇编指令,可以观察到函数主要运行在如下几个汇编。

3、通过类似案例发现,案例中涉及的汇编指令完全一样,查看到使用的凝思系统GCC的版本为6.3.0, 增加编译参数“-march=armv8-a+lse”并重新编译数据库,缓解锁瓶颈。

同步方法到达梦侧后,添加编译参数“-march=armv8-a+lse”,重新编译出版本后进行测试,锁瓶颈消除,读写场景性能均有较大提升。
读场景测试数据QPS为1905800.70/s。

写场景测试数据TPS为42692.95/s。

加速库优化

使用perf top命令观察热点函数,在写场景下包含memcpy热点函数时,可使用以下步骤使能加速库提升写场景性能。

1、获取加速库源码。

git clone https://github.com/ARM-software/optimized-routines.git

2、添加脚本内容。

进入目录。

cd optimized-routines/
cd string

创建脚本文件。

vi t.sh

添加脚本内容,脚本内容如下。添加脚本内容并执行,会导致make出现错误,可忽略。

for m in memcmp memcpy ; do
for f in $(grep __${m}_aarch64 * -r|awk -F ':' '{print $1}') ; do
sed_str1="__${m}_aarch64"
sed_str2="${m}"
sed -i "s!${sed_str1}!${sed_str2}!g" $f
done
done

按“Esc”键,输入:wq!后,按“Enter”键保存退出。

3、执行脚本。

sh t.sh

4、编译。

cd ../
make ARCH=aarch64 -j 8

5、添加环境变量。

export LD_PRELOAD=build/lib/libstringlib.so

或者在启动数据库时添加“LD_PRELOAD=build/lib/libstringlib.so”。

6、验证。

启动应用后通过perf top观察热点函数memcpy是否来源于libstringlib.so判断是否生效,或者使用“ldd 二进制文件”查看。

加速库使能后写场景TPS提升到45475.74/s。




本页内容