我注意到与PostgreSQL的连接非常慢。
import psycopg2
import time
start_time = time.time()
try:
db = psycopg2.connect("dbname='xx' user='xxx' host='127.0.0.1' password='xxx' port='5433'")
except Exception as e:
print(e)
exit(1)
print('connect time', time.time() - start_time)
通常连接时间为2.5-3.5秒。 连接时间3.3095390796661377
它几乎是新安装的PostgreSQL的默认配置。 我关闭了log_hostname但它没有改变任何东西。我已经运行了PostgreSQL 9.4和10,两者都有同样的问题。 我正在使用这台机器进行开发,但即便如此,我注意到它,因为我的Django请求需要2.5-3.5秒,这使得它甚至在开发时都无法忍受。
Windows 10 Python 2/3 psycopg2 2.7.4
这里有来自PostgreSQL的最新调试的相关日志
2018-03-19 21:24:43.654 +03 [10048] DEBUG: 00000: forked new backend, pid=21268 socket=5072
2018-03-19 21:24:43.654 +03 [10048] LOCATION: BackendStartup, postmaster.c:4099
2018-03-19 21:24:45.248 +03 [21268] LOG: 00000: connection received: host=127.0.0.1 port=9897
它分叉新的后端,然后仅2秒后记录连接接收
UPD
即使我设法避免PostgreSQL的连接延迟(例如通过pgbouncer,或者如果PostgreSQL在docker中运行)请求仍然需要1.3-2秒,但从第一个发送包直到最后它只有0.022秒,所有其他时间idk什么正在发生但不是客户端和服务器之间的网络通信。如果在docker中运行相同的代码 - 0.025秒。从Windows - 1.3-2秒但网络交互只有0.022秒
实际上有两个问题可能是由同一件事或不同引起的,不知道。
1)Postgresql因未知原因未发送数据包1.8秒
2)即使第一个问题被消除,网络交互下降到0.022秒,整个事情仍需要1.3-2秒(使用psql或psycopg2)