远程Postgresql - 非常慢

时间:2011-01-11 12:29:27

标签: performance postgresql vps

我在自己拥有的VPS上设置了PostgreSQL - 访问数据库的软件是一个名为PokerTracker的程序。

PokerTracker在玩在线扑克时记录所有的手牌和统计数据。

我希望可以从几台不同的计算机上访问它,所以决定将它安装在我的VPS上,经过几次打嗝后我设法连接没有错误。

然而,表现可怕。我已经做了很多关于'远程postgresql slow'等的研究,我还没有找到答案所以希望有人能够提供帮助。

注意事项:

我尝试执行的查询非常小。在VPS上本地连接时,查询会立即运行。

远程运行时,运行查询大约需要1分30秒。

VPS正在运行100MBPS,然后我连接的计算机是8MB线路。

两者之间的网络通信几乎是即时的,我可以远程连接,没有任何延迟,并且正在托管几个运行MSSQL的网站,并且所有查询都可以立即运行,无论是远程连接还是本地连接,因此它似乎特定于PostgreSQL。

我正在使用他们的软件运行他们最新版本的软件和PostgreSQL的最新兼容版本。

数据库是一个新的数据库,几乎不包含任何数据,而且我运行真空/分析等都无济于事,我看不到任何改进。

我不明白MSSQL几乎可以立即查询,但PostgreSQL如此挣扎。

我能够毫无问题地远程登录到VPS IP上的端口5432,正如我所说,查询确实执行它只需要很长时间。

我注意到的是在查询运行时在路由器上几乎没有使用任何带宽 - 但是我再也不希望它用于简单查询但不确定这是否是问题。我现在尝试在3个不同的网络上远程连接(包括不同的路由器),但问题仍然存在。

通过LAN通过另一台机器远程连接是即时的。

我还编辑了postgre配置文件以允许更多的内存/缓冲区等,但我不认为这是问题 - 我要求它做的很简单 - 它根本不应该是密集的。

谢谢, 瑞奇

编辑:请注意客户端和服务器都在运行Windows。

以下是配置文件中的信息。

pg_hba - currently allowing all traffic:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# IPv4 local connections:
host     all     all     0.0.0.0/0   md5
# IPv6 local connections:
# host   all     all     ::1/128     md5

和postgresqlconf - 我知道我已经为这个配置提供了大量的缓冲区/内存,只是为了测试它是否是问题 - 仅显示未注释的行:

listen_addresses = '*'
port = 5432
max_connections = 100
shared_buffers = 512MB
work_mem = 64MB
max_fsm_pages = 204800
shared_preload_libraries = '$libdir/plugins/plugin_debugger.dll'
log_destination = 'stderr'
logging_collector = on
log_line_prefix = '%t '
datestyle = 'iso, mdy'
lc_messages = 'English_United States.1252'
lc_monetary = 'English_United States.1252'
lc_numeric = 'English_United States.1252'
lc_time = 'English_United States.1252'
default_text_search_config = 'pg_catalog.english'

需要提供任何其他信息,请告知我们。谢谢你的帮助。

6 个答案:

答案 0 :(得分:3)

我启用了日志记录并将日志发送给他们软件的开发人员。他们的答案是,软件原本打算在本地或近乎本地的数据库上运行,因此由于网络延迟,在VPS上运行预计会很慢。

感谢您的所有帮助,但看起来我没有想法,这是由于软件,而不是VPS上的PostgreSQL。

谢谢, 瑞奇

答案 1 :(得分:1)

您可以执行explain analyze,它会告诉您服务器上查询的执行时间(没有将结果发送到客户端的网络开销)。

如果服务器执行时间非常快(与您看到的时间相比),那么这就是网络问题。如果报告的时间与您观察到的时间非常相似,那就是PostgreSQL问题(然后您需要发布执行计划以及可能的PostgreSQL配置)

答案 2 :(得分:0)

使用网络监控工具(我建议使用wireshark,因为它可以跟踪许多协议,包括postgresql),看看网络连接是否正常。如果连接错误,您将看到丢弃/重新传输的数据包。

答案 3 :(得分:0)

也许Postgres正在尝试使用ident来验证您,这是无效的(例如防火墙),并且必须等待超时才能通过其他方式进行连接。

尝试使用psql查询select version()远程服务器 - 这应该是即时的,因为它不会触及磁盘。

如果不是即时,请发布您的pg_hba.conf(未注释的行)。

另一个可能的原因:

  • 使用RevDNS进行身份验证;
  • 服务器或客户端上的防病毒软件;
  • 其他一些连接阻止了表或行,因为它没有明确结束。

答案 4 :(得分:0)

这不是为什么pg访问速度慢于VPN的答案,但可能的解决方案/替代方案可能是设置TeamPostgreSQL以通过浏览器访问PG。它是一个AJAX Web应用程序,包含一些非常方便的功能,用于导航数据以及管理数据库。

这也可以避免掉线,这在我使用pg通过VPN时很常见。

还有用于Web访问的phpPgAdmin,但我提到了TeamPostgreSQL,因为它对于导航和获取数据库中数据的概述非常有用。

答案 5 :(得分:0)

这个问题已经困扰了一段时间,这个问题引导我得到了答案,所以我想分享它会有所帮助。

服务器有一个辅助网络接口(eth1),它被设置为默认路由。执行查询的客户端与eth0位于同一子网内,因此应该不会导致任何问题..但它确实存在。

禁用默认路由会使查询在正常时间范围内返回。但长期解决方法是将listen_addresses'*'更改为正确的IP。