DolphinDB 基于 Glibc 升级的性能优化实战案例

news2024/9/21 12:42:17

在高并发查询、查询需要涉及很多个分区的情况下,低版本的 glibc(低于2.23)会严重影响查询性能。需要升级 glibc 解决该问题优化性能。我们撰写了本文,通过 patchelf 工具修改可执行文件和动态库的 rpath,达到无需升级系统便可以使用高版本 glibc 的目的。

1 概述

在高并发查询、查询需要涉及很多个分区的情况下,需要频繁读取磁盘文件,而旧版 glibc(低于2.23)的 fseek 函数性能低下,导致查询任务堆积,CPU 利用率却不高。需要升级 glibc 解决该问题。由于系统 glibc 通常和系统版本绑定,所以升级系统 glibc 需要升级系统。但是升级系统步骤繁琐,故我们撰写了本文通过 patchelf 工具修改可执行文件和动态库的 rpath,在动态链接时优先链接的高版本 glibc。从而无需升级系统便可以使用高版本 glibc。

2 环境配置与数据模拟

2.1 硬件配置

测试总共使用四台配置相同的服务器,分别命名为 P1、P2、P3、P4,具体硬件配置如表所示。

处理器核数内存操作系统硬盘网络
Intel(R) Xeon(R) Gold 5320 CPU @ 2.20GHz128754 GBCentOS Linux release 7.9SSD万兆局域网

2.2 集群配置

以下测试中使用的 DolphinDB Server 版本为 2.00.9.3。

基于四台服务器搭建双副本高可用集群,假设四台服务器名称分别为 P1、P2、P3、P4,P1 、P2、P3 各部署一个控制节点、一个代理节点、一个数据节点,P4 部署一个代理节点、一个数据节点。

主要配置如下表:

配置项
maxMemSize480GB
workerNum128个
TSDBCacheEngineSize100GB

2.3 模拟数据

2.3.1 生成模拟数据

模拟数据为物联网测点数据,有 4 个字段,分别是 id、time、v、q,一天  28.8  亿条数据。数据库按照日期(按天)、id(HASH 128)分区。每个分区约 2250 万条记录。具体脚本见附件。

2.3.2 模拟数据查询

我们模拟单个、20、40、60、100 个并发查询,查询内容为 4 天 1000 个随机id的点查询,理论上将包含 128x4 个分区。具体脚本见附件。

3 升级 glibc

3.1 查看本机 DolphinDB 使用的 glibc 版本

执行以下命令

ldd dolphindb

找到 libc.so.6 的位置,在终端执行

/lib64/libc.so.6

得到版本为如图(2.17,低于 2.23)

3.2 下载或者编译高版本 glibc

下载

  • 可自行下载对应系统高版本的 glibc 库和 libgcc 库后手工提取。
  • 或下载 DolphinDB 提供的压缩包(glibc 版本 2.23,Centos 7)。
  • 注意:可能存在兼容性问题。

编译

可以通过自行编译的方式解决高版本 glibc 的兼容性问题。

#下载glibc源代码
git clone https://sourceware.org/git/glibc.git
cd glibc
git checkout glibc-2.23
mkdir build
cd build
#具体路径需要自己选择,不要不添加路径或者选择系统库的路径,避免系统glibc被覆盖
../configure --prefix=/home/thchen/glibc-2.23
# -j后面的数字要低于或者等于自己cpu的核数
make -j12
make install
#编译运行需要把系统的/lib64/libgcc_s.so.1 复制到/home/thchen/glibc-2.23/lib里
cp /lib64/libgcc_s.so.1 /home/thchen/glibc-2.23/lib

3.3 解压高版本 glibc 到自定义位置

注意事项:

1)不要解压到系统 lib64、根目录等路径覆盖系统 glibc。

2)不要添加自定义 glibc 文件夹到 LD_LIBRARY_PATH 环境变量。

#当前位置为/home/thchen
tar -zxvf glibc-2.23.tar.gz

3.4 下载 patchelf

sudo yum install patchelf

3.5 文件备份

备份相关文件(dolphindb libDolphinDB.solibgfortran.so.3libopenblas.so.0libquadmath.so.0libstdc++.so.6libtcmalloc_minimal.so.4

#备份文件,需要到dolphindb 可执行文件下的目录
cp dolphindb dolphindb.bak
cp libDolphinDB.so libDolphinDB.so.bak
cp libgfortran.so.3 libgfortran.so.3.bak
cp libopenblas.so.0 libopenblas.so.0.bak
cp libquadmath.so.0 libquadmath.so.0.bak
cp libstdc++.so.6 libstdc++.so.6.bak
cp libtcmalloc_minimal.so.4 libtcmalloc_minimal.so.4.bak

3.6 修改文件的 rpath 和 interpreter

1)关闭 DolphinDB

