---
title: Doris性能调优实践-官方技术文章-鲲鹏社区
description: 客户大数据团队基于开源Apache Doris进行自研，现在鲲鹏服务器上有性能诉求，目标性能相对鲲鹏性能基线提升10%。
keywords: Doris,性能调优实践,官方技术文章,鲲鹏社区,实践背景介绍,基础软硬件信息,硬件配置,设备组网
url: https://www.hikunpeng.com/developer/techArticles/20250909-2?envFlag=1
section: (其他)
---

# Doris性能调优实践-官方技术文章-鲲鹏社区

URL: https://www.hikunpeng.com/developer/techArticles/20250909-2?envFlag=1
描述: 客户大数据团队基于开源Apache Doris进行自研，现在鲲鹏服务器上有性能诉求，目标性能相对鲲鹏性能基线提升10%。
关键词: Doris,性能调优实践,官方技术文章,鲲鹏社区,实践背景介绍,基础软硬件信息,硬件配置,设备组网

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

Doris性能调优实践

Doris性能调优实践

案例分享大数据

发表于 2025/09/09

0

作者 | 韩炯

## 1 实践背景介绍

客户大数据团队基于开源Apache Doris进行自研，现在鲲鹏服务器上有性能诉求，目标性能相对鲲鹏性能基线提升10%。

## 2 基础软硬件信息

### 2.1 硬件配置

| 鲲鹏硬件 | 配置信息 |
| --- | ---|
| 服务器型号 | Taishan 2280*4 |
| CPU型号 | Kunpeng 5250 |
| 内存 | 128G*4 @2933 |
| 网卡 | TM280 4*25GE |
| 硬盘 | 10*7.1T HDD |
| RAID卡 | NA |
| GPU卡 | NA |

### 2.2 设备组网

4台鲲鹏服务器连接到同一台支持交换机上，4台鲲鹏服务器的IP地址最后一位分别是1,2,3,4，因此下面用IP地址指代不同的鲲鹏服务器。

| 节点角色 | 主机节点名称 | IP地址 | 说明 |
| --- | --- | --- | ---|
| FE和BE | 1 | 192.xx.xx.1 | 主要负责用户请求的接入、查询解析规划、元数据的管理、节点管理相关工作 |
| BE | 2 | 192.xx.xx.2 |  |
| 3 | 192.xx.xx.3 |  |  |
| 4 | 192.xx.xx.4 | 主要负责数据存储、查询计划的执行 |  |

### 2.3 操作系统与软件信息

表2-1 操作系统与软件信息

| 名称 | 版本 | 说明 |
| --- | --- | ---|
| ctyunos | 2.0.1 | 客户现网环境OS |
| Doris | 2.1.2 | - |

## 3 性能调优实践

### 3.1 测试场景

