开源PostgreSQL在倚天ECS上的最佳优化实践

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 本文基于倚天ECS硬件平台,以自顶向下的方式从上层应用、到基础软件,再到底层芯片硬件,通过应用与芯片的硬件特性的亲和性分析,实现PostgreSQL与倚天芯片软硬协同的深度优化,充分使能倚天硬件性能,帮助开源PostgreSQL应用实现性能提升。

1. 简介

PostgreSQL 是一个高度先进的开源对象关系型数据库管理系统(ORDBMS)。它以其可靠性、健壮性、和性能而闻名,经常用于处理从小型应用到大规模、复杂的数据处理任务的各种数据。

作为一个 ORDBMS,PostgreSQL 不仅支持标准的 SQL 数据查询和数据类型,还提供了对复杂数据类型和对象导向数据库特性的支持,例如表继承、函数索引、规则系统等。这使得 PostgreSQL 特别适合处理多样化的数据,可以存储和查询包括文本、地理空间数据、JSON 和 XML 等在内的数据类型。此外,PostgreSQL 提供了强大的事务和并发控制,它的多版本并发控制(MVCC)提供了并发用户高度的隔离性,而不会牺牲读写性能。它还包括对 ACID(原子性、一致性、隔离性、持久性)事务的全面支持,以确保数据库操作的可靠性。

PostgreSQL 的扩展性也是其受欢迎的一个原因。它有一个动态的扩展框架,可以加载新的数据类型、函数、操作符或其他功能,而无需修改 PostgreSQL 核心代码。此外,它还有一个大型活跃的开发和支持社区,社区成员积极开发新功能、修复漏洞,并提供支持。

本文基于倚天ECS硬件平台,以自顶向下的方式从上层应用、到基础软件,再到底层芯片硬件,通过应用与芯片的硬件特性的亲和性分析,实现PostgreSQL与倚天芯片软硬协同的深度优化,充分使能倚天硬件性能,帮助开源PostgreSQL应用实现性能提升。

基于阿里巴巴第八代ECS实例和开源版本PostgreSQL应用,使用Sysbench对基于倚天的第八代实例g8y和基于Intel的第八代最新实例g8i做了对比测试,结果显示:在相同规格下,优化后的第八代倚天ECS实例,在典型性读写混合场景下,领先原生g8i ~31%,进一步对比优化后的g8i版本,倚天优化版本依然能够实现性能领先~7%。

image.png

2. 优化手段

平头哥倚天解决方案通用算力团队自底向上对PostgreSQL的性能指标和热点函数进行了详细抓取,并进行了对比分析,从硬件性能完成度指标出发,对开源PostgreSQL应用的特点进行了分析,从涉及应用性能瓶颈的Frontend Bound和Backend Bound指标出发对应用进行自顶向下的全栈优化。

具体包括应用层参数配置优化、OS层配置及内核优化、编译器层优化、微架构分析优化、硬件能力优化等。

  • 应用层:
  • 对PostgreSQL应用侧关键参数进行分析,结合当前的规格配置,针对倚天g8y实例进行适配优化,结合当前内存、cache等配置合适的shared buffer、wal buffer size、cacheline align size等激发硬件性能潜力。
  • 针对数据库并发场景下最常见锁冲突瓶颈,PostgreSQL结合倚天芯片指令进行针对性的优化,通过重新设计spinlock的实现、优化指令操作等方式,有效降低了并发场景下的锁冲突问题。
  • OS层:
  • 基于PostgreSQL运行时系统特点,针对涉及脏页回收、TCP网络包处理以及调度等相关的系统参数进行优化,提升CPU利用率,最大程度发挥倚天性能优势。
  • 配置OS 64K透明大页,以使能PostgreSQL的原子写,进一步降低IO写入代价。
  • 通过开启代码段大页,将应用程序代码段 (.text) 通过file THP映射,减少TLB entry开销,显著降低iTLB miss,降低了整个系统中的资源竞争。
  • 为了减少网络中断处理时由于频繁的上下文切换带来的性能损耗,通过“网卡中断聚合”的方式,针对SMP IRQ affinity和RPS做了相关调整,将多个网络队列绑定到一个核上,聚合处理能带来CPU iCache使用效率提升。
  • 编译器层:
  • 使用链接时优化(LTO)技术,扩展了编译器过程间分析的范围,全局优化数据库代码,降低iCache Miss。
  • 对OS内核及PostgreSQL服务端应用进行PGO(Profile Guided Optimization)优化。通过更优的代码冷热重新布局,降低在典型场景运行时应用的Frontend Bound。
  • 启用jemalloc优化,能够加速内存分配和回收,以减少PostgreSQL的内存管理成本,加速数据查询和写入速度。
  • 微架构分析优化:
  • 基于我们自主研发的Micro-Optimizer微架构分析优化工具,通过抓取运行时指令流,进行分支跳转分析,建立基于Basic Block的分析模型,可以获取更精确的代码冷热情况,可以在PGO的基础上进一步降低iCache Miss,减少应用的Frontend Bound。
  • 基于倚天特有的SPE特性,结合我们的Micro-Optimizer微架构分析优化工具,能够实现对运行时指令流中的ldr/str等访存指令进行分析建模,捕获PostgreSQL在不同场景下的dCache Miss情况。通过分析热点并结合指令预取或缓存锁定等优化手段可针对特定数据进行缓存优化,从而降低应用的Backend Bound。

