我们不得不使用MySQL运行applicationg。 我们发现的MySql是不适合我们的应用程序后,我们发现,它没有支持一些GIS功能,PostGIS的有(注:MySQL只支持最小边界矩形GIS搜索)。
所以,我们改变了我们的数据库向PostgreSQL。 然后,我们发现,PostgreSQL的8.2在Windows上运行这么慢得多相比,MySQL 5.1中。 通过比较慢,我的意思是慢在大约4-5倍。
为什么是这样? 有什么在我们需要改变配置?
我发现从其他网站如一些评论此 :
更新:我们发现,缓慢的原因是由于我们将插入数据库的BLOB。 我们需要能够在10-15 MB / s的持续速率插入BLOB。 我们正在使用的libpq的lo_read和lo_write为我们插入/读取每个BLOB。 那是最好的办法? 有没有人使用PGSQL在之前高速插入大BLOB?
编辑:我听说PGSQL刚刚拿到移植到Windows。 难道这是原因之一?
还有其他解决方案相比,其中的PostgreSQL在Windows上支付额外的开销的情况下,由于当我们把它移植做出权衡。
例如,PostgreSQL使用过程每个连接,MySQL使用一个线程。 在Unix上,这通常不是明显的性能差别,但在Windows上创建新的流程是非常昂贵(由于缺乏叉()系统调用)。 出于这个原因,使用永久连接或使用PostgreSQL时的连接池是更重要的Windows。
我见过的另一个问题是,在Windows的早期PostgreSQL将默认情况下确保它的写入正在经历写缓存 - 即使它的电池支持。 据我所知,MySQL不这样做,这将极大地影响写入性能。 现在,如果你有一个非安全的硬件,如廉价的驱动器,这是实际需要。 但是,如果你有一个电池供电的写缓存,要将此改为定期FSYNC。 PostgreSQL的现代版本(当然8.3)将默认为open_datasync相反,它应该删除这个差。
你还别说什么你如何调优数据库的配置。 默认情况下,随PostgreSQL的配置文件是非常保守的。 如果你没有改变任何东西在那里,你一定要看看它。 目前可用的一些调整建议PostgreSQL的维基 。
为了让更多的细节,你必须提供有关什么运行速度慢了很多详细信息,以及你是如何调整你的数据库。 我建议邮件到的pgsql,一般邮件列表。
虽然的PostgreSQL的Windows端口是比较近,我的理解是,它执行有关以及其他版本。 但它绝对是一个端口; 几乎所有的开发商主要或全部工作在Unix / Linux / BSD。
你真的不应该在Windows上运行8.2。 在我看来,8.3是第一个Windows版本,是真正的生产就绪; 8.4是更好的。 8.2是相当过时的,无论如何,你会获得一些好处,如果你能设法升级。
另一个要考虑的是调整。 PostgreSQL的要求比MySQL更调谐达到最佳性能。 你可能要考虑张贴到一个邮件列表的帮助比基本的调整更多。
PostgreSQL是已经比MySQL慢到一定点(它实际上是更快,当你有一个大的离谱的数据库)。 仅供参考,这是不是导致您的问题,但记住这一点。