暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

DB吐槽大会,第64期 - PG 里面的某些单核瓶颈

原创 digoal 2022-01-20
590

作者

digoal

日期

2021-09-30

标签

PostgreSQL , 单核 , 瓶颈 , vacuum , wal , checkpoint


视频回放

1、产品的问题点
- PG 里面的某些单核瓶颈

2、问题点背后涉及的技术原理
- 虽然PG已经支持并行计算, 大多数的SQL支持通过并行计算加速, 使得PG可以支撑OLAP类业务. 但是还存在一些单核场景.
- WAL writer
- vacuum 单表/单分区时
- checkpointer
- 崩溃recovery时
- bgwriter

3、这个问题将影响哪些行业以及业务场景
- 写压力较大的场景
- 表比较大而且这个表的更新并发较高的场景, 例如互联网业务
- ssd云盘使用网络通信, 相比本地盘存在先天缺陷, 虽然带宽大, 但是每次IO的延迟较高. 所以小IO或离散IO的场景(特别是数据库): 单线程打不满IO.

4、会导致什么问题?
- 写压力特别大的场景, 可能有两个性能瓶颈, datalbock extend exclusive lock, 或者 wal insert exclusive lock.
- 表比较大, 而且更新并发高时, 可能导致vacuum赶不上产生垃圾的速度, 产生恶性表膨胀.
- shared buffer配置较大而且脏页较多时, checkpoint 周期可能会很长.
- 如果检查点周期很长, 崩溃恢复过程中需要恢复的WAL文件数可能较多, 从而导致恢复时间漫长.

5、业务上应该如何避免这个坑
- 拆库
- 拆表或使用分区表, 解决vacuum 单表/单分区串行问题.
- 配置更豪华的SSD存储, 一定程度缓解检查点慢或者恢复慢点问题

6、业务上避免这个坑牺牲了什么, 会引入什么新的问题
- 需要调整业务, 可能涉及业务代码的修改.
- 分区表会引入一定的性能问题. (PG大版本有改观, 性能影响几乎可以忽略不计, 一定要用大版本).

7、数据库未来产品迭代如何修复这个坑
- 希望内核层面可以支持更多并行化的后台进程任务
- 采用 wal 分区设计、减少锁冲突、同时支持更多的并行insert
- 支持vacuum 单表/单分区/单索引内的并行(目前支持单表的多个索引的并行)
- 支持并行的checkpoint, 支持并行的recovery

PostgreSQL 许愿链接

您的愿望将传达给PG kernel hacker、数据库厂商等, 帮助提高数据库产品质量和功能, 说不定下一个PG版本就有您提出的功能点. 针对非常好的提议,奖励限量版PG文化衫、纪念品、贴纸、PG热门书籍等,奖品丰富,快来许愿。开不开森.

9.9元购买3个月阿里云RDS PostgreSQL实例

PostgreSQL 解决方案集合

德哥 / digoal's github - 公益是一辈子的事.

digoal's wechat

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论