PostgreSQL 运行在 FreeBSD 和 Linux 的表现的测试数据 【已翻译100%】

今天下午我本想测试下DragonFly dports, 突然我想为什么不比较下PostgreSQL在BSD和Linux下的性能的差异。 为此我定了一些标准来比较在不同操作系统上的性能差异。 我使用相同的硬件和软件以便更准确的获得数据。这些测试是基于PGSQL9.1下的。

当我在 Debian Linux 下测试之后,结果令我非常吃惊,于是我又在其他的Linux系统做了测试, 如类Redhat的Centos6.4。

以下是我测试的一些操作系统:

  • DragonFlyBSD 3.4.1 (Hammer)
  • FreeBSD 9.1-p3 (UFS2+J)
  • FreeBSD 9.1-p3 (ZFS v28)
  • Debian 7: Wheezy (ext4, kernel 3.2)
  • Debian 7: Wheezy (ext4, kernel 3.2, barrier=0)
  • Centos 6.4 (ext4, kernel 2.6.32)
  • Centos 6.4 (ext4, kernel 2.6.32, nobarrier)

对于硬件部分,我使用的是基于KVM (libvirt)系统的24G内存和一个Phenom x6 1055T 处理器。版本如下:

qemu 1.4.1-3
libvirt 1.0.5-4
每个虚拟机都使用相同的配置:
  • 50GB 硬盘 (除了 FreeBSD)
  • 12GB 内存
  • 4核 CPU

现在测试。命令遵循: pgbench -T 60 -cX -jX

在数据库上60秒内做 pgbench 实例测试,使用X用户和X线程(一个线程一个用户)

每个数据库都是默认的配置,同时支持300个需求同时连接

第一部分: 虚拟驱动

第一个图展示了实时事务处理量,第二个图是每秒事务出来量。


性能测试的结果是令人吃惊的。DragonflyBSD(默认的操作系统) 的性能超过其他所有的系统,紧随其后的是FreeBSD。DragonflyBSD的性能比FreeBSD有25%的提升比Linux(s)有200%的提升!

我们有2个Linux远远的超过其他系统,达到7000事务的处理量。如过不考虑客户端的数量还是无法超越它。曲线图是令人吃惊的统一。只有Debian 没有达到测试的终点,因为不手动修改参数Debian PostgreSQL 不能同时有100个连接。

实际上,这7000条曲线解释了ext4栅栏系统(barrier system)保护的文件系统,在PostgreSQL上性能是非常差的。在第二项测试中,我们已经对ext4添加nobarrier/barrier=0选项(通过/etc/fstab)。这个选项处理(debrid)的FS,但是它是一个非常有风险的选项。仅当你有一个磁盘阵列的 1/5/6 控制器时才去使用它。当有一个写操作在你的磁盘上完成的时候,如果你的服务器重启(例如:电力故障......),文件或者整个磁盘可能就会崩溃,并且要是处于数据库实例中,那后果将非常悲惨。

总之,我们的FreeBSD在ZFS上的工作弥补了Linux(s).也许是由于虚拟化?或者是问题出在ZFS的概念上吗?

第二部分:物理驱动器

为了验证我们的研究结果,我们意识到,同一基准的物理驱动器上。我只有保持性能与优化,除了 ZFS,必须有一个点在这种支持的比较。在这里 Centos 被删除,因为它的性能与Debian相差不多。

第一张曲线图是每1分钟的处理量:

第二张曲线图是每1秒的处理量:

DragonFlyBSD 在物理和虚拟之间的性能很接近, 我们可以说 virtio 的驱动程序非常好。Debian 有同样的问题,以每分钟 50,000 次请求。

有两点你要注意:

  • UFS 性能(async和noatime选项),(能提高)两倍或者三倍性能,但是你也必须同样保证是ext4(nobarrier选项)
  • 通过设置sync=disabled和atime=off选项,使ZFS增加10-15左右的性能,胜过所有其他的FS及其所提供的联合性能。此外,sync=disabled选项相比于nobarrier/async选项的危险性低。

ZFS是这个物理指标的领导者。

你可以看一下下面这个精确基准数据的链接:
Benchmarks – PostGreSQL

最后,如果你为你的PostgreSQL数据库选择一个系统,使用BSD不用犹豫,即使你没有磁盘阵列控制器,你也可以选择FreeBSD(UFS)或者DragonFlyBSD(Hammer),其次再选择Linux。

感谢Emmanuel Florac和Axel Perrier为ext4 barrier选项提供精准的(数据)。

时间: 2024-09-11 21:29:23

PostgreSQL 运行在 FreeBSD 和 Linux 的表现的测试数据 【已翻译100%】的相关文章

在 QEMU 和 KVM 上运行 OS X Mavericks 【已翻译100%】

