2009-07-21 169 views
13

我们有一个使用MySql运行的应用程序。我们发现MySql不适合我们的应用程序,因为我们发现它不支持PostGIS所具有的一些GIS功能(注意:mysql只支持最小边界矩形GIS搜索)。为什么PostgreSQL在Windows上这么慢?

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

这是为什么?我们需要改变配置中的某些东西吗?

我发现从其他网站的一些意见,如this

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

编辑:我听说PgSql刚刚被移植到Windows。这可能是其中一个原因吗?

+1

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

回答

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邮件列表发邮件。

+0

你是对的。在我改变了默认配置后,它变得更快了一点。 – sivabudh 2009-07-25 04:06:30

7

尽管PostgreSQL的Windows端口是相对较新的,但我的理解是它和其他版本一样好。但它绝对是一个港口;几乎所有开发人员主要或专门在Unix/Linux/BSD上工作。

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

要考虑的另一件事是调整。 PostgreSQL需要比MySQL更多的调整来实现最佳性能。您可能要考虑发布到mailing lists之一以获得更多基本调整帮助。

+1

PostgreSQL需要比MySQL更多的调整:实际上,它已经遭受了默认情况下非常保守的内存使用配置。我不知道是否仍然如此,但通常这是第一个嫌疑犯。 – 2009-07-23 17:17:15

0

PostgreSQL的速度已经比MySQL慢了很多(当你有一个可笑的大型数据库时,它实际上会更快)。只是供参考,这不会导致你的问题,但要牢记这一点。