13

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

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

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

我从其他网站上找到了一些评论,例如:

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

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

4

3 回答 3

21

在某些情况下,Windows 上的 PostgreSQL 与其他解决方案相比会支付额外的开销,这是由于我们在移植它时做出的权衡。

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

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

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

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

于 2009-07-22T07:12:07.810 回答
7

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

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

另一件要考虑的事情是调优。PostgreSQL 需要比 MySQL 更多的调优才能达到最佳性能。您可能需要考虑发布到其中一个邮件列表以获取更多的帮助,而不是基本的调整。

于 2009-07-22T00:00:28.380 回答
-1

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

于 2009-07-22T00:06:28.040 回答