PG中文社区 /
mdi-home
首页 社区新闻 中文文档 加入ACE {{ item.text }} 登录
mdi-home 首页 mdi-chat-processing 社区新闻 mdi-book-open-variant 中文文档 mdi-account-multiple-check 加入ACE mdi-file-multiple-outline 相关资料 mdi-blank {{item.text}} mdi-exit-to-app 退出账号
【转发】PostgreSQL的可伸缩性:向单实例百万TPS迈进

原作者:Alexander Korotkov  创作时间:2016-05-09 00:29:19+08  
doudou586 发布于2016-05-30 00:29:19           评论: 2   浏览: 15476   顶: 3397  踩: 3578 

原文链接: http://akorotkov.github.io/blog/2016/05/09/scalability-towards-millions-tps/

在很久以前,多内核和多网络套接字的服务器被广泛使用后,PostgreSQL的可伸缩性在这些服务器上的优化已成为一个研究课题。这有一篇[博客]显示了在8.0版本和8.4版本之间进行垂直扩展的简要历史。PostgreSQL 9.2版本在可伸缩性方面有了显著的提高。得益于快速路径锁定功能和其他优化方法,在仅SELECT查询的pgbench性能测试中,单实例TPS已可达35万。最新稳定的PostgreSQL 9.5版本也包含了大量重要的可伸缩性功能优化,包括LWLock功能的优化,在仅SELECT查询的pgbench性能测试中,大约可达到40万TPS。

Postgres的专业服务公司也加入了可伸缩性的优化工作。在与IBM的合作中,我们研究了PostgreSQL的可伸缩性在现代的Power8服务器上的优化。 研究结果发布在很流行的俄罗斯博客网站habrahabr . 我们主要使用到了两种方式来提高PostgreSQL在Power8服务器上的可伸缩性:

  • 实现Pin/UnpinBuffer() ,使用CAS 操作来代替缓存头的spinlock;
  • 优化LWLockAttemptLock() 在装配线的处理,减少改变lwlock 状态的循环次数。
优化方法1在配置较高的Intel服务器上也会有较大帮助,优化方法2主要适用于Power系统服务器。在经过多轮的优化后,Andres Freund最终提交了完整的方法1的补丁及测试过程。

在上图中,我们比较了以下的PostgreSQL版本的表现:

  1. 9.5.2 版本 – 峰值出现在60用户时达54万TPS;
  2. 9.6 主版本 – 峰值出现在100用户时达106万TPS;
  3. 9.6 主版本,配置为所有PGXACT全部使用缓存流水线队列 – 峰值出现在200用户时达172万TPS。

队列问题有必要解释一下。开始,因为发现性能的衰减问题,我提交了5364b357补丁,但它会增加clog缓冲的数值,这本身是有点奇怪的,因为只读测试是不应该查询clog缓冲的。我们期望的结果是clog缓存不会真正直接地影响只读类性能,5364b357补丁只是修改的共享内存结构的布局。

测试结果显示只读类测试对共享内存的结构非常敏感。因此,测试性能的结果会因共享内存大小(share_Buffers)、最大连接数(max_connections)和其它影响共享内存分配的参数的变化而发生较大变化。当我给了Andres一台很强大的服务器时,他很快就找到一种方法来处理性能的不正常情况:将所有活动事务(PGXACT)进行缓存排队。当没有打补丁时,SnapshotResetXmin() 中脏的处理器缓存包含多个PGXACTs。 打了补丁后,SnapshotResetXmin() 中脏的处理器缓存仅包含一个活动事务。这样GetSnapshotData()中缓存大部分都可以命中。 我对这个结果很吃惊,也算是给了我一个教训。我知道队列会影响性能,但没想到影响有这么大。活动事务的缓存流水线队列问题是在9.6版本的特性冻结之后发现的,这也意味着这个补丁只会出现在9.7版本的开发中了。然而,9.6版本还是有非常显著的可伸缩性提升的。

因此,PostgreSQL单实例可以实现超一百万的TPS,也可以说PostgreSQL开创了百万TPS的新时代。

在此我也要感谢以下朋友们:

  • Andres Freund,是这个补丁包的共同开发者和审核者;
  • 我在PostgresPro公司的同事,Dmitry Vasilyev帮助做了很多的性能测试,YUriy Zhuravlev 帮助对这个补丁的原理作了第一版的证明;
  • Dilip Kumar和Robert Haas他们帮助进行了这项测试。


评论:2   浏览: 15476                   顶: 3397  踩: 3578 

请在登录后发表评论,否则无法保存。

1# __ xcvxcvsdf 回答于 2024-11-11 23:05:19+08
http://ruanwen.xztcxxw.cn/hbsnj/ https://yxhongqiao.tiancebbs.cn/ https://fenlei.tiancebbs.cn/heihe/ http://bjtcxxw.cn/cqdz/ http://fuyang.tjtcbmw.cn/guangzhou/ http://huilong.sctcbmw.cn/hbhs/ http://ty.cqtcxxw.cn/neijiang/ http://ty.cqtcxxw.cn/wulanchabu/ http://bjtcxxw.cn/haerbin/ http://fuyang.tjtcbmw.cn/hbts/ http://yz.cqtcxxw.cn/hangzhou/ http://ouyu.hftcbmw.cn/cqjb/ http://ouyu.hftcbmw.cn/qhys/ https://rychengbei.tiancebbs.cn/ http://jinqiang.ahtcbmw.cn/fjshs/ https://fuqing.tiancebbs.cn/ http://ruanwen.xztcxxw.cn/jxyt/

2# __ GUEST 回答于 2016-09-01 15:05:17+08
jjjj



发表评论:
加入我们
QQ群1:5276420
QQ群2:3336901
QQ群3:254622631
文档群:150657323
文档翻译平台:按此访问
社区邮件列表:按此订阅
商业支持
扫码关注
加入我们
QQ群1:5276420
QQ群2:3336901
QQ群3:254622631
文档群:150657323
文档翻译平台:按此访问
社区邮件列表:按此订阅
商业支持
扫码关注
© PostgreSQL中文社区 ... (自2010年起)