PostgreSQL查询性能差

3
更新: 我突然想到:pgAdmin是否只计算了在网格中绘制结果所需的时间,而非查询实际执行的时间?
我刚刚使用命令行(psql)执行了查询,并将结果输出到txt文件中,速度非常快(最多1-2秒)。
如果是这种情况,问题不在于postgresql/Ubuntu服务器配置,而是显示适配器的问题。
我是正确的,还是在错误的方向上搜索?
在我的“旧”PC(Core 2 Duo,4GB RAM,250GB SATA硬盘),在Arch Linux 64位上运行简单的“SELECT * FROM sometable”查询只需要0.4ms(我使用的是pgAdmin 3)。数据库是PostgreSQL 9.1(带有PostGIS),表中包含约60,000行数据。
我将数据库转移到了一台更新的计算机(Core i5,8GB RAM,1TB Western Digital Black SATA III),同样的查询需要长达22秒!!!新计算机运行Ubuntu Server 13.04 64位。
为了进一步测试,我将数据库复制到了一台Windows 7 64位PC(Core i5,6GB RAM),查询大约需要10秒钟。
这显然是一个配置问题,但我有点困惑它是一个PostgreSQL还是Ubuntu Server的配置问题。
我已经尝试过在PostgreSQL的conf文件(kernel.shmmax,shared_buffers等)中进行调整,但没有效果。当然,我已经进行了VACUUM,VACUUM ANALYZE并重新创建了所有索引。
有什么想法吗?我对Ubuntu Server的解决方案感兴趣,不太关心Windows 7计算机。
提前致谢, Ebl

你有没有在不同的机器上查看查询计划?使用EXPLAIN ANALYZE了吗? - Ihor Romanchenko
是的。我刚刚又做了一遍(在Ubuntu和Windows 7机器上,目前我无法访问Arch Linux)。查询计划几乎完全相同。 - eblOnSO
与其使用pgAdmin,我会选择psql和EXPLAIN ANALYZE,这样可以避免网格绘制的干扰。 - Andrew Lazarus
我已经这样做了,"explain analyze" 显示类似的结果。因此,没有必要进行进一步的调查。不管怎样,谢谢你们的评论! - eblOnSO
PGAdmin在过去给我带来了奇怪的行为...它似乎会对系统表进行幕后调用,导致运行时间延长。当您进行速度测试时,请避免使用PGAdmin。我也曾遇到索引未能正确填充的问题,在过去删除和重新创建它们有所帮助(explain语句应该显示是否正确使用索引)。最后...我曾经遇到过使用多个处理器运行PGAdmin SQL的机器出现问题...由于某种原因,PGAdmin可以决定仅使用一个处理器并将所有内容发送到该处理器。监视您的进程并运行查询。 - Twelfth
2个回答

2
要在不将数据传输到客户端的情况下获取服务器上的执行时间,请使用EXPLAIN ANALYZE。或者在pgAdmin查询工具中使用键盘快捷方式:SHIFTF7(根据您的操作系统和版本,检查查询菜单以获取键盘快捷方式)。顺便提一下,如果您查阅pgAdmin手册,请使用当前版本-截至目前为止的1.18版本:
http://www.pgadmin.org/docs/1.18/query.html

1

您正在测量将行传输到pgAdmin所需的时间:

http://www.pgadmin.org/docs/1.4/query.html

如果返回了一个数据集,不仅会显示服务器执行所需的经过时间,还会显示从服务器检索数据到“Data Output”页面所需的时间。

如果您尝试“select count(*) from sometable”,它将与旧计算机一样快。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接