在Windows上构建性能的PostgreSQL
Jim Mlodgenski 二月17,2016/1 Comment / in ,Jim PostgreSQL@BigSQL.OpenSCG,
在PostgreSQL 9.1之前,添加额外的功能,如数据类型是非标准的和尴尬,但9.1带来了扩展。通过添加扩展以及诸如外部数据包装器的管道,在过去几年中使用扩展已经爆炸。这对于在Linux或类似类型环境中使用PostgreSQL的人来说是很好的,但是Windows中的人已经很幸运了。大多数人需要希望他们想要使用的扩展是流行的,以致于熟练的Windows构建环境的人决定在Windows上发布扩展。它只是没有那么简单,Linux,你只是运行“make install”。
多年来,已经有能力使用Mingw项目复制Windows上的Linux构建体验,但是历史上,生成的二进制文件比Microsoft编译器生成的二进制文件要慢得多。自从我最后在Windows上使用兼容性,我惊喜地发现,开源构建工具已经赶上了商业工具,在某些方面超越了他们。
要检查从编译器生成的二进制文件的性能,我尝试了几个CPU密集型测试。 第一个只是一个SELECT only pgbench测试。 第二个是运行随机数的平方根,然后对比排序结果。
对于使用Microsoft Visual Studio构建的Windows二进制文件,我使用了PostgreSQL[社区网站] (http://www.postgresql.org/download/windows/) PostgreSQL Windows安装程序。 Mingw-w64版本来自bigsql.org网站,网址为
http://www.bigsql.org/se/postgresql/packages.jsp
2个二进制文件的版本信息如下。
test=# select version();
version
-------------------------------------------------------------
PostgreSQL 9.5.1, compiled by Visual C++ build 1800, 64-bit
(1 row)
test=# select version();
version
---------------------------------------------------------------------------------------------------------
PostgreSQL 9.5.1 on x86_64-pc-mingw64, compiled by gcc.exe (Rev5, Built by MSYS2 project) 4.9.2, 64-bit
(1 row)
对于这些测试,对postgresql.conf文件的唯一调整是将shared_buffers设置为2GB。所有其他设置保留默认值。 仅使用以下命令执行SELECT only pgbench测试:
pgbench -n -S -c 10 -t 100000 -U postgres test
MSVC
34246 TPS
GCC
34706 TPS
这是一个小1.3%的性能改进。这不是一个突破性的收获,但是gcc内置的二进制文件一直更快。 第二个测试是更多的CPU密集型运行以下查询: ··· select sqrt((random() * g)::numeric) from generate_series(1, 1000) g order by 1; ···
这被放在一个文本文件中,并使用以下命令运行pgbench: ··· pgbench.exe -n -f test.sql -c 8 -t 10000 -U postgres test MSVC 610 TPS GCC 634 TPS ···
这导致3.8%的更大的性能增益。 我开始这个测试,试图找到一个更简单的方法来构建Windows上的扩展,希望没有太多的性能损失,但最终发现,更容易的方式,实际上是更快一点点。我正在考虑它的时间来挖掘这些专有的构建工具,并坚持使用开源工具。