2)根据高版本 glibc 的路径,修改以下文件的 rpath:dolphindb libDolphinDB.solibgfortran.so.3libopenblas.so.0libquadmath.so.0libstdc++.so.6libtcmalloc_minimal.so.4

#修改rpath,具体路径要看高版本glibc的路径
patchelf --set-interpreter /home/thchen/glibc-2.23/lib/ld-linux-x86-64.so.2 \
--set-rpath ./:/home/thchen/glibc-2.23/lib64 dolphindb
patchelf  --set-rpath ./:/home/thchen/glibc-2.23/lib libDolphinDB.so 
patchelf  --set-rpath ./:/home/thchen/glibc-2.23/lib libgfortran.so.3
patchelf  --set-rpath ./:/home/thchen/glibc-2.23/lib libopenblas.so.0
patchelf  --set-rpath ./:/home/thchen/glibc-2.23/lib libquadmath.so.0
patchelf  --set-rpath ./:/home/thchen/glibc-2.23/lib libstdc++.so.6
patchelf  --set-rpath ./:/home/thchen/glibc-2.23/lib libtcmalloc_minimal.so.4

3.7 验证 glibc 库路径

使用 ldd dolphindb 命令验证当前 glibc 库的路径。当运行结果显示其路径为高版本 glibc 路径时,说明前述修改成功。

4 性能测试与对比

通过在升级前和升级后运行 2.3.2 节的模拟查询,我们得到了以下数据:

查询方法查询用时(glibc 2.17)查询用时(glibc 2.34)加速比
单查询3,241 ms2,007 ms1.61
20并发查询33,346 ms15,313 ms2.18
40并发查询85,144 ms24,672 ms3.45
60并发查询134,065 ms28,793 ms4.66
100并发查询224,902ms46,938 ms4.79

通过升级 glibc,DolphinDB 前后查询加速比为 1.61-4.79 倍。在并发情况下性能提升更加明显。

5 小结

针对高并发查询,当查询需要涉及多个分区时,如果查询任务积压但 CPU 利用率不高,可以先确定 glibc 的版本。如果 glibc 版本低于 2.23,则可以按照本方案进行升级,这可能会带来明显的性能提升。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1229515.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SaleSmartly新增AI意图识别触发器!让客户享受更精准的自动化服务

AI意图识别技术是对话式AI中很重要的组成部分,通俗点来说就是一种可以识别用户在对话中表达的意图的技术。通过对大量数据的分析和学习,AI可以理解用户想要获得的信息,并根据这些信息来采取相应的行动或提供相应的响应。而在对话式AI中&#…

GPT-4充当“规划师、审计师”,颠覆性双层文生图表模型

DALL-E 3、Midjourney、Stable Diffusion等模型展现出了强大的创造能力,通过文本便能生成素描、朋克、3D、二次元等多种类型的高质量图片,但在生成科学图表(柱状、直方、箱线、树状等)方面却略显不足。 这是因为模型在生成图表时…

你学了Python之后让你成为行业卷王,升职加薪更有优势

都说Python能够实现自动化,那么Python具体能应用在哪些地方?哪些岗位学了Python更有优势?今天我们来看看一些大神将Python应用的出神入化的成果。 在这之前,先跟为大家分享个真实的故事。我朋友小宇前段时间为了一个品牌设计的大项目,想方案…

SSL证书对网站SEO的好处

随着网络安全意识的提高,越来越多的网站开始采用SSL证书来保护自己的数据传输过程。那么,SSL证书真的能为网站SEO带来好处吗?下面将为您分析这个问题。 加强用户体验和信任度 SSL证书不仅能确保数据传输的安全性,还能让客户感受…

【技术指南资料】编码器与正交译码器

我想提出一个关于PicoScope7新的译码器功能讨论。它已经推出一段时间,但你可能不知道这在汽车领域是扮演相当重要的角色。 正交译码器被用在转子位置传感器来转换关于旋转轴角度及方向的信息。 举例来说,它在电机上采用一对二进制的信号型式。 这种传感器…

Linux 时区设置

对于服务器来说,linux的时区影响着运行之上的数据库和后端程序的时区 应该和数据库和后端及其他程序的时区保持一致 其他相关时区的设置 pgsql时区设置: php时区设置: 1.显示当前的时间和时区 date结果类似下面,图中显示的是ut…

【揭秘】MySQL逻辑架构:一文带你全面了解!

mysql是我们开发过程中使用的最多的数据库,大多数程序员平时都是做CRUD,如果CRUD慢了,那就再加一个索引,如果加上索引还不行,那基本上开发就没辙了,因为对mysql内部理解不深入、不清晰,所以问题…

智能货柜:无人零售行业的新宠

