【干货总结】:可能是史上最全的MySQL和PGSQL对比材料

运维了MySQL和PGSQL已经有一段时间了,最近接到一个数据库选型需求,于是便开始收集资料整理了一下,然后就有了下面的对比表

关键词:PostgreSQL 11、MySQL5.7

比较版本:PostgreSQL 11    VS      MySQL5.7(innodb引擎) Oracle官方社区版

版权情况:PostgreSQL 11(免费开源)、MySQL5.7 Oracle官方社区版(免费开源)


1. CPU限制

PGSQL

没有CPU核心数限制,有多少CPU核就用多少

MySQL

能用128核CPU,超过128核用不上


 2. 配置文件参数

PGSQL

一共有255个参数,用到的大概是80个,参数比较稳定,用上个大版本配置文件也可以启动当前大版本数据库

MySQL

一共有707个参数,用到的大概是180个,参数不断增加,就算小版本也会增加参数,大版本之间会有部分参数不兼容情况


3. 第三方工具依赖情况

PGSQL

只有高可用集群需要依靠第三方中间件,例如:patroni+etcd、repmgr

MySQL

大部分操作都要依靠percona公司的第三方工具(percona-toolkit,XtraBackup),工具命令太多,学习成本高,高可用集群也需要第三方中间件,官方MGR集群还没成熟



4. 底层主从复制原理

PGSQL

物理复制,跟SQL Server镜像/AlwaysOn一样,严格一致,没有任何可能导致不一致,性能和可靠性上,物理复制完胜逻辑复制,维护简单

MySQL

逻辑复制,(sql_log_bin、binlog_format等参数设置不正确都会导致主从不一致)
大事务并行复制效率低,对于重要业务,需要依赖 percona-toolkit的pt-table-checksum和pt-table-sync工具定期比较和修复主从一致
主从复制出错严重时候需要重搭主从
MySQL的逻辑复制并不阻止两个不一致的数据库建立复制关系



5. 从库只读状态

PGSQL

系统自动设置从库默认只读,不需要人工介入,维护简单

MySQL

从库需要手动设置参数super_read_only=on,让从库设置为只读,super_read_only参数有bug,链接:https://baijiahao.baidu.com/s?id=1636644783594388753&wfr=spider&for=pc



6. 版本分支

PGSQL

只有社区版,没有其他任何分支版本,PGSQL官方统一开发,统一维护,社区版有所有功能,不像SQL Server和MySQL有标准版、企业版、经典版、社区版、开发版、web版之分
国内外还有一些基于PGSQL做二次开发的数据库厂商,例如:Enterprise DB、瀚高数据库等等,当然这些只是二次开发并不算独立分支

MySQL

由于历史原因,分裂为三个分支版本,MariaDB分支、Percona分支 、Oracle官方分支,发展到目前为止各个分支基本互相不兼容
Oracle官方分支还有版本之分,分为标准版、企业版、经典版、社区版



7. SQL特性支持

PGSQL

SQL特性支持情况支持94种,SQL语法支持最完善,例如:支持公用表表达式(WITH查询)

MySQL

SQL特性支持情况支持36种,SQL语法支持比较弱,例如:不支持公用表表达式(WITH查询)

关于SQL特性支持情况的对比,可以参考:http://www.sql-workbench.net/dbms_comparison.html



8. 主从复制安全性

PGSQL
同步流复制、强同步(remote apply)、高安全,不会丢数据
PGSQL同步流复制:所有从库宕机,主库会罢工,主库无法自动切换为异步流复制(异步模式),需要通过增加从库数量来解决,一般生产环境至少有两个从库
手动解决:在PG主库修改参数synchronous_standby_names =‘‘,并执行命令: pgctl reload ,把主库切换为异步模式

主从数据完全一致是高可用切换的第一前提,所以PGSQL选择主库罢工也是可以理解

MySQL
增强半同步复制 ,mysql5.7版本增强半同步才能保证主从复制时候不丢数据
mysql5.7半同步复制相关参数:
参数rpl_semi_sync_master_wait_for_slave_count 等待至少多少个从库接收到binlog,主库才提交事务,一般设置为1,性能最高
参数rpl_semi_sync_master_timeout 等待多少毫秒,从库无回应自动切换为异步模式,一般设置为无限大,不让主库自动切换为异步模式
所有从库宕机,主库会罢工,因为无法收到任何从库的应答包

