---
title: 达梦数据库性能调优-官方技术文章-鲲鹏社区
description: 本文档提供BIOS参数优化、热点函数优化以及加速库优化三种调优方式，提升其在鲲鹏服务器上的性能。
keywords: 达梦数据库性能调优,官方技术文章,鲲鹏社区,项目背景,环境要求,测试指导,调优实践,初始数据
url: https://www.hikunpeng.com/developer/techArticles/20251022-8?envFlag=1
section: (其他)
---

# 达梦数据库性能调优-官方技术文章-鲲鹏社区

URL: https://www.hikunpeng.com/developer/techArticles/20251022-8?envFlag=1
描述: 本文档提供BIOS参数优化、热点函数优化以及加速库优化三种调优方式，提升其在鲲鹏服务器上的性能。
关键词: 达梦数据库性能调优,官方技术文章,鲲鹏社区,项目背景,环境要求,测试指导,调优实践,初始数据

官方技术文章 [了解详情](https://www.hikunpeng.com/zh/developer/techArticles)

达梦数据库性能调优

达梦数据库性能调优

达梦数据库鲲鹏处理器

发表于 2025/10/22

0

作者 | 朱勇

## 1、项目背景

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

## 2、环境要求

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

| 服务器 | CPU | 内存 | 操作系统 | 软件 |
| --- | --- | --- | --- | ---|
| TaiShan 200服务器（型号2280） | 鲲鹏920 7260处理器*2 | 32G*8 | Linx（凝思） | 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。

本页内容
