Postgresql引入SIMD指令集
相关 【1】https://postgrespro.com/blog/pgsql/5969859#commit_37a6e5df 【2】《Postgresql源码(65)新快照体系Globalvis工作原理分析》
1 概要
快照相关逻辑一直是PG高并发场景下的瓶颈点,经过PG13的几次重大优化后,GetSnapshotData的性能已经有显著提升(解决CPU false sharing问题)。
最近社区又结合硬件能力继续对快照场景进行优化,优化代码不多但效果非常好,思路也值得借鉴(PG代码中有大量应用场景)。
2 优化内容
Optimized lookups in snapshots commit: 37a6e5df, b6ef1675, 82739d4a
The patch optimizes linear searches of arrays (first commit) for x86-64 (second commit) and ARM (third commit). The new algorithm using SIMD instructions was applied to snapshot->xip array search. At a large number (hundreds) of concurrent writers, it significantly increases the visibility check speed, which is an overall performance boost.
37a6e5df, b6ef1675, 82739d4a三个patch对数组的线性搜索有很大优化:
优化前:原来snapshot->xip存的是排序后的事务ID,判断一个XID是不是在这个数组中,需要一个一个比较:
for (i = 0; i < snapshot->xcnt; i++)
{
if (TransactionIdEquals(xid, snapshot->xip[i]))
return true;
patch引入SIMD指令集(支持X86和ARM),使大量并发写的场景下,对整体性能有大幅度提升。
优化后:
if (pg_lfind32(xid, snapshot->xip, snapshot->xcnt))
return true;
DIFF
相关文章
- Postgresql实验系列(4)SIMD提升线性搜索性能24.5%(附带PG SIMD完整用例)
- mac下使用brew配置nginx+php+mysql+PostgreSQL
- Postgresql快照堆栈ActiveSnapshot
- SQL开发知识:PostgreSQL 10分区表及性能测试报告小结
- Postgresql 数据库基础 之 转义字符操作
- postgreSQL 数据库基础 除法保留小数位如何设置的实例
- PostgreSQL中的collations用法详解
- Postgresql 如何清理WAL日志
- PostgreSQL 53100: disk_full 报错 故障修复 远程处理
- PostgreSQL 57P01: admin_shutdown 报错 故障修复 远程处理
- PostgreSQL更新和删除详解数据库
- PostgreSQL编码协议:改变数据库架构(postgresql协议)
- 历程PostgreSQL: 从历史足迹到发展潮流(postgresql发展)
- 权限PostgreSQL:配置用户权限(postgresql用户)
- PostgreSQL:实现数据库的继承性(postgresql继承)
- 的性能优势Postgresql在性能方面的优势——德哥的深度解读(德哥postgresql)
- 中跳出跳出PostgreSQL循环的实践方法(postgresql循环)
- PostgreSQL简介:开源关系型数据库系统(postgresql简介)
- 深入浅出:PostgreSQL编程指南(postgresql编程)
- 修复PostgreSQL:解决数据库难题(postgresql问题)
- Postgresql安装之路:简单但又重要的指南(postgresql安装教程)
- 走进PostgreSQL:探索官网的宝藏(postgresql官网)
- 新手快速登录Postgresql数据库(登录postgresql)