手动解决:在MySQL主库修改参数rpl_semi_sync_master_wait_for_slave_count=0



9. 多字段统计信息

PGSQL

支持多字段统计信息

MySQL

不支持多字段统计信息



10. 索引类型

PGSQL

多种索引类型(btree , hash , gin , gist , sp-gist , brin , bloom , rum , zombodb , bitmap,部分索引,表达式索引)

MySQL

btree 索引,全文索引(低效),表达式索引(需要建虚拟列),hash 索引只在内存表


11. 物理表连接算法

PGSQL

支持  nested-loop join 、hash join 、merge join

MySQL

只支持  nested-loop join


12. 子查询和视图性能

PGSQL

子查询,视图优化,性能比较高

MySQL

视图谓词条件下推限制多,子查询上拉限制多


13. 执行计划即时编译

PGSQL

支持  JIT    执行计划即时编译,使用LLVM编译器

MySQL

不支持执行计划即时编译


14. 并行查询

PGSQL

并行查询(多种并行查询优化方法),并行查询一般多见于商业数据库,是重量级功能

MySQL

有限,只支持主键并行查询



15. 物化视图

PGSQL

支持物化视图

MySQL

不支持物化视图



16. 插件功能

PGSQL

支持插件功能,可以丰富PGSQL的功能,GIS地理插件,时序数据库插件, 向量化执行插件等等

MySQL

不支持插件功能



17. check约束

PGSQL

支持check约束

MySQL

不支持check约束,可以写check约束,但存储引擎会忽略它的作用,因此check约束并不起作用(mariadb 支持)



18. gpu 加速SQL

PGSQL

可以使用gpu 加速SQL的执行速度

MySQL

不支持gpu 加速SQL 的执行速度



19. 数据类型

PGSQL

数据类型丰富,如 ltree,hstore,数组类型,ip类型,text类型,有了text类型不再需要varchar,text类型字段最大存储1GB

MySQL

数据类型不够丰富



20. 跨库查询

PGSQL

不支持跨库查询,这个跟Oracle 12C以前一样

MySQL

可以跨库查询



21. 备份还原

PGSQL

备份还原非常简单,时点还原操作比SQL Server还要简单,完整备份+wal归档备份(增量)
假如有一个三节点的PGSQL主从集群,可以随便在其中一个节点做完整备份和wal归档备份

MySQL

备份还原相对不太简单,完整备份+binlog备份(增量)
完整备份需要percona的XtraBackup工具做物理备份,MySQL本身不支持物理备份
时点还原操作步骤繁琐复杂



22. 性能视图

PGSQL

需要安装pg_stat_statements插件,pg_stat_statements插件提供了丰富的性能视图:如:等待事件,系统统计信息等
不好的地方是,安装插件需要重启数据库,并且需要收集性能信息的数据库需要执行一个命令:create extension pg_stat_statements命令
否则不会收集任何性能信息,比较麻烦

MySQL

自带PS库,默认很多功能没有打开,而且打开PS库的性能视图功能对性能有影响(如:内存占用导致OOM bug)



23. 安装方式

PGSQL

有各个平台的包rpm包,deb包等等,相比MySQL缺少了二进制包,一般用源码编译安装,安装时间会长一些,执行命令多一些

MySQL

有各个平台的包rpm包,deb包等等,源码编译安装、二进制包安装,一般用二进制包安装,方便快捷



24. DDL操作

PGSQL

加字段、可变长字段类型长度改大不会锁表,所有的DDL操作都不需要借助第三方工具

MySQL

由于大部分DDL操作都会锁表,例如加字段、可变长字段类型长度改大,所以需要借助percona-toolkit里面的pt-online-schema-change工具去完成操作
将影响减少到最低,特别是对大表进行DDL操作



25. 大版本发布速度

PGSQL

PGSQL每年一个大版本发布,大版本发布的第二年就可以上生产环境,版本迭代速度很快

PGSQL 10正式版推出时间:2017年
PGSQL 11正式版推出时间:2018年
PGSQL 12正式版推出时间:2019年

