Postgresql 在windows 和 Linux 性能测试对比

一,先说环境:

同一台电脑。用PVE虚化出的2个系统。 内存是128G DDR3 ECC, 磁盘是机械硬盘(12T 西数氦气盘HC520)。CPU是E5 2630 V2

1: Windows Server 2025(含桌面环境),16G内存,2虚核CPU, machine类型: i440fx,磁盘控制器:VirtIO SCSI single。

2: Linux- Debian 13 (无桌面环境),16G内存,2虚核CPU, machine类型: i440fx,磁盘控制器:VirtIO SCSI single。

先说下环境,无论是操作系统,还是数据库,都是当前最新的。 windows带了桌面环境,linux不带。这个是生产最常见的配置。16G内存,应该带个桌面环境没什么压力。

二,性能测试软件:

Postgresql 官方自带专用性能测试工具PgBench. 默认参数初始化是10万条数据,这个不太符合日常数据量。所以因数参数设了100(数据量扩大100倍),让测试表初始化生产1000万条数据用于性能压测(符合典型的生产环境表数据量大小)。

PgBench 会在数据表中,进行select, update和 insert 操作(最日常的数据操作,基本符合日常生产操作) 。可以用-c 命令指定多个客户端,按照典型情况,设置为4。一共压测60秒,看这60秒内,数据库能完成多少次select,update和 insert操作(transaction)

三,测试结果:

初始化数据2个系统都用了2分钟不到(这个没太大差别)。但是之后的性能测试,windows 比linux 快了近6倍。



总的来说我的环境中 windows上的postgres优势巨大。不过机械硬盘下,TPS还是偏低。 机械硬盘+Linux最多搞搞压力不大的微小应用。 机械硬盘+WINDOWS也只能抗住一个中小应用。 (PGBENCH跑的都还是逻辑比较简单的查询,1000万数据量下,TPS都没有上千)


四, windwos +SSD测试。

之前是在我的远程服务器上测试。个人猜想,对于POSTGRESQL性能来说,磁盘的随机读取(IOPS)应该对他造成最大影响的参数。正好我的笔记本是win10 + SSD (2T 金士顿 NV2 )。下载了postgresql17 跑了下PgBench.


果然,SSD的加持下,TPS终于到达了一个比较满意的数值近4200 次/秒。基本上,我笔记本上这个PG,在查询逻辑没有乱写的情况下,完全可以抗住一个大型应用(如果内存能够补足到64G的情况下)。


五, 切换linux的文件系统

之前的测试windows 文件系统是NTFS, UEFI (windows系统上文件系统比较统一,几乎都是NTFS) , linux 文件系统是ext4 , BIOS. 考虑到目前btrfs 也是主流文件系统之一,那就试下这个文件系统,顺便把BIOS 也切换成UEFI (理论上不影响linux的最高性能,因为ext4的性能要比其他主流的都要好,BIOS类型理论上也不影响性能).

现在我又虚了一个一模一样配置的LINUX,新文件系统改成了btrfs, UEFI。然后测试了下,果然,还是只有windows的 1/6 速度。


附上pve2个系统的虚化配置。


总结: Windows 上的Postgresql 比linux 上的有着巨大的性能优势。 windows +SSD 加持的Postgresql 完全可以抗住大型应用(数据库查询代码没有乱写的情况下)。

原文链接:,转发请注明来源!