美文网首页
Postgresql 两阶段提交性能差到什么程度?(二)

Postgresql 两阶段提交性能差到什么程度?(二)

作者: onmeiei | 来源:发表于2021-05-10 16:10 被阅读0次

书接上回。
上篇中测试了一个事务提交一条数据的情况,但现实中一个事务往往操作多条记录(增删改)。产生的磁盘IO比一个事务提交一条数据多了不少。

下文中测试一个事务提交10条数据的情况,主要和上篇中的测试结果对比,看一下趋势。

以下基于pg 11.6测试的结果,测试开关事务为500000,每次事务提交十条数据。

  • PGDATA存储在虚拟机挂在的磁盘中
线程数 事务方式 所有线程总耗时合计 TPS
1 普通事务 1028293 486
1 普通事务 1023322 489
1 两阶段 1506393 332
1 两阶段 1483806 337
10 普通事务 1663607 3006
10 普通事务 1667904 2998
10 两阶段 2560134 1953
10 两阶段 2518882 1985
20 普通事务 2567368 3895
20 普通事务 2560740 3905
20 两阶段 3273503 3055
20 两阶段 3237924 3088

同样,磁盘实在是烂,所以再测试一个数据放在内存中的数据。

  • PGDATA存储在/dev/shm"内存"中
线程数 事务方式 所有线程总耗时合计 TPS
1 普通事务 488569 1023
1 普通事务 534670 935
1 两阶段 575160 869
1 两阶段 594215 841
10 普通事务 764146 6543
10 普通事务 764494 6540
10 两阶段 850754 5877
10 两阶段 827988 6038
20 普通事务 1992769 5018
20 普通事务 1984047 5040
20 两阶段 2079837 4808
20 两阶段 2064065 4845

结论

两阶段提交相对于普通事务提交的达成率

先来看图,以普通事务的效率为1,两阶段对比普通事务的达成率如下。

两阶段对比普通事务的达成率
  • 看三条蓝色柱,更新单条数据时,与并发无关,达成率稳定在50%,即两阶段的效率是普通事务的一半。
  • 看每个并发中的,蓝色柱和灰色柱的比较或者橙色柱和黄色柱的对比,可以发现:当单个事务更新记录增加时,两阶段对比普通事务的达成率增加。即:两阶段所产生的性能下降,由于更新数据的条数增加,影响被稀释。
  • 看黄色柱,当IO性能提升后,高并发情况下,两阶段相对于普通事务的性能达成率接近100%。

再来看一下,TPS绝对值

  • IO很差,更新记录少(穷得很,设备老旧)
    普通事务可以达到每秒14350次事务提交,两阶段可以达到7152次事务提交,如果系统按二八原则运行,每天满负荷运行白天(8小时)的20%时间。
//普通事务
14350 事务/秒 * 8小时 * 3600秒/小时 * 0.2(二八原则) = 8265万次事务提交

//两阶段提交
7152 事务/秒 * 8小时 * 3600秒/小时 * 0.2(二八原则) = 4119万次事务提交
  • IO很差,更新记录多(依旧穷得很,设备老旧)
    普通事务可以达到每秒3900次事务提交,两阶段可以达到3071次事务事务提交,如果系统按二八原则运行,每天满负荷运行白天(8小时)的20%时间。
//普通事务
3900 事务/秒 * 8小时 * 3600秒/小时 * 0.2(二八原则) = 2246万次事务提交

//两阶段提交
3071 事务/秒 * 8小时 * 3600秒/小时 * 0.2(二八原则) = 1769万次事务提交
  • IO非常好,更新记录少(公司壕无人性,不差钱)
    普通事务可以达到每秒41165次事务提交,两阶段可以达到28438次事务事务提交,如果系统按二八原则运行,每天满负荷运行白天(8小时)的20%时间。
//普通事务
41165 事务/秒 * 8小时 * 3600秒/小时 * 0.2(二八原则) = 23711万次事务提交

//两阶段提交
28438 事务/秒 * 8小时 * 3600秒/小时 * 0.2(二八原则) = 16380万次事务提交
  • IO非常好,更新记录多(公司壕无人性,不差钱)
    普通事务可以达到每秒5029次事务提交,两阶段可以达到4826次事务事务提交,如果系统按二八原则运行,每天满负荷运行白天(8小时)的20%时间。
//普通事务
5029 事务/秒 * 8小时 * 3600秒/小时 * 0.2(二八原则) = 2896万次事务提交

//两阶段提交
4826 事务/秒 * 8小时 * 3600秒/小时 * 0.2(二八原则) = 2780万次事务提交

以上数据还只是单PG数据库的性能数据,对于非互联网乃至于小型互联网企业都是完全够用的。

建议

如果业务可以妥协,不要用任何一种分布式事务。
如果必须用分布式事务,不要直接否定某一种方案,要基于自己的业务实际情况进行分析,从而找到最适合自己的方案。

例如,我们目前面临的问题,每天不到千万业务量接口调用量,数据库给到了几十套,单纯讨论性能上考虑的话,两阶段提交是完全够用的。

防杠声明

本内容只是针对两阶段和普通事务的提交效率进行了对比,不讨论其他风险。

相关文章

网友评论

      本文标题:Postgresql 两阶段提交性能差到什么程度?(二)

      本文链接:https://www.haomeiwen.com/subject/qlridltx.html