MySQL

MySQL的大版本发布一般是2年~3年,一般大版本发布后的第二年才可以上生产环境,避免有坑,版本发布速度比较慢

MySQL5.6正式版推出时间:2013年
MySQL5.7正式版推出时间:2015年
MySQL8.0正式版推出时间:2018年



26. returning语法

PGSQL

支持returning语法,returning clause 支持 DML 返回 Resultset,减少一次 Client <-> DB Server 交互

MySQL

不支持returning语法


27. 内部架构

PGSQL

多进程架构,并发连接数不能太多,跟Oracle一样,既然跟Oracle一样,那么很多优化方法也是相通的,例如:开启大页内存

MySQL

多线程架构,虽然多线程架构,但是官方有限制连接数,原因是系统的并发度是有限的,线程数太多,反而系统的处理能力下降,随着连接数上升,反而性能下降
一般同时只能处理200 ~300个数据库连接



28. 聚集索引

PGSQL

不支持聚集索引,PGSQL本身的MVCC的实现机制所导致

MySQL

支持聚集索引



29. 空闲事务终结功能

PGSQL

通过设置 idle_in_transaction_session_timeout 参数来终止空闲事务,比如:应用代码中忘记关闭已开启的事务,PGSQL会自动查杀这种类型的会话事务

MySQL

不支持终止空闲事务功能



30. 应付超大数据量

PGSQL

不能应付超大数据量,由于PGSQL本身的MVCC设计问题,需要垃圾回收,只能期待后面的大版本做优化

MySQL

不能应付超大数据量,MySQL自身架构的问题



31. 分布式演进

PGSQL

HTAP数据库:cockroachDB、腾讯Tbase

分片集群:  Postgres-XC、Postgres-XL

MySQL
HTAP数据库:TiDB
分片集群: 各种各样的中间件,不一一列举


小结

上面的对比表还不是很完善,只有一些本人认为比较关键的特性拿出来对比

总的来说,MySQL因为需要支持更换存储引擎,所以某些功能都要受制于存储引擎层,例如:物理复制

而PGSQL不支持更换存储引擎(在PGSQL V12开始也支持可插拨的表存取接口),而且一直由官方统一开发和维护,所以相对比较稳定,功能也比较完善,对得上它的称号:《世界上功能最为强大的开源数据库》

PGSQL V12 支持可插拨的表存取接口之后,有可能由第三方存储引擎来改进PGSQL本身的MVCC实现机制,而不需要等待官方去解决,聚集索引、undo表空间这些都不再是问题

如有不对的地方,欢迎大家拍砖o(∩_∩)o 

本文版权归作者所有,未经作者同意不得转载。

原文地址:https://www.cnblogs.com/lyhabc/p/11628042.html

时间: 2024-10-29 19:05:35

【干货总结】:可能是史上最全的MySQL和PGSQL对比材料的相关文章

史上最全: svn与git的对比(二):svn与git的相关概念

如图1是svn服务器端数据的目录结构 下面是git服务器端的目录结构 纵观svn和git服务端的目录结构我们很容易发现 1.有些文件夹还是蛮像的,甚至是一样的比如说svn中的conf,hooks等git中也有,svn中的db类似与git中的objects. 2.git中的内容好像是比svn中,主要是多了head文件,branches,refs等 下面我们就详细来看一下这些文件夹或文件的作用 史上最全: svn与git的对比(二):svn与git的相关概念

史上最全的MySQL高性能优化实战总结!

1.1 前言 MySQL对于很多Linux从业者而言,是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思路不清晰.在进行MySQL的优化之前必须要了解的就是MySQL的查询过程,很多的查询优化工作实际上就是遵循一些原则让MySQL的优化器能够按照预想的合理方式运行而已. 今天给大家体验MySQL的优化实战,助你高薪之路顺畅.图 - MySQL查询过程 1.2 优化的哲学 优化有风险,涉足需谨慎 1.2.1 优化可能带来的问题 1.2.2 优化的需求1.2.3 优化由谁参与 在进

史上最全的MYSQL备份方法