image.png

  • 硬件能力优化:
  • 通过合适的硬件预取策略配置,可以进一步发挥倚天的硬件能力。数据库的内存访问与常见workload不同,访问模式更加随机,不适合通用的数据预取策略。在数据库场景下,过于激进的数据预取可能无法提高缓存命中率,反而会增加内存带宽的使用,并且在缓存中填充无效的数据。调整预取策略,为缓存设置合理的指令预留,能给PostgreSQL带来显著的性能收益。
  • 启用LSE指令扩展,使用原生的CAS 等指令实现数据库的原子操作,优化了加锁、解锁等操作的性能,极大提高了数据库高并发场景下的性能。

综上所述,从PostgreSQL应用本身出发,基于应用在倚天硬件平台上的top-down性能指标,通过软硬协同的手段,拉通应用-OS-基础软件-芯片硬件全面实现对应用性能的优化,实现Frontend Bound和Backend Bound的显著降低,充分使能和榨取硬件性能。其中有部分优化手段也适用于x86,我们在x86上也进行了同样的优化,也获取了一定的性能收益,但是综合来看在倚天上优化效果更佳,PostgreSQL性能也最终得以反超x86。

3. 性能测试

在性能测试中,我们选用数据库场景的典型8C32GB环境配置进行测试,服务端详细配置如下:

Terms

g8y.2xlarge

g8i.2xlarge

CPUs

8

8

Memory

32GB

32GB

Disk

100GB PL0

100GB PL0

OS

Alibaba Cloud Linux release 3 (Soaring Falcon)

Alibaba Cloud Linux release 3 (Soaring Falcon)

Kernel

5.10.134-15.al8.aarch64

5.10.134-15.al8.x86_64

GCC

Alibaba 10.2.1-3.5 2.32

Alibaba 10.2.1-3.5 2.32

PostgresSQL

REL_15_4

REL_15_4

CFLAGS

default in pgsql

default in pgsql

基础配置为PostgreSQL默认参数配置,对于优化配置,我们已将PostgreSQL所有优化手段集成在ptg-accelerator中,可以在基于开源PostgreSQL进行一键调优。

为了能够准确客观的衡量数据库性能,我们使用sysbench作为负载生成器和性能基准测试工具。

在数据库领域中,Sysbench经常被用来测试各种数据库管理系统(如PostgreSQL、MySQL等)在不同负载下的性能表现。它可以模拟并发用户访问数据库,测量数据库的读写能力、事务处理性能和并发连接处理能力等指标。在我们的测试环境中,它被部署在一个32C机器作为客户端,最终的性能以Sysbench压测输出结果为准,性能指标为TPS(Transactions Per Second,数据库每秒执行的事务数)。


g8y.2xlarge

g8i.2xlarge

倚天优化收益

Read Only

Read Write

Read Only

Read Write

Read Only

Read Write

基础性能

8318.68

5106.18

11365.09

6970.61

0%

0%

调优后性能

15348.05

9169.16

14003.04

8580.39

84.50%

79.57%

image.png

image.png

从上图可以看出,综合当前针对PostgreSQL的优化手段,能够在不同架构和平台下都实现一定的性能提升。但整体而言,基于倚天的硬件优势,多种优化手段能够在倚天上获得较为显著的性能提升,为应用在倚天平台的性能带来更大的性能优势:

  • 不论是只读还是读写混合场景下,优化后g8y都能够保持对相同规格优化版本g8i的性能领先;
  • 在只读场景下,能够实现g8y性能提升~84%,g8i性能提升~68%;
  • 在读写混合场景下,能够实现g8y性能提升~79%,g8i性能提升~68%。

进一步地,通过当前对PostgreSQL的软硬协同优化,对前后端性能瓶颈带来显著缓解,对比倚天平台优化前后性能指标:

image.png

image.png

  • Frontend Bound在iTLB、iCache、branch misses等指标方面显著下降,其中iTLB miss下降一个数量级,branch miss等指标下降接近20%,表明当前的优化有效弥补了PostgreSQL在处理器前端的劣势,能够充分发挥后端带来的处理性能。
  • Backend Bound在L1/L2 cache miss方面下降均超过10%,表明当前的优化在硬件处理方面的效率进一步增强,在已有后端计算和处理单元的基础上,高效利用后端的pipeline实现性能提升。

image.png

4. 优化总结

