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

大咖专栏|PG&MySQL江湖恩怨录 第四部

新运维新数据 2021-06-11
591

各位新朋友~记得先点蓝字关注我哦~


关注我们的公众号“新运维新数据”,观看前三部,不错过以后每一部。

大咖专栏|PG&MySQL江湖恩怨录  第一部

大咖专栏|PG&MySQL江湖恩怨录  第二部

大咖专栏|PG&MySQL江湖恩怨录  第三部


武林盟主之争


本来是个“挖掘机技术哪家强”的事,结果给唠成一个系列了。从Monty执著的技术人生,到斯通布雷克的封神之路,扯的的确有点远了。

回归正题,谁,才是新一代武林盟主?



首先介绍一下登场选手。

1号选手,MySQL:


热情美丽、妩媚动人的My,今年芳龄。。。。。。,

停,拿错剧本了,换图:


MySQL的出场台词只有一句话:“我是使用最广泛的数据库(没有之一)。”

(注,其实使用最广泛的、能称的上数据库的软件,是SQLLite,每部手机中几乎都有一个。当之无愧的使用最广,但它太小型了,不在我们的讨论范围之内)


2号选手,PostgreSQL:


出场台词:我是公认的最好的数据库。

除了1、2号选手外,请允许我隆重请出压阵的3号选手,Oracle。


拉里.埃里森:十几年前我就开着飞机上云了,现在你们说我不是云数据库!

好了,登场选手先介绍到这儿。比赛过程是这样的,我们集合团队中十年以上经验Oracle、MySQL、PG方面的人员,在同一台机器上安装MySQL 5.7, PG 12与Oracle 19c。选用同一款压测软件:sysbench,对三位选手分别进行了多轮的测试。

测试机的配置比较平民化,两块普通硬盘加一块SSD,做一个逻辑卷,SSD做为硬盘的缓存。

所以最终压测的TPS并不会很高,主要是三个选手互相间的较量。

罗里吧嗦这么多,不扯了,上结果。



数据安全测试

第一轮比试,保证数据安全,哪怕突然reboot、断电,也要有完善的redo、日志可供恢复。这是生产环境的基础要求。

在这个要求下,MySQL肯定要双1了

(sync_binlog和innodb_flush_log_at_trx_commit都设为1)。

PG的synchronous_commit一定要设为on。

结果如下:


数据库

TPS(每秒事务数)


1288.33


2159.82


526.64


怎么样,这个结果,惊不惊喜。

PG的TPS远高于MySQL和Oracle。

MySQL低于PG也好理解,毕竟Binlog和Redo,一是逻辑日志,另一个则是物理日志,写了两遍日志。一旦日志I/O到达瓶颈,对TPS的影响是最大的。

号称地上最强的Oracle,竟然远远落后于MySQL/PG。

Oracle的瓶颈在redo,等待事件全是log file sync。

MySQL/PG的瓶颈也是日志的I/O。


Oracle性能最差的原因,并不是Oracle廉颇老矣,也不是Oracle太差,而是Oracle太好。为了追求最高的并发度,Oracle的锁粒度是最细的。最简单的、竞争并不激烈的系统中,过细的锁粒度反而拖慢了性能。

sysbench其实只是简单的性能压测,SQL十分简单,压测结果也只有简单的参考意义。

如果以sysbench这种简单压测为依据,决定使用某种数据库,是十分盲目、且危险的。我在另一篇文章,《数据库传奇 digg启示录》中,有一个因为测试不充分就改换数据库导致灾难的例子,有兴趣可以读读。

我使用了以下的sysbench选项:

    --oltp_tables_count=8 :压测共针对8个表
    --oltp-table-size=5000000 :表大小为五百万行。
    --max-time=180:时间为180
    --num-threads=32 :在我的测试机上,32线程时每个数据库的TPS最高。
    --report-interval=2:两秒显示一次TPS等压测数据。
    --oltp-read-only=off:关闭只读模式。后面会有只读模式的测试。
    --oltp_point_selects=8:单行查询SQL的数量因子为8。数量因子越高,对应的SQL越多。
    --oltp_index_updates=2:更新索引列SQL的数量因子为1
    --oltp_simple_ranges=1:范围查询SQL的数量因子为1
    --oltp_distinct_ranges=1:distinct SQL的数量因子为1
    复制


    有兴趣的朋友也可以找台机器测试一下试试。

    下面,开始第二轮比试。

    速度测试

    第二轮比试:不保证数据安全,就看谁跑的更快。

    MySQL binlog关掉,不要binlog了,innodb_flush_log_at_trx_commit设为0。

    PG的synchronous_commit也相应的设为off。

    Oracle将commit_wait设置为NOWAIT。

    比试结果如下:


    数据库

    TPS(每秒事务数)


    1793.22


    2608.96


    685.03


    MySQL、PG都比前一轮测试多了500左右的TPS,Oracle增加不大。

    本轮比武,PG仍然拔得头筹。

    其实这样的测试,是有利于PG的。

    因为PG的vacuum对TPS还是有影响的,但180秒的测试,并不会触发vacuum。因此这种短时的测试,PG得分很高并不意外。但是比Oracle高出那么多,比MySQL也高了很多,还是很令人惊喜的。

    只读测试

    下面,开始最后一轮测试,纯只读测试。

    第三轮比试:只读测试。


    数据库

    TPS(每秒事务数)


    2271.11


    3364.67


    1095.93


    PG仍然毫无悬念的排在第一位,纯读TPS是MySQL的1.48倍,是Oracle的3.07倍。

    这个测试结果出乎你的意料吗?

    综合所有三轮比试,PG在性能方面都高于MySQL、Oracle,不愧是图灵奖大师斯通布雷克操刀的数据库,“公认最好数据库”之名,当之无愧。

    那么问题来了,PG这么优秀的一个数据库,为什么使用广度就是赶不上MySQL呢?

    相信这次武林大会的结果已经出乎意料了,给你留点时间继续震惊一会,关注公众号“新运维新数据”,后续文章,将继续为您揭晓。


    美创运维中心数据库服务团队拥有Oracle ACE 1人、OCM 10余人、数十名Oracle OCP、MySQL OCP、红帽RHCA、中间件weblogic、tuxedo认证、达梦工程师 ,著有《Oracle DBA实战攻略》,《Oracle数据库性能优化方法和最佳实践》,《Oracle内核技术揭秘》等多本数据运维优化书籍。目前运维各类数据库合计2000余套,精通Oracle、MySQL、SQLServer、DB2、PostgreSQL、达梦等主流商业和开源数据库。并成为首批国内达梦战略合作伙伴之一,拥有海量经验和完善的人员培养体系。并同时提供超融合,私有云整体解决方案。


    文章转载自新运维新数据,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论