2011-01-11 182 views
6

我有我自己的VPS安装PostgreSQL的 - 访问数据库的软件是一个叫PokerTracker程序。远程PostgreSQL - 极其缓慢

PokerTracker记录所有你的手和统计,同时玩在线扑克。

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

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

注意事项:

我想执行的查询是非常小的。当在VPS上本地连接时,查询立即运行。

虽然远程运行它,花费约1分钟,30秒到运行查询。

该VPS运行100MBPS,然后我连接到它的计算机是在一个8MB线。

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

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

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

我不明白MSSQL如何查询几乎立即又PostgreSQL的挣扎这么多。

我能够telnet到VPS IP上的端口5432,没有任何问题,正如我所说的查询执行它只需要很长时间。

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

经由LAN经由另一台机器远程连接是即时的。

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

感谢, 瑞奇

编辑:请注意,客户端和服务器都运行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' 

任何其他需要的信息,请让我知道。感谢你的帮助。

+0

请发布查询,涉及的表的大小和输出的大小。 – Quassnoi 2011-01-11 12:31:28

+1

这听起来像一个网络问题,而不是一个Postgres问题。如果您使用`psql -h server ...`从客户机执行查询,会发生什么?如果你通过ssh隧道来做什么呢? – 2011-01-11 12:37:19

+0

我知道我会错过重要的信息。我忘了说两个操作系统都在运行Windows。如果有必要,我会发布查询,但这是一个简单的查询,只是查看一个表似乎会导致问题。我无法看到它是如何在本地进行查询的,因为它是即时的,但远程运行却有很大的延迟。 – Ricky 2011-01-11 13:44:23

回答

2

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

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

感谢, 瑞奇

0

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

+0

我会在今晚尝试Wireshark。感谢您的输入。 – Ricky 2011-01-11 13:46:20

0

也许Postgres的尝试使用ident,这是不工作(例如防火墙出)来验证你的,并具有允许通过其他方式连接前等待超时。

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

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

另一种可能的原因:

  • 使用认证RevDNS;
  • 服务器或客户端上的防病毒;
  • 其他一些连接阻塞了一个表或行,因为它没有清楚地结束。
+0

嗨。我尝试远程选择版本(),它几乎是即时的(可能是几毫秒)并显示版本。在我的VPS上,没有反病毒软件。 – Ricky 2011-01-11 18:55:36

1

你可以做一个explain analyze它会告诉你查询的执行时间服务器上(不将结果发送到客户端的网络开销)。

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

0

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

这也可以避免丢弃连接,根据我的经验,在通过VPN使用pg时很常见。

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

0

一直困扰着这个问题一段时间,这个问题引导我回答,所以认为我会分享它的帮助。

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

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