智能货柜:无人零售行业的新宠 与早期的传统自动售货机相比,智能货柜的投放场景正呈现多样化的趋势。除了人流密集的公共场所,一些办公室、健身房等室内场景也成为商家争相争夺的热门位置。 其次,在无人零售行业中,许多…

转录组学习第三弹-下载SRR数据并转成fastq

下载数据 前面已经安装好了需要的软件,那么我们现在需要下载我们练习需要用到的sra数据。从 SRA 数据库下载数据有多种方法。可以用ascp快速的来下载 sra 文件,也可以用wget或curl等传统命令从 FTP 服务器上下载 sra 文件。另外sra-tools的prefetch也支…

Zeet构建多云战略充分发挥云的优势

大型企业通常拥有基础设施和应用团队,有能力围绕自己的业务需求构建所需平台。但对于技术团队精简、预算紧张的小企业来说,定制平台往往不现实而且难以扩展,是负担不起的“奢侈品”。 这一情况催生了平台即服务(PaaS)…

ospf路由选路及路由汇总

一、知识补充 1、ABR和ASBR 1.1 ABR ABR指的是边界路由,通常位于两个或多个区域之间,用于在不同的OSPF区域之间传递信息。当一个路由器同时连接到两个或多个区域时,它就成为了ABR,它需要维护每个区域的拓扑信息和路由表&#x…

PC3392H高性价方案比10V-120V输入1.5A大电输出内置MOS管带EN功能实现零功耗使能只需极少元器件

1.PC3392H 特性  通过使能脚关断实现零功耗  宽电压输入范围 10V 至 120V  最大输出电流 1.5A  集成功率 MOS 管  外围器件少  输出短路保护  温度保护  逐周期限流  输出电压灵活可靠  ESOP8 2. 描述 PC3392H 一款宽电压范围降压型 DC-DC 电源…

CentOS安装nodejs

查看可安装的版本 dnf module list nodejs选择需要版本安装 dnf module install nodejs:<stream>查看版本

使用JDK自带java.util.logging.Logger引起的冲突问题

现象&#xff1a; 应用代码如下&#xff1a; import javax.script.ScriptEngineManager;ScriptEngineManager manager new ScriptEngineManager(); manager.getEngineByName("JavaScript"); 在TongWeb8上运行出错&#xff0c;日志如下&#xff1a; Servlet.servi…

一步一步教你如何在Windows 10上使用Java,包括下载、安装和配置等

Java开发工具包(JDK)是用于Java编程的软件,与Java虚拟机(JVM)和Java运行时环境(JRE)一起使用。JDK包括编译器和类库,允许开发人员创建可由JVM和JRE执行的Java程序。 在本教程中,你将学习在Windows上安装Java开发工具包。 检查是否安装了Java 在安装Java开发工具包之…

比科奇推出5G小基站开放式RAN射频单元的高性能低功耗SoC

全新的PC805作为业界首款支持25Gbps速率eCPRI和CPRI前传接口的系统级芯片&#xff08;SoC&#xff09;&#xff0c;消除了实现低成本开放式射频单元的障碍 中国北京&#xff0c;2023年11月 - 5G开放式RAN基带芯片和电信级软件提供商比科奇&#xff08;Picocom&#xff09;今日…

微创机器人:CRM撬动售后服务数字化升级

一方面&#xff0c;我国医疗器械行业起步较晚&#xff0c;更注重产品的销售和业务的拓展&#xff0c;企业售后服务整体比较滞后。 另一方面&#xff0c;医疗器械售后服务环节数字化程度不足&#xff0c;一些企业仍通过传统的线下手段管理售后服务&#xff0c;进行数字化尝试的…

SIMULIA 2022 Abaqus新功能之非线性、工作流、子程序、Explicit等

Abaqus 非线性力学的功能增强 Valanis-Landel 超弹性材料 通过指定单轴试验数据和可选的体积试验数据&#xff08;v2022新增选项&#xff09;来定义Valanis-Landel 超弹性模型&#xff0c;该模型能精确地复现给定的数据&#xff0c;类似Marlow模型&#xff0c;但与Marlow模型的…

俄罗斯操作系统Aurora OS 5.0全新UI亮相

俄罗斯媒体 IXBT 报道称&#xff0c;该地本土企业 Открытая мобильная платформа 于 2023 年 11 月 9 日至 10 日在圣彼得堡举行的 Mobius 2023 年秋季移动开发者专业会议上&#xff0c;展示了 Aurora OS 5.0 的界面和其他细节。 据介绍&#xff0c;…

滚动更新和回滚部署在 Kubernetes 中的工作原理

公众号「架构成长指南」&#xff0c;专注于生产实践、云原生、分布式系统、大数据技术分享。 在过去的几年中&#xff0c;Kubernetes 在生产环境中被广泛使用&#xff0c;它通过其声明式 API 提供了大量解决方案&#xff0c;用于编排容器。 Kubernetes 的一个显著特性是其具有…