我们使用MySql运行了一个applicationg。我们发现MySql不适合我们的应用程序,因为我们发现它不支持PostGIS所具有的一些GIS功能(注意:mysql只支持最小边界矩形GIS搜索)。
所以我们将数据库更改为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。这可能是其中一个原因吗?答案 0 :(得分: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邮件列表发一封电子邮件。
答案 1 :(得分:7)
虽然PostgreSQL的Windows端口是相对较新的,但我的理解是它的性能与其他版本一样好。但它绝对是一个港口;几乎所有开发人员主要或完全在Unix / Linux / BSD上工作。
你真的不应该在Windows上运行8.2。在我看来,8.3是第一个真正适合生产的Windows版本; 8.4还好。 8.2无论如何都已经过时了,如果你能设法升级,你将获得好处。
要考虑的另一件事是调整。 PostgreSQL需要比MySQL更多的调优才能获得最佳性能。您可能需要考虑发布mailing lists之一以获取更多基本调整的帮助。
答案 2 :(得分:0)
PostgreSQL已经比MySQL慢到某一点(当你有一个可笑的大型数据库时它实际上更快)。仅供参考,这不会导致您的问题,但请记住这一点。