前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PostgreSQL 如果放在 X86 或 ARM 上“摩擦” 到底哪个性能好?(翻译)

PostgreSQL 如果放在 X86 或 ARM 上“摩擦” 到底哪个性能好?(翻译)

作者头像
AustinDatabases
发布2021-11-26 15:01:25
1.9K0
发布2021-11-26 15:01:25
举报
文章被收录于专栏:AustinDatabasesAustinDatabases

未来的数据库发展一定是往云上发展的,倒不是云有什么好,主要还是成本的因素,成本因素比较复杂,这里不探讨,如果你单单认为只是一些机房等基础那就大大的错误了,有机会在探讨为什么以后DBA 大多都不会触及一些基础的数据库架构,要在云上去进行新一代的DBA 生涯了。

今天还是继续翻译一篇,PG在X86 或ARM 上性能的文字,

——————————————————————————————

最近,我在ARM64位的服务器上,和POSTGRESQL 玩了一场游戏,实际上几个月前我都还对ARM架构不怎么熟悉,甚至我都不知道什么是ARM,实际上PG已经有一阵有基于ARM64的安装包了,对于ARM 的信心来自我对不同场景下的测试结果。

这里我的测试方式是基于pgbench 测试的方式通过比较X86 64 VS ARM64 ,但这并不是目标,实际上我就想找到ARM结构的PG 在什么场景下,比X86的性能好。

测试的硬件与系统: Test Configuration ARM64 VM: Ubuntu 18.04.3; 8 CPUs; CPU frequency: 2.6 GHz; available RAM : 11GB x86_64 VM: Ubuntu 18.04.3; 8 CPUs; CPU frequency: 3.0 GHz; available RAM : 11GB

通过这两个硬件,我们通过pgbench 测试,其中相关PG的参数

shared_buffers = 8G 并且通过循环的方式进行测试

pgbench scale factor : 30pgbench command :for num in 2 4 6 8 10 12 14do pgbench [-S] -c num -j num -M prepared -T 40done

通过上面的程序我们不断的,增加pgbench 测试的负载。 测试通过不同的场景来进行测试

1 纯读的模式 pgbench -S option is used for read-only workload.

上图是在进程从2 到4的过程中,X86的性能相对于ARM结构要好至少30%,随着并发的进程越来越多4-6 时倒是稍微平坦了一些, 但从6-8时图形是十分的陡峭的,超过8后我们的变化就不太多了,这也是因为我们的CPU是8CORE的。这里还有一个事情要提到,PGBENCH 和我们的数据库是安装在一起,这个程序本身要占用20%的CPU 资源,另外有一点我也没有能明白就是在6-8时上升的速度这可能与LINUX 系统的参数有关,从测试的图中我们很明显的可以看到在8以后ARM结构的性能下降的要快,实际情况就是随着CPU越来越繁忙,ARM结构的性能越来越低。

测试方式 2

select exec_query_in_loop(n)

为了让测试更专业一些,去掉pgbench可能产生的影响,我进行了另一个测试,虽然可以把pgbench 放到其他的机器上进行测试,但我还的考虑网络的延迟等等一系列的问题,所以我用C语言写了一个 与pgbench 运行的只读语句一样的程序,并循环运行,这里我们也不用考虑提交和回滚的问题,我们来看看结果

SELECT abalance FROM pgbench_accounts WHERE aid = $1 Check details in exec_query_in_loop()

根据上面的图形我们可以看到不同,在超过8个进程后,ARM 本身也没有表现的和上面的图形一样,但一样的是超过8 threads后 ,我们性能并没有特别大的提升。Postgresql 在测试中仍然ARM 结构的PG 要比X86上的要低30%左右。

该实验还表明,前面使用内置pgbench脚本的结果与pgbench客户端干扰有关。而且,ARM的线程争用曲线的下降不是由服务器的争用引起的。注意,事务率是在客户端计算的。因此,即使查询已经为结果做好了准备,在请求结果、计算时间戳等方面,客户端可能会有一些延迟,特别是在高争用场景中。

测试3 通过plpgSQL 函数来进行测试 select exec_query_in_loop(n) - PLpgSQL function 在使用C语言做此事之前,我也用过PL/PGSQL 进行相关的测试,也发现了一些和上面的不同的情况。

这里基于ARM 结构的PG 要比 X86下的PG 慢65%,基于这个事情可以发现PL/PGSQL在ARM结构上执行的速度要远低于X86,我检查了性能报告,但在ARM和x86中都能看到或多或少相同的热点函数。但是由于某些原因,在ARM上执行的任何PL/pgSQL函数都比在x86上慢得多。

测试 4

Updates pgbench有一些内置的基于tpcb的内建脚本可以进行一些多表的升级测试。

这个结果ARM 和X86的性能差距在1-10%之间,其实问题的主要原因还是整体的消耗花在了等待锁,和磁盘进行commit的操作,并且磁盘并未使用ssd磁盘。对比其他的测试,PG上的ARM 在这个测试上表现的比较好看。 剩下的,我对聚合查询,分区,提高CPU的数量(32/64/128),以及更大的内存和一些 higher scale factor, 针对两个平台下的PG在大资源下的情况。 结论:

从上面的测试中可以看出在ARM64上工作情况还是良好的,虽然在两个平台上进行性能比较的工作其实也没有那么容易,我们实际上可以看到在不同模式下,两个平台各自的不同。 翻译结束 ——————————————————————————————

个人观点,测试时并不是很严谨,仅仅通过pgbench来进行测试,这里只能说明一些简单的语句在PG上的工作情况,但值得注意的是,ARM结构的硬件产品无论是针对 PG 还是 MYSQL (看上期),其实问题都蛮多的, 至少截止目前,个人建议还是使用X86结构的产品来使用PG 或MYSQL 会更好,尤其在高并发的情况下。

顺便说一句,此文中还提到过,之前作者测试关于应用程序高并发的情况下的结果,ARM 也是一团糟。

Comments

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-11-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Comments
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档