我们有一个使用 MySql 运行的应用程序。在我们发现 MySql 不支持 PostGIS 所具有的某些 GIS 功能后,我们发现它不适合我们的应用程序(注意:mysql 仅支持最小边界矩形 GIS 搜索)。
所以我们将数据库更改为 PostgreSQL。然后我们发现在 Windows 上运行的 Postgresql 8.2 比 Mysql 5.1 慢得多。我所说的较慢,是指大约慢 4-5 倍。
为什么是这样?配置中有什么我们需要更改的吗?
我发现了其他网站的一些评论,例如this http://archives.postgresql.org/pgsql-performance/2005-02/msg00316.php:
UPDATE:我们发现缓慢的原因是我们插入数据库的 BLOB。我们需要能够以 10-15 MB/s 的持续速率插入 BLOB。我们对要插入/读取的每个 BLOB 使用 libpq 的 lo_read 和 lo_write。这是最好的方法吗?以前有人使用 Pgsql 来高速插入大 BLOB 吗?
编辑:我听说 PgSql 最近刚刚移植到 Windows。这可能是原因之一吗?
在某些情况下,与其他解决方案相比,Windows 上的 PostgreSQL 需要支付额外的开销,这是由于我们在移植时进行的权衡。
例如,PostgreSQL 使用每个连接一个进程,MySQL 使用一个线程。在 Unix 上,这通常不会造成明显的性能差异,但在 Windows 上创建新进程的成本非常昂贵(由于缺少 fork() 系统调用)。因此,使用持久连接或连接池是much在 Windows 上使用 PostgreSQL 时更重要。
我看到的另一个问题是 Windows 上的早期 PostgreSQL 默认情况下会确保它的写入通过写入缓存 - 即使它有电池供电。 AFAIK,MySQL不会这样做,并且会极大地影响写入性能。现在,如果您有非安全硬件(例如廉价驱动器),这实际上是必需的。但如果您有电池支持的写入缓存,则需要将其更改为常规 fsync。现代版本的 PostgreSQL(当然是 8.3)将默认使用 open_datasync,这应该会消除这种差异。
您也没有提及如何调整数据库的配置。默认情况下,PostgreSQL 附带的配置文件是very保守的。如果您没有更改任何内容,那么您绝对需要查看一下。上有一些调整建议PostgreSQL 维基 http://wiki.postgresql.org.
要提供更多详细信息,您必须提供更多详细信息,了解运行缓慢的具体情况以及如何调整数据库。我建议向 pgsql-general 邮件列表发送电子邮件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)