今天,OS X虚拟化是一件很容易搞定的事情,因为OS X主机完全支持VMware和VirtualBox. 但是在裸机和QEMU上虚拟化会是什么情况呢?在Linux下呢?最终我在QEMU上完全搞定了Mavericks (没有额外内核拓展哦(!)),不过真不容易. 工作人员 许多关于这件事的工作都归于 Gabriel L. Somlo ,他完成了这件事的初步工作,然而我不能从他的指南里得到任何干净的安装引导的OS X Mavericks 版本.因此我只能自己调试了. 为什么? 云中OS X. 这是一

Docker —— 用于统一开发和部署的轻量级 Linux 容器 【已翻译100%】

使用Docker容器--轻量灵活的VM同类,来接管"依赖地狱".学习Docker是如何基于LXC技术,通过把应用包装在容器里来使应用具有移植性和独立性. 想象一下可以轻松地把应用和它的依赖打包,然后在其他的开发.测试和生产环境上平滑的运行.这就是开源Docker项目的目标.尽管它现在还没正式到生产阶段,最新的发布(本篇文章编写时是0.7.x)使得Docker实现这一伟大目标又近了一步. Docker容器试图解决"依赖地狱"问题.现代的应用通常从已存在的组件组合而来,

Groovy 现在可运行在 Android 系统上了! 【已翻译100%】

在最近的GR8Conf Europe 2014期间,SpringSource/Pivotal的Groovy高级软件工程师 Cédric Champeau已经在Andriod上完成一次Groovy代码的现场pull请求的合并. Groovy开发人员为了在Android上运行Groovy已经等待好几年了.因为各种困难,它的实现被推迟了,这包括Andriod Dalvik虚拟机的不同字节码和Groovy代码的动态特性等.官方对Android的支持可能在Groovy2.4版本.InfoQ采访了 Cham

在终端中运行 Swift 程序 【已翻译100%】

在读完苹果开发者文档( Apple Developer Docs)后,我发现: "Xcode的调试器包括一个Swift语言的交互版本,叫做REPL(Read-Eval-Print-Loop)...可以通过Xcode的控制台或终端来访问" 不幸的是,它并没有告诉你怎样从终端访问.好在这也不是什么难事. 输入如下命令即可(无论你用哪个beta,换掉app的名字) alias swift="/Applications/Xcode6-Beta2.app/Contents/Develo

制作软盘上运行的FreeBSD系统

测试平台:FreeBSD 4.5 Release (i386) 大家可能见到过很多在软盘上运行的Linux系统,可在软盘上运行的FreeBSD反而比较少,虽然有PICOBSD,然而很多时候PICOBSD并不能满足我们的需要,那么可不可以自己制作一个在软盘上运行的FreeBSD系统呢?答案是肯定的.我在维护着一个Floppy Firewall的Project,它是一个基于FreeBSD和IPFilter的运行在软盘上的防火墙系统,很多网友在使用了Floppy Firewall之后发邮件来询问如何使

如何在终端使用后台运行模式启动一个Linux应用程序

如何在终端使用后台运行模式启动一个Linux应用程序 Linux终端窗口 这是一个篇幅不长但是十分有用的教程,可以帮助你在终端启动一个Linux应用程序,并且使终端窗口不会丢失焦点. 我们有很多可以在Linux系统中打开一个终端窗口的方法,这取决于你的选择以及你的桌面环境. 如果是使用Ubuntu的话,你可以利用CTRL+ALT+T组合键打开终端.当然你也可以使用超级键(Windows键)打开Dash,搜索"TERM",然后点击"Term"图标来打开终端窗口. 对于

C#写的一个串口通信的窗体程序,运行几个小时就出错,提示“操作已超时”或“已停止工作”,请问怎么解决

问题描述 C#写的一个串口通信的窗体程序,运行几个小时就出错,提示"操作已超时"或"已停止工作",请问怎么解决?求高手解答 解决方案 解决方案二:用日志记录出错信息以及出错的位置,然后再具体分析原因解决方案三:看下你做了一些什么操作解决方案四:就是直接打开串口接收数据,并将一些特定的语句写入文件.就这样运行一段时间就出错了.解决方案五:能贴代码吗关键是报什么错解决方案六: 解决方案七:麻烦帮忙看看怎么回事,谢谢了解决方案八:把有可能会抛异常的点,都放到trycatc

PostgreSQL installed in FreeBSD

上一篇BLOG介绍了freebsd的安装,  http://blog.163.com/digoal@126/blog/static/16387704020145114251585/ 本文将介绍一下freebsd下编译安装postgresql. 首先要下载postgresql代码, 解压, 安装. root@digoal:~ # fetch http://ftp.postgresql.org/pub/source/v9.3.4/postgresql-9.3.4.tar.bz2 root@digoa

PostgreSQL 并行计算 在 xfs, ext4 下的表现

关于PostgreSQL 9.6 基于CPU并行计算的文章,之前写过几篇,请参考https://yq.aliyun.com/articles/44655https://yq.aliyun.com/articles/44649 本文主要是对EXT4和XFS进行测试比较,两者在并行度上的性能差异.文件系统的格式化参数以及挂载参数如下XFS mkfs.xfs -f -b size=4096 -l logdev=/dev/dfc1,size=2047868928,sunit=16 -d agsize=5