在FE所在服务器上安装TPC-H工具包，该工具包在Doris源码的tools目录下，根据开源文档 [了解详情](https://doris.apache.org/zh-CN/docs/benchmark/tpch)进行测试，整个测试模拟生成TPCH 500G的数据导入到Apache Doris 2.1.2-rc04。

### 3.2 调优前性能数据

使用鲲鹏5250自身对比测试数据库读写性能，主要测试500G数据量读写耗时，其性能指标如下表所示：

| 查询语句 | 第一次查询耗时(ms) |
| --- | ---|
| q1 | 6239 |
| q2 | 575 |
| q3 | 5780 |
| q4 | 3502 |
| q5 | 8456 |
| q6 | 916 |
| q7 | 4347 |
| q8 | 4326 |
| q9 | 15572 |
| q10 | 6642 |
| q11 | 745 |
| q12 | 1482 |
| q13 | 6297 |
| q14 | 591 |
| q15 | 988 |
| q16 | 1146 |
| q17 | 2316 |
| q18 | 16009 |
| q19 | 3839 |
| q20 | 1912 |
| q21 | 9592 |
| q22 | 1444 |

### 3.3 性能瓶颈分析

分析步骤如下所示。

步骤 1     在使用TPC-H测试Doris时，通过top指令排查网络、IO、内存等指标，并未发现性能瓶颈。

步骤 2     通过DevKit工具中NUMA精细化分析查看Doris应用进程，发现存在跨NUMA问题。通过NUMA绑核，进行TPC-H测试，发现性能不升反降。通过分析发现，是由于客户环境服务器内存共128G，进程绑核内存利用率降低，导致性能下降，故恢复NUMA绑核操作。

步骤 3     通过火焰图分析Doris应用调用栈情况，发现bshuf_shuffle_bit_eightelem_NEON占比高达59%。

步骤 4     通过修改bitshuffle_core.c文件中的bshuf_shuffle_bit_eightelem_NEON，TPC-H整体性能提升了20%，火焰图占比也减少了83%。

----结束

### 3.4 调优实施

#### 3.4.1 BIOS参数调优

以下是BIOS参数的通用调优，建议在大数据调优前统一设置。

| 参数 | 调优步骤 | 默认值 | 调优值 | 参数解释 |
| --- | --- | --- | --- | ---|
| 性能模式CustomPowerPolicy | 1.    服务器重启，进入BIOS，依次选择“BIOS->Advanced->Performance Config->Power Policy”。2.    设置“Power Policy”选项为“Performance”，按F10保存BIOS配置。 | Efficiency | Performance | 设置CPU为性能模式，提高主频，发挥CPU最大性能。 |
| CPU预取CPUPrefetchConfig | 1.    服务器重启，进入BIOS，依次选择“BIOS->Advanced->MISC Config->CPU Prefetching Configuration”。2.    设置“CPU Prefetching Configuration”选项为“Disabled”，按F10保存BIOS配置。 | Enabled | Enabled | CPU将内存中的数据读到CPU的高速缓冲Cache时，会根据局部性原理，除了读取本次要访问的数据，还会预取本次数据的周边数据到Cache里面，如果预取的数据是下次要访问的数据，那么性能会提升，如果预取的数据不是下次要取的数据，那么会浪费内存带宽。 |
| 内存刷新DdrRefreshRate | 1.    服务器重启，进入BIOS，依次选择“Advanced->Memory Config->Custom Refresh Rate”。2.    设置“Custom Refresh Rate”选项为“Auto”，按F10保存BIOS配置 | 32ms | Auto | 设置该参数之后，会使85°C下刷新率为64ms，减少刷新频率会提升内存性能，85°C上将为32ms。 |
| 是否开启SMMUEnableSMMU | 1.    服务器重启，进入BIOS，依次选择“BIOS->Advanced->MISC Config->Support Smmu”2.    设置“Support Smmu”选项为“Disabled”，按F10保存BIOS配置 | Enabled | Disabled | 服务器上的SMMU一般用来完成设备的地址转换，并且可以实现设备隔离，在虚拟化中很实用，但是在物理机测试场景下，SMMU可能会导致性能下降，尤其对于小包网络场景，因此建议该功能提升服务器性能。 |
| 是否使能DIE交织Die Interleaving | 1.    服务器重启，进入BIOS，依次选择“BIOS->Advanced->Memory Config -> Die Interleaving”。2.    设置“Die Interleaving”选项为“Disable”，按F10保存BIOS配置。 | Disabled | Disable | 使能DIE交织能充分利用系统的DDR带宽，并尽量保证各DDR通道的带宽均衡，提升DDR的利用率，开启后进行细粒度化绑Numa会存在跨CPU die的时延。 |
| 单CPU单NumaOne Numa Per Socket | 1.    服务器重启，进入BIOS，依次选择“BIOS->Advanced->Memory Config->One Numa Per Socket”。2.    设置“One Numa Per Socket”选项为“Disable”，按F10保存BIOS配置。 | Disabled | Disable | “Die Interleaving”参数为开启状态时，CPU下内存形成对称配置，CPU会自动整合成一个Numa，细粒度化绑Numa会存在跨CPU die的时延。 |

#### 3.4.2 OS参数调优

以下是OS参数的通用调优，建议在调优前统一设置。

| 参数 | 调优命令 |
| --- | ---|
| 并禁止内存大页 | echo never > /sys/kernel/mm/transparent_hugepage/enableecho never > /sys/kernel/mm/transparent_hugepage/defrag |
| SWAP（已默认） | swapoff -a |
| 设置系统最大打开文件句柄数 | vi /etc/security/limits.conf* soft nofile 1000000* hard nofile 1000000 |

#### 3.4.3 毕昇编译器使用编译选项优化

由于Doris的开源版本较高，使用的Clang 16编译，所以需要使用毕昇较新版本4.0.0（对应Clang 17）去编译，使用O3、pgo、thinlto等编译选项结合使用，相对鲲鹏性能基线性能提升5%。

#### 3.4.4 bitshuffle非向量化切换方案

步骤 1     修改“apache-doris-XXX-src/thirdparty/src/bitshuffle-0.5.1/src/bitshuffle_core.c”文件，修改1808行和1827行，将USEARMNEON判断去掉，使代码走非向量化分支。

修改后：

步骤 2     重新运行“apache-doris-xxx-src/thirdparty/build-thirdparty.sh”，重新编译第三方依赖。

步骤 3     重新按照官方文档运行build.sh编译Doris包。

步骤 4     使用编译出来包将环境上的包进行替换。

----结束

## 4 实践总结

经过调优后，Doris软件在鲲鹏集群上，相对鲲鹏性能基线整体提高20%+。

表4-1 性能提升比率

| 查询语句 | 基线数据（ms） | 优化后耗时(ms) | 性能提升比率 |
| --- | --- | --- | ---|
| q1 | 6239 | 4610 | 26.11% |
| q2 | 575 | 406 | 29.39% |
| q3 | 5780 | 3933 | 31.96% |
| q4 | 3502 | 2519 | 28.07% |
| q5 | 8456 | 8176 | 3.31% |
| q6 | 916 | 347 | 62.12% |
| q7 | 4347 | 3508 | 19.30% |
| q8 | 4326 | 2206 | 49.01% |
| q9 | 15572 | 12885 | 17.26% |
| q10 | 6642 | 5627 | 15.28% |
| q11 | 745 | 487 | 34.63% |
| q12 | 1482 | 805 | 45.68% |
| q13 | 6297 | 5271 | 16.29% |
| q14 | 591 | 533 | 9.81% |
| q15 | 988 | 870 | 11.94% |
| q16 | 1146 | 985 | 14.05% |
| q17 | 2316 | 1094 | 52.76% |
| q18 | 16009 | 14244 | 11.03% |
| q19 | 3839 | 1677 | 56.32% |
| q20 | 1912 | 1403 | 26.62% |
| q21 | 9592 | 6882 | 28.25% |
| q22 | 1444 | 1277 | 11.57% |
| 总计 | 102716 | 79745 | 22.36% |

## 5 故障排查

### 5.1 毕昇编译时链接错误

#### 问题现象

环境上安装了开源Clang 16及毕昇编译器，并配置了全局环境变量，客户用毕昇编译器编译Doris时，无法找到libstdc++.so.6。

#### 可能原因

怀疑是环境问题，通过全局搜索libstdc++.so.6，发现存在该文件，后面又看了环境变量，发现搜索的路径下没有该文件，于是通过创建软链接，找到该文件。

#### 解决方法

重新编译Doris，libstdc++.so.6文件找不到的问题已解决。

### 5.2 lz4加速库替换后性能未提升

#### 问题现象

Doris代码中通过替换lz4加速库，数据导入测试压缩性能未提升。

#### 可能原因

通过火焰图分析，并未调用到lz4加速库优化的接口，通过咨询lz4开发团队，客户替换的文件不对，需要把kzl.a放到lz4根目录下，并且修改build.sh后重新编译，会生成新的liblz4.a，并把该文件替换到第三方库中。

#### 解决方法

1. 替换kzl.a放到lz4根目录下，修改build.sh，把图中方框内容注释掉。

2. 重新编译，生成liblz4.a。

3. liblz4.a放到Doris第三方库中，并且重新编译Doris。

4. 通过火焰图查看压缩接口调用，已经替换为加速接口。

5. 通过TPCH导入数据到Doris，压缩性能提升5%。

本页内容
