我在自己拥有的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'
需要提供任何其他信息,请告知我们。谢谢你的帮助。
答案 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
(未注释的行)。
另一个可能的原因:
答案 4 :(得分:0)
这不是为什么pg访问速度慢于VPN的答案,但可能的解决方案/替代方案可能是设置TeamPostgreSQL以通过浏览器访问PG。它是一个AJAX Web应用程序,包含一些非常方便的功能,用于导航数据以及管理数据库。
这也可以避免掉线,这在我使用pg通过VPN时很常见。
还有用于Web访问的phpPgAdmin,但我提到了TeamPostgreSQL,因为它对于导航和获取数据库中数据的概述非常有用。
答案 5 :(得分:0)
这个问题已经困扰了一段时间,这个问题引导我得到了答案,所以我想分享它会有所帮助。
服务器有一个辅助网络接口(eth1),它被设置为默认路由。执行查询的客户端与eth0位于同一子网内,因此应该不会导致任何问题..但它确实存在。
禁用默认路由会使查询在正常时间范围内返回。但长期解决方法是将listen_addresses
从'*'
更改为正确的IP。