
哈Ha! 我向您介绍了MartinKováčik的原始文章
“ FreeBSD,CentOS,Ubuntu Debian和openSUSE上的PostgreSQL基准测试”的译文。 它在各种UNIX系统上接近实际条件的环境中检查PostgreSQL 10.1 DBMS测试。
笔译
在这篇文章中,我将展示最近发布的PostgreSQL 10.1的测试结果。 我检查了这些操作系统(全部为64位)上的数据库:
- Ubuntu 16.04 ,内核4.10.0-38-通用
- openSUSE 42.3,内核4.4.87-25-默认
- CentOS 7.4 ,内核3.10.0-693.2.2.el7.x86_64
- Debian 9.2 ,内核4.9.0-4-amd64
- FreeBSD 11.1
测试方法
该测试的目的是在类似于(典型)生产部署的条件下测量PostgreSQL的性能:
- 客户端通过连接池进行连接,以确保不存在与数据库的永久重新连接(我没有使用连接池,而是没有使用-C pgbench标志)
- 客户端通过网络而不是通过UNIX套接字连接
- RAID 1镜像上的PostgreSQL数据目录
对于每个经过测试的操作系统,都创建了约74 GB的控制数据库:
pgbench -i -s 5000 pgbench
测试基础结构由连接到1 Gbps网络的两台专用服务器组成:
- EX41-SSD:Intel i7-6700、4核,8线程,32 GB DDR4 RAM,用于使用pgbench生成SQL查询
- PX121-SSD:Intel Xeon E5-1650 v3、6核心,12线程,256 GB RAM DDR4 ECC,2 x 480 GB SATA 6 Gb / s,SSD系列的数据中心,用作PostgreSQL服务器
我对以下测试组合感兴趣:
- 32 GB只读 :只读测试(仅样本而不更改数据),数据集不适合PostgreSQL缓存
- 200 GB只读 :只读测试,数据集缓存在PostgreSQL中
- 32 GB TCP-B :读写,数据集不适合PostgreSQL缓存
- TCP-B 200 GB :读取,写入,数据集存储在PostgreSQL中
pgbench设置
在另一台FreeBSD 11.1计算机上运行的pgbench版本10.1程序用于生成负载。 测试脚本包括三个部分:真空+加热,只读测试和读写测试。 在每次读写测试之前,都要清除pgbench表(使用了-v标志)。 在测试期间,我逐渐增加了访问数据库的客户端数量。
PostgreSQL服务器设置
对于Linux发行版,PostgreSQL在两个禁用了
atime的 SSD上的RAID1设置(使用mdraid的软件RAID)中的RAID1设置中安装在ext4文件系统上。 对于FreeBSD,在配置RAID1时,在两个SSD上使用了OpenZFS文件系统。 使用以下参数创建了具有PostgreSQL数据的ZFS数据集:
zfs get recordsize,logbias,primarycache,atime,compression zroot/var/db/postgres NAME PROPERTY VALUE SOURCE zroot/var/db/postgres recordsize 8K local zroot/var/db/postgres logbias throughput local zroot/var/db/postgres primarycache all default zroot/var/db/postgres atime off inherited from zroot zroot/var/db/postgres compression lz4 local
除文件路径(所有操作系统使用其自己的目录结构)外,所有操作系统上的PostgreSQL服务器配置均相同。 32 GB实例的
postgresql.conf文件的内容(基本设置):
autovacuum = off default_statistics_target = 100 maintenance_work_mem = 1GB checkpoint_completion_target = 0.9 effective_cache_size = 24GB work_mem = 104MB wal_buffers = 16MB shared_buffers = 8GB max_connections = 300
200 GB实例的
postgresql.conf文件的内容:
autovacuum = off default_statistics_target = 100 maintenance_work_mem = 2GB checkpoint_completion_target = 0.9 effective_cache_size = 144GB work_mem = 640MB wal_buffers = 16MB shared_buffers = 48GB max_connections = 300
标杆管理
我在两种模式下的五个不同操作系统上测试了PostgreSQL,即只读模式和具有两种不同内存配置文件的TCP-B(读写)。 每个操作系统的测试大约花费了30个小时(不包括配置操作系统所需的时间)。 保存每个pgbench运行的结果以供以后评估。
结果-只读




结果-TCP-B




总结
测试表明,各种GNU / Linux发行版之间的差异不是很大。 在只读测试中,OpenSUSE 42.3是最好的操作系统,而FreeBSD的运行速度要慢40%。 不幸的是,我不知道是什么原因导致了FreeBSD如此出色的性能。
在读写测试(TCP-B)中获得了有关PostgreSQL性能的更真实的描述。 在GNU / Linux发行版中,Centos 7.4最快,而Debian 9.2最低。 尽管FreeBSD使用了ZFS(即写时复制文件系统),但FreeBSD 11.1的运行速度却是最佳Linux的两倍,这让我感到惊喜。 我以为这种差异是由Linux中软件RAID的成本引起的,所以我又对100个并发客户端进行了三项TCP-B测试,这次没有软件RAID:
- FreeBSD 11.1 + UFS :5623.86 TPS
- FreeBSD 11.1 + ZFS :8331.85 TPS
- CentOS 7.4 + ext4 :8987.65 TPS
结果显示Linux SW RAID效率低下(或ZFS RAID效率低下)。 没有SW RAID的CentOS 7.4的性能仅比具有ZFS RAID的FreeBSD 11.1的性能略高(对于TCP-B和100个并发客户端)。