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

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介:

今天下午我本想测试下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个需求同时连接

第一部分: 虚拟驱动

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

image
image

性能测试的结果是令人吃惊的。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分钟的处理量:

image

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

image

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选项提供精准的(数据)。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
21天前
|
安全 Linux 虚拟化
|
1月前
|
机器学习/深度学习 人工智能 Ubuntu
|
18天前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
|
1月前
|
测试技术 Python
自动化测试项目学习笔记(一):unittest简单运行(初始化,清除,设置测试行为)
本文介绍了Python的unittest框架的基础用法,包括测试初始化(setup)、清除(tearDown)函数的使用,以及assertEqual和assertGreaterEqual等断言方法,并展示了如何创建测试用例,强调了测试函数需以test_开头才能被运行。
64 1
自动化测试项目学习笔记(一):unittest简单运行(初始化,清除,设置测试行为)
|
1月前
|
存储 数据可视化 Java
震惊!如何在linux下部署项目,部署/运行jar包 超详细保姆级教程!
如何在Linux系统下部署和运行Java项目jar包,包括传输文件到Linux、使用nohup命令运行jar包、查看端口状态、杀死进程和查看项目运行状态,以及如何解决“没有主清单属性”的错误。
498 1
震惊!如何在linux下部署项目,部署/运行jar包 超详细保姆级教程!
|
1月前
|
SQL 分布式计算 NoSQL
大数据-170 Elasticsearch 云服务器三节点集群搭建 测试运行
大数据-170 Elasticsearch 云服务器三节点集群搭建 测试运行
41 4
|
1月前
|
弹性计算 Linux 数据库
阿里云国际版如何迁移Linux云服务器系统盘中的数据
阿里云国际版如何迁移Linux云服务器系统盘中的数据
|
1月前
|
前端开发 JavaScript 应用服务中间件
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
本文是一篇详细的教程,介绍了如何在Linux系统上安装和配置nginx,以及如何将打包好的前端项目(如Vue或React)上传和部署到服务器上,包括了常见的错误处理方法。
368 0
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
|
2月前
|
Linux Shell
6-9|linux查询现在运行的进程
6-9|linux查询现在运行的进程
|
2月前
|
监控 安全 Linux
如何利用Kali Linux进行网站渗透测试:最常用工具详解
如何利用Kali Linux进行网站渗透测试:最常用工具详解
124 6
下一篇
无影云桌面