标签

PostgreSQL , vacuum , freeze , 分区表 , 并行vacuum


背景

我们之前做过一个这样的测试,单表数据从1000万到10亿,对其进行增删改查的压测,性能几乎没有衰减。

数据量 写入吞吐 查询tps 更新tps
1000万 58万行/s 67万 23.1万
1亿 53.2万行/s 63.4万 24.5万
10亿 162.6万行/s 60.6万 23.4万

《HTAP数据库 PostgreSQL 场景与性能测试之 45 - (OLTP) 数据量与性能的线性关系(10亿+无衰减), 暨单表多大需要分区》

是不是就意味着我们不需要对数据库进行分表了呢?

实际上单表太大,还可能引入其他问题,例如:

1、创建索引,大表创建索引时间会更久,当然PostgreSQL 11已经支持单表并行创建索引了,所以这个问题逐渐会不存在。

《PostgreSQL 11 preview - 并行排序、并行索引 (性能线性暴增) 单实例100亿TOP-K仅40秒》

2、加字段并加默认值,或者不能online DDL的操作。单表越大,操作时间会越久。

这个问题的解法:1 支持更多的ONLINE DDL(类似 pg_repack 的原理)。2 支持DDL并行。

3、垃圾回收,因为单表的垃圾回收目前只支持串行,所以单表越大,垃圾回收的时间越长。

这个问题的解法:支持并行VACUUM。社区已经在做这个PATCH。

4、FREEZE表,与垃圾回收类似的问题,单表的垃圾回收,目前只能串行。而FREEZE如果很慢,并且慢过产生TXID的速度,可能导致数据库因为XID耗尽,需要停止业务来进行冻结。

这个问题的解法:1 支持并行VACUUM。社区已经在做这个PATCH。 2 skip clean page(9.6开始已经支持),使得freeze效率高了很多。3 支持64BIT txid,完全杜绝freeze操作。

5、单表可能打爆文件系统,因为单个表只能放在单个表空间中,表空间对应文件系统,所以单表的大小也受到文件系统大小的限制。

这个问题的解法:1 使用类似LVM,ZFS这样的卷管理,使得单个文件系统很大很大。 2 使用分区表。

以上问题是单表很大时,可能出现的问题。

所以单表多大需要使用分区表呢?主要考虑几个方面:

1、表上的DML频率。

2、数据库的硬件性能指标。

3、查询方面的优化需求,例如是否可以通过分区来降维,优化SQL性能。

比较傻瓜式的建议(SSD,多核):

不频繁更新、删除的表:记录数20亿,表占用空间200 GB。就可以考虑分表了。

平反更新、删除、插入的表:记录数2亿,表占用空间20 GB。就可以考虑分表了。

如何平滑将单表切换为分区表?

1、pg_pathman提供了平滑切换到分区表的API。

https://github.com/postgrespro/pg_pathman

《PostgreSQL 9.5+ 高效分区表实现 - pg_pathman》

vacuum的内核改进

针对前面提到的垃圾回收,freeze操作,内核层面可以做出的改进。

1、并行vacuum

https://www.postgresql.org/message-id/flat/CAD21AoD1xAqp4zK-Vi1cuY3feq2oO8HcpJiz32UDUfe0BE31Xw@mail.gmail.com#CAD21AoD1xAqp4zK-Vi1cuY3feq2oO8HcpJiz32UDUfe0BE31Xw@mail.gmail.com

https://commitfest.postgresql.org/13/954/

目前这个PATCH还没有提交到主干。

2、跳过clean page(根据vm文件标记位),9.6开始,就支持了SKIP CLEANUP PAGE,freeze性能大幅提升。

《PostgreSQL 9.6 vacuum freeze大幅性能提升 代码浅析》

3、64bit xid,治本的方法。

https://commitfest.postgresql.org/17/1178/

PostgresPRO 版本引入了64BIT的txid,所以不再需要全局freeze操作。

https://postgrespro.com/docs/enterprise/10/routine-vacuuming.html#VACUUM-FOR-WRAPAROUND

将数据库的PAGE转换为兼容postgrespro的PAGE,可以使用如果工具。

对于FREEZE操作来说,方法1和2都是治标不治本的方法,3是社区正在改进的方向,可以看到社区的commitfest已经在加快做64bit txid 的 refact了。

https://github.com/postgrespro/pg_pageprep

参考

https://www.postgresql.org/message-id/flat/CAD21AoD1xAqp4zK-Vi1cuY3feq2oO8HcpJiz32UDUfe0BE31Xw@mail.gmail.com#CAD21AoD1xAqp4zK-Vi1cuY3feq2oO8HcpJiz32UDUfe0BE31Xw@mail.gmail.com

《HTAP数据库 PostgreSQL 场景与性能测试之 45 - (OLTP) 数据量与性能的线性关系(10亿+无衰减), 暨单表多大需要分区》

《PostgreSQL 11 preview - 并行排序、并行索引 (性能线性暴增) 单实例100亿TOP-K仅40秒》