本人曾经 用过的备份方式有:mysqldump.mysqlhotcopy.BACKUP TABLE .SELECT INTOOUTFILE,又或者备份二进制日志(binlog),还可以是直接拷贝数据文件和相关的配置文件.MyISAM表是保存成文件的形式,因此相对比较容易备份,上面提到的几种方法都可以使用.Innodb 所有的表都保存在同一个数据文件 ibdata1中(也可能是多个文件,或者是独立的表空间文件),相对来说比较不好备份,免费的方案可以是拷贝数据文件.备份 binlog,或者用mysq

【Tips】史上最全H1B问题合辑——保持H1B身份终级篇

[Tips]史上最全H1B问题合辑——保持H1B身份终级篇 2015-04-10留学小助手留学小助手 留学小助手 微信号 liuxue_xiaozhushou 功能介绍 提供最真实全面的留学干货,帮您掌握最新留学资讯. 成功申请了H1B后可不是就万事大吉了哦,如何保持H1B身份也是需要掌握的秘籍.本次的终极篇教你如何保持H1B身份.搞定H1B转换.以及未来的职业移民申请该如何操作. 保持H1B身份终级篇 1 保持H1B身份 1.问:在H1B达到六年期限以后,如何才能申请继续延期? 答: H1B首

(转)史上最全的程序员求职渠道总结

转自http://m.blog.csdn.net/blog/foruok/46798495 我前前后后写过多篇与程序员找工作相关的文章,比如程序员跳槽神级攻略,找工作的辟邪剑谱,任性,春节前辞职,程序员该不该考虑初创公司,这些文章都收录在我的漫谈程序员专栏里,它们从跳槽时机.跳槽原因.简历优化等不同侧面讨论了程序员找工作的那些事儿,受到很多人的关注.今天呢,我准备专门分析一下程序员求职渠道,有料是必须的,就算你搜遍互联网深挖全宇宙,也会发现这篇文章将是史上最全.最强.最有针对性的程序员求职渠道分

史上最全java架构师技能图谱(下)

"java架构史上最全技能图谱分为上下两篇,这是java架构史上最全图谱下篇,包含:大数据以及性能.设计模式.UML.中间件.分布式集群.负载均衡.通讯协议.架构设计等技术图谱等章节.如果需要上篇内容:数结构算法.java进阶.web开发.框架与工具四大篇章技能图谱,请查看java架构史上最全图谱上篇(历史文章查看).本文作者,陈睿 BAT优知学院创始人,一线大厂资深CTO,免费提供系统的互联网技术进阶干货资料和系列课程,以及定期的线下项目实战. 架构师进阶六大要求程序设计要求WEB开发要求架构

.Net魔法堂:史上最全的ActiveX开发教程——ActiveX与JS间交互篇

一.前言 经过上几篇的学习,现在我们已经掌握了ActiveX的整个开发过程,但要发挥ActiveX的真正威力,必须依靠JS.下面一起来学习吧! 二.JS调用ActiveX方法 只需在UserControl子类中(即自定义的ActiveX控件中),编写公共方法即可. C# [Guid("0203DABD-51B8-4E8E-A1EB-156950EE1668")] public partial class Uploader : UserControl, IObjectSafety { p

史上最全最常用的正则表达式-(基本够用值得收藏)

一.校验数字的表达式 1 数字:^[0-9]*$ 2 n位的数字:^\d{n}$ 3 至少n位的数字:^\d{n,}$ 4 m-n位的数字:^\d{m,n}$ 5 零和非零开头的数字:^(0|[1-9][0-9]*)$ 6 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$ 7 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$ 8 正数.负数.和小数:^(\-|\+)?\d+(\.\d+)?$ 9 有两位小数的正实数:^[0-9]

[No00004F]史上最全Vim快捷键键位图(入门到进阶)

史上最全Vim快捷键键位重磅来袭!!学习Linux的朋友看过来啦,你是不是觉得Linux编辑器Vim操作复杂,步骤繁琐呢?Linux工程师是不是想大幅度提升自己的工作效率呢? 经典版        下面这个键位图应该是大家最常看见的经典版了. 对应的简体中文版. 其实经典版是一系列的入门教程键位图的组合结果,下面是不同编辑模式下的键位图. 1 2 3 4 5 6 7 入门版        基本操作的入门版.进阶版        增强版        下图是一个更新时间较新的现代版,含有的信息也更