我想了解此错误何时发生以及如何解决。我检查了
pg_stat_activity
和 pg_locks
但无法弄清楚哪个进程正在耗尽连接
我们使用 sqlalchemy 连接到数据库,如下所示
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
engine_url = f'{dbms}://{username}:{password}@{hostname}:{port}/{database}'
engine = create_engine(engine_url, pool_size=20, max_overflow=10)
Session = sessionmaker(bind=engine)
db_session = Session()
我在 sqlalchemy 引擎 url 的应用程序名称中添加客户端进程 ID。这将存储在
application_name
中的 pg_stat_activity
下,这将有助于调试从哪里打开此连接。
import os
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
client_hostname = os.environ.get('HOSTNAME', 'UNKNOWN')
client_pid = os.getpid()
engine_url = f'{dbms}://{username}:{password}@{hostname}:{port}/{database}?application_name={client_hostname}_{client_pid}'
engine = create_engine(engine_url, pool_size=20, max_overflow=10)
Session = sessionmaker(bind=engine)
db_session = Session()
这显示了连接的来源,并且应用程序名称的限制为64个字符,因此我们可以包含您想要传递给数据库统计信息的任何自定义信息