pg_repack

《PostgreSQL 9.5+ 高效分区表实现 - pg_pathman》

《PostgreSQL 9.6 vacuum freeze大幅性能提升 代码浅析》

PostgreSQL 并行vacuum patch - 暨为什么需要并行vacuum或分区表相关推荐

  1. Postgresql关于Vacuum的作用和操作方法,Vacuum full类似alter table会锁表并生成新的relfilenode

    官方文档 http://postgres.cn/docs/11/sql-vacuum.html http://postgres.cn/docs/11/progress-reporting.html h ...

  2. mysql 并行复制原理_MySQL 5.7 并行复制实现原理与调优

    MySQL 5.7并行复制时代 众所周知,MySQL的复制延迟是一直被诟病的问题之一,然而在Inside君之前的两篇博客中(1,2)中都已经提到了MySQL 5.7版本已经支持"真正&quo ...

  3. 3模型大小_分布式训练中数据并行远远不够,「模型并行+数据并行」才是王道...

    选自arXiv 作者:Saptadeep Pal等 机器之心编译参与:魔王.杜伟 数据并行(DP)是应用最广的并行策略,对在多个设备上部署深度学习模型非常有用.但该方法存在缺陷,如随着训练设备数量不断 ...

  4. 实战matlab之并行程序设计.pdf,实战Matlab之并行程序设计_IT教程网

    资源名称:实战Matlab之并行程序设计 内容简介: <实战Matlab之并行程序设计>通过阅读和学习,读者可以掌握基于多种平台(多核.多处理器.集群和GPU等),利用多项技术(Matla ...

  5. 多核时代:并行程序设计探讨(1)——并行系统

    并行程序设计探讨(1)--并行系统 大家可能会有疑问:你一会儿并行,一会儿多核,到底是谁跟谁啊? 我开始也有这个疑问,甚至以为并行就是多核,其实两个并不能对等,一句话就是:多核是并行的一种. 并行本身 ...

  6. 多核时代:并行程序设计探讨(2)——并行实现技术

    并行程序设计探讨(2)--并行实现技术 通过"并行程序设计探讨(1)"的介绍,相信大家都已经对并行系统相关的概念有了初步的了解.不过看起来挺吓人的,一堆的术语和概念,想起来头就有点 ...

  7. java并行安全吗_并发和并行有什么区别

    并发(concurrency)和并行(parallellism) 并发:是指同一个时间段内多个任务同时都在执行,并且都没有执行结束.并发任务强调在一个时间段内同时执行,而一个时间段由多个单位时间累积而 ...

  8. C#并行编程(3):并行循环

    初识并行循环 并行循环主要用来处理数据并行的,如,同时对数组或列表中的多个数据执行相同的操作. 在C#编程中,我们使用并行类System.Threading.Tasks.Parallel提供的静态方法 ...

  9. oracle大表复制加并行,GoldenGate复制单表开并行

    最近有几项业务下线,需要从一张表中删除6.8亿多条数据.想办法把数据删除掉了,但对应的ogg灾备端复制时有了的延迟,而且延迟的时间起来越长. 对于表太多造成的延迟可以把所有表分为多个组来做复制,于是想 ...

最新文章

  1. 树——二叉搜索树的实现
  2. 用python画玫瑰花代码-用python画一朵玫瑰给你
  3. 编程之美-最短摘要的生成方法整理
  4. 迅雷的user-agent
  5. oracle 数据掩码,oracle格式掩码
  6. 超全总结!2020年那些大牛AI论文
  7. JavaScript RegExp(正则)
  8. 腾讯开源开年红!TencentOS 内核正式开源
  9. 微软发布Visual Studio 2010 SP1公测版
  10. 数据结构与算法LeetCode题目索引
  11. 虚拟机架设 ftp 服务器 pureadmin,使用pure-ftpd搭建ftp服务器(简单实现被动模式)...
  12. 2022年中国研究生数学建模竞赛E题-草原放牧策略研究
  13. perl脚本的参数输入
  14. 移动端车牌识别sdk-手机拍照识别车牌技术
  15. 简易交通灯设计——数电课设
  16. Bzoj2959: 长跑
  17. Ambiguous method call.both
  18. 全球及中国游戏耳机市场运营模式分析及需求前景预测报告2022年版
  19. 国产内存真的来了:紫光可提供DDR3、DDR4内存芯片
  20. 操作系统LAB1实验报告

热门文章

  1. 什么是schema?
  2. C#之windows桌面软件第四课:串口助手控制设备的开关
  3. WEB 3.0(非技术版)
  4. 常考数据结构与算法----给定一个二叉树和一个值 sum,请找出所有的根节点到叶子节点的节点值之和等于sum 的路径,
  5. html5 如何实现客户端验证上传文件的大小
  6. Java Socket 学习
  7. .NET独有的精巧泛型设计模式
  8. java里程序控制流程_Java语言中的程序流程控制
  9. Python 使用readability 提取网页标题
  10. Artlantis 2020中文版