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

DB吐槽大会,第65期 - PG 没有内置进程池

原创 digoal 2022-01-20
291

作者

digoal

日期

2021-09-30

标签

PostgreSQL , shared server , dedicate server


视频回放

1、产品的问题点
- PG 没有内置进程池

2、问题点背后涉及的技术原理
- PG 是进程模型, 每个新建的连接在PG数据库端都会fork一个新的进程来进行对接.
- Oracle也是进程模型的数据库, 这种模式较dedicate server模式.

3、这个问题将影响哪些行业以及业务场景
- 互联网类的高并发业务
- 大量连接, 小事务, 写操作
- 高并发短连接

4、会导致什么问题?
- 性能急剧下降
- 《DB吐槽大会,第9期 - PG 大量连接写小事务性能差》
- 《DB吐槽大会,第8期 - PG 高并发短连接性能差》

5、业务上应该如何避免这个坑
- 可以在业务和数据库中间增加1个连接池, 例如pgbouncer. 使用事务级别的连接池复用模式.

6、业务上避免这个坑牺牲了什么, 会引入什么新的问题
- 使用连接池时, 业务与数据库的连接会多1跳, 使得SQL的RT可能增加
- 由于使用事务级别的连接池复用模式, 每个事务结束后, 后端数据库连接可能切换给其他会话使用, 下次发起请求时, 用到的也可能是不一样的后端数据库连接. 因此在业务层无法使用绑定变量等含会话层属性的特性, 无法使用绑定变量可能导致高并发性能下降, CPU使用率上升.

7、数据库未来产品迭代如何修复这个坑
- 希望支持内核层面的连接池。 类似oracle的shared server模式. 并且要支持会话变量多进程共享的能力, 避免出现无法支持会话变量或属性(例如绑定变量)的功能.
- 连接池考虑支持多个分组,用户可以自定义使用哪个分组,或者默认根据QUERY的读写特性区分分组,或者根据QUERY的时长区分分组。
- 例如olap业务可以使用ap分组(这样的话资源之间可以做到很好的隔离) , TP业务使用TP分组. 分组之间的后端连接区分开来, 相互不干扰.

PostgreSQL 许愿链接

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

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

PostgreSQL 解决方案集合

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

digoal's wechat

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

评论