这段时间有一个问题在困扰,windows下的数据库产品表现的不优,这包含了MySQL,PostgreSQL,MongoDB等数据库产品,在我从业的经验中,MySQL和PostgreSQL与windows 之间的恩怨就没有停止过.

在开始说问题之前,我们先来把一些常见的windows故障后的系统错误Event ID说一下 

事件 ID 41:系统在没有干净关闭的情况下重新启动。当系统停止响应、崩溃或意外断电时会出现此错误。

事件 ID 1074:当某个应用程序(如 Windows 更新)导致系统重启,或用户主动启动重启或关机时,会记录此事件。

事件 ID 6006:记录为干净关闭。它会显示消息:“事件日志服务已停止。”

事件 ID 6008:记录为非正常关闭。它会显示消息:“上一次系统关闭于时间日期,属于意外关闭。”

在你数据库无法启动后,你首先就要看你的Windows的在上次到底遭遇了什么,什么原因导致windows 系统crash

问题1: 脆弱的crash后的数据库无法启动问题 !

这点我是有相关的很多的工作经验的,给予MySQL8.0, PostgreSQL 10版本在Windows Servers 上安装并工作中,基于断电,或者突发性的UPS问题等,导致的主机通电后,无法启动数据库的问题之前基本每个月都有人和我这里讨教故障的原因.

这里我大部分发现的原因是数据文件受损,这多发生在MySQL上,PG也有一些类似的问题,这两个数据库的原理还是有不一样的地方,那么为什么在windows上突发系统故障后,都出现一些在LINUX不多见的数据库系统无法启动的问题?

罪魁祸首: NTFS 文件系统,大家都知道WINDOWS上无论您是客户版本的Windows或是Windows Server的版本他的文件系统都是NTFS,其中NTFS文件系统在频繁的文件写入和删除操作后非常容易产生磁盘碎片,导致文件分散在磁盘的不同位置,碎片化增加了文件系统的复杂性,同时增加了断电时数据损坏的风险.这可能也是 MySQL和PostgreSQL 为什么在Windows上,怎么就这么容易坏,多个位置在写入数据的时候尚未同步写入磁盘,所以出现问题后,恢复也比较麻烦. 这里NTFS是使用日志来记录系统的变化,确保发生故障后能进行恢复,但断电的时候日志文件尚未完整写入,或恢复的时候,发生更多的错误,那么恢复数据就困难了.

这里总结一下,NTFS文件系统虽然在设计上考虑安全性和恢复机制,但NTFS最初考虑也是为了普通windows系统来进行设计的,但在突发的情况下,写缓存丢失,复杂元数据更新,实物终端以及磁盘碎片等问题都可能是导致服务器crash后出现数据库问题的原因.

对 NTFS 想进一步了解的同学,可以访问如下网址https://www.techtarget.com/searchwindowsserver/definition/NTFS

问题 2 MySQL PostgreSQL,设计支出对于windows 版本的数据就没有打算如Linux 那么稳定

关于这点我非常确认的是PostgreSQL,曾在去年翻译过这个视频,并写成文章,里面的"安德鲁"非常明确的说明了PostgreSQL在windows上的IO偷懒了,他们根本就不熟悉windows,所以整体的数据的写入完全依赖接口,剩下的就是听从windows的安排和命运. (三期的翻译,在下面可以自己看)



Windows 是MySQL和PostgreSQL高性能数据库的坟墓_PostgreSQL

Postgresql    IO  对于PG的 过去,现在 , 未来 (1  过去和我们曾经解决的问题)

Postgresql IO 对于PG的 过去,现在 , 未来 (2 --面临的挑战和解决方案)

Postgresql IO 对于PG的 过去,现在 , 未来 (3--直面问题与结果展示和PG16新东西)

MySQL数据库,这里并未找到MySQL官方的一些对不同操作系统上MySQL的性能比对,但MariaDB却曾经公开, Linux上的MariaDB比在windows上要提高性能20% 30%.同时percona 和 scaleGrid 也测试过MySQL在windows上要低10-30%的性能对比LINUX 系统上的MySQL.

同时我们在对PostgreSQL和MySQL两个数据库的配置参数中,MySQL有更多依赖LINUX系统的参数,如 innodb_flush_method 等,PostgreSQL的灵活性也在Windows上无法发挥,比如我们想随意添加extension ,这点我到现在也不知道在windows上的PG 如何操作.

PostgreSQL和MySQL很多的功能都在windows上被阉割了,个人看PostgreSQL可能受到的影响更多一些.终究这么灵活的PostgreSQL,到了windows和坐进了监狱差不多.

3 没有众多人员使用的产品,要完善是困难的

这点从我整理MySQL 8.0, PostgreSQL 12 13 14 15 16等版本的BUG FIXED,就可以看出来,PostgreSQL在针对windows系统的bug fixed 内容非常的少,基本上5%左右的bug fixed 是在windows上的,MySQL在整理的时候更是比较少的看到针对windows的patching.

从反馈问题的角度来说,更专业的人员都在linux系统上使用数据库,在windows上使用数据库的情况比较少,同时二开的各种软件和开源的软件都是在LINUX 上的,windows是和尚头上的虱子,显而易见的没有.

所以 windows出现任何的问题你都不要认为有人给你,踩过雷了,很多时候你就是那个踩雷的.

综上所述,数据库软件除了MSSQL,在windows上如鱼得水,(其实也不是,LINUX上的 SQL SERVER跑的更快,这是微软自己说的),其他的数据库产品如果是高并发的方式使用,那么你的唯一选择是LINUX 而不是WINDOWS.

Austindatabases 公众号,主要围绕数据库技术(PostgreSQL, MySQL, Mongodb, Redis, SqlServer,PolarDB, Oceanbase 等)和职业发展,国外数据库大会音译,国外大型IT信息类网站文章翻译,等,希望能和您共同发展。

Windows 是MySQL和PostgreSQL高性能数据库的坟墓_postgresql_02

Windows 是MySQL和PostgreSQL高性能数据库的坟墓_postgresql_03