【问题标题】:Why is PostgreSQL so slow on Windows?为什么 PostgreSQL 在 Windows 上这么慢?
【发布时间】:2010-11-12 19:54:18
【问题描述】:

我们有一个使用 MySql 运行的应用程序。在我们发现MySql不支持PostGIS的部分GIS能力后发现不适合我们的应用(注意:mysql只支持最小边界矩形GIS搜索)。

所以我们将数据库更改为 PostgreSQL。然后我们发现在 Windows 上运行的 Postgresql 8.2 与 Mysql 5.1 相比要慢得多。慢,我的意思是大约慢 4-5 倍。

这是为什么?我们需要更改配置中的某些内容吗?

我从this等其他网站找到了一些cmets:

更新:我们发现缓慢的原因是由于我们正在插入数据库中的 BLOB。我们需要能够以 10-15 MB/s 的持续速率插入 BLOB。我们正在为我们插入/读取的每个 BLOB 使用 libpq 的 lo_read 和 lo_write。这是最好的方法吗?以前有人用过 Pgsql 高速插入大 BLOB 吗?

编辑:我听说 PgSql 最近才移植到 Windows。这可能是原因之一吗?

【问题讨论】:

  • 1.最新版本是8.4(本月发布)——升级、测试、报告。 2. 这个“其他网站”是 PostgreSQL 项目的官方邮件列表存档。但另一方面,您链接到的帖子非常旧,并且提到了一个非常旧且不再受支持的版本 (8.0)。

标签: mysql performance postgresql postgis


【解决方案1】:

在某些情况下,Windows 上的 PostgreSQL 与其他解决方案相比需要支付额外的开销,因为我们在移植它时做出了权衡。

例如,PostgreSQL 每个连接使用一个进程,MySQL 使用一个线程。在 Unix 上,这通常不是明显的性能差异,但在 Windows 上创建新进程非常昂贵(由于缺少 fork() 系统调用)。因此,在使用 PostgreSQL 时,在 Windows 上使用持久连接或连接池要重要得多

我看到的另一个问题是,Windows 上的早期 PostgreSQL 默认情况下会确保它的写入通过写入缓存 - 即使它有电池支持。 AFAIK,MySQL 不这样做,它会极大地影响写入性能。现在,如果您有不安全的硬件,例如便宜的驱动器,这实际上是必需的。但是如果你有一个电池支持的写缓存,你想把它改成常规的 fsync。现代版本的 PostgreSQL(当然是 8.3)将默认使用 open_datasync,这应该会消除这种差异。

您也没有提及您如何调整数据库的配置。默认情况下,PostgreSQL 附带的配置文件是非常保守的。如果你没有改变任何东西,你肯定需要看看它。 PostgreSQL wiki 上有一些调整建议。

要提供更多详细信息,您必须提供更多关于运行缓慢的确切原因以及您如何调整数据库的详细信息。我建议向 pgsql-general 邮件列表发送电子邮件。

【讨论】:

  • 你是对的。在我稍微更改了默认配置后,它变得更快了。
  • 最新版本在 Windows 上的性能如何?今天你的答案会有很大变化吗?
  • 虽然性能确实有所提高,但架构上的差距仍然存在。
  • 自5.5年前回答这个问题以来,这段时间有什么重大变化吗?
【解决方案2】:

虽然 PostgreSQL 的 Windows 端口相对较新,但我的理解是它的性能与其他版本差不多。但这绝对是一个港口;几乎所有开发人员都主要或专门在 Unix/Linux/BSD 上工作。

您真的不应该在 Windows 上运行 8.2。在我看来,8.3 是第一个真正为生产做好准备的 Windows 版本。 8.4更好。无论如何,8.2 已经过时了,如果您能设法升级,您将获得一些好处。

要考虑的另一件事是调优。 PostgreSQL 需要比 MySQL 更多的调优才能达到最佳性能。您可能需要考虑向mailing lists 之一发帖,以获得更多基本调整方面的帮助。

【讨论】:

  • PostgreSQL 需要比 MySQL 更多的调优:实际上它在默认情况下受到非常保守的内存使用配置的影响。我不知道它是否仍然如此,但通常这是第一个嫌疑人。
【解决方案3】:

在一定程度上,PostgreSQL 已经比 MySQL 慢(当你有一个大得离谱的数据库时,它实际上更快)。仅供参考,这不会导致您的问题,但请记住这一点。

【讨论】:

    猜你喜欢
    • 2010-10-29
    • 2011-12-06
    • 1970-01-01
    • 2011-02-28
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多