基于当前PostgreSQL在硬件前后端应用特征分析,结合开源PostgreSQL应用,针对性地对前后端从应用-系统-编译器-硬件芯片使用多种手段综合的协同优化,显著降低应用在CPU前后端的性能瓶颈,提升应用的IPC,实现开源PostgreSQL在倚天平台上性能的显著提升,领先同代同规格x86硬件,进一步实现ECS第八代倚天实例性价比领先Intel实例超过25%,带来可观的成本优势,欢迎购买使用。

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
存储 弹性计算 安全
阿里云轻量服务器通用型、CPU优化型、多公网IP型、国际型、容量型不同实例区别与选择参考
阿里云轻量应用服务器实例类型分为通用型、CPU优化型、多公网IP型、国际型、容量型,不同规格族的适用场景和特点不同,收费标准也不一样。本文为大家介绍轻量应用服务器通用型、多公网IP型、容量型有何区别?以及选择参考。
|
5月前
|
存储 缓存 监控
MySQL服务器配置优化:my.cnf参数调优指南
本文深入解析了MySQL核心配置参数及性能优化技巧,涵盖内存结构、调优原则、存储引擎优化、查询性能优化等内容,通过实战案例帮助读者构建高性能MySQL服务器配置,解决常见的性能瓶颈问题。
|
9月前
|
存储 弹性计算 缓存
阿里云服务器ECS实例选型与性能监控指南:从场景匹配到优化参考
随着云服务器的普及应用,越来越多的企业和个人用户选择将业务迁移到云端,以享受其带来的灵活性、可扩展性和成本效益。阿里云服务器(Elastic Compute Service,简称ECS)以其丰富的实例规格、卓越的性能和稳定的运行环境,赢得了广大用户的信赖。然而,对于很多初次接触云服务器产品的新手用户来说,面对阿里云多达几十种的云服务器实例规格,往往感到无从下手,不知道如何选择最适合自己业务需求的实例规格。本文旨在通过详细解析阿里云ECS实例规格的选择策略,并介绍如何有效监控云服务器性能,确保业务的高效运行。
516 63
|
5月前
|
存储 缓存 数据挖掘
阿里云轻量应用服务器“CPU优化型”配置介绍、费用价格说明
阿里云轻量应用服务器推出CPU优化型,提供更强计算性能,2核4GB起,最高16核64GB,全系支持200Mbps带宽。适用于企业级应用、数据库、游戏服务器等高算力场景,保障稳定高效运行。
651 1
|
6月前
|
人工智能 自然语言处理 安全
Python构建MCP服务器:从工具封装到AI集成的全流程实践
MCP协议为AI提供标准化工具调用接口,助力模型高效操作现实世界。
1218 1
|
6月前
|
缓存 监控 前端开发
详述uniapp项目部署于Nginx服务器的配置优化方法。
综上所述,uniapp项目部署于Nginx的优化方法多种多样,应根据实际情况灵活地采取合适的策略。配置后持续监控和调试,适时调整配置以保持最佳性能,并确保随着应用需求和访问模式的变化,服务器配置得到适当的更新和优化。
296 0
|
8月前
|
固态存储 关系型数据库 数据库
从Explain到执行:手把手优化PostgreSQL慢查询的5个关键步骤
本文深入探讨PostgreSQL查询优化的系统性方法,结合15年数据库优化经验,通过真实生产案例剖析慢查询问题。内容涵盖五大关键步骤:解读EXPLAIN计划、识别性能瓶颈、索引优化策略、查询重写与结构调整以及系统级优化配置。文章详细分析了慢查询对资源、硬件成本及业务的影响,并提供从诊断到根治的全流程解决方案。同时,介绍了索引类型选择、分区表设计、物化视图应用等高级技巧,帮助读者构建持续优化机制,显著提升数据库性能。最终总结出优化大师的思维框架,强调数据驱动决策与预防性优化文化,助力优雅设计取代复杂补救,实现数据库性能质的飞跃。
1339 0
|
10月前
|
缓存 PHP 数据库
WordPress网站服务器性能优化方法,站长必备。
最后,当你将这些方法组合起来并实施时,您将发现你的WordPress网站性能有了显著的提高。别忘了,这不是一次性的任务,要定期执行,保持你的车(网站)始终在轨道上飞驰。
325 21
|
11月前
|
弹性计算 Linux 云计算
阿里云操作系统控制台——ECS操作及云计算应用实践
本文详细介绍了云服务器ECS的使用流程,包括开通服务、系统配置、权限管理、组件安装及内存全景诊断等关键步骤。通过开通阿里云操作系统服务、授予RAM用户权限和安装必要组件,可实现对服务器的有效管理与维护。在内存诊断部分,展示了如何发起诊断并解析结果,帮助精准定位内存问题。此外,文章还讲解了利用ECS训练模型的操作方法,从上传文件到终端命令执行,直至完成模型训练。最后总结指出,掌握这些技能不仅提升了对云服务器架构的理解,还为实际业务提供了高效解决方案,展现了ECS在数据处理与分析中的重要价值。
阿里云操作系统控制台——ECS操作及云计算应用实践