我正在使用postgreSQL作为RDB开发带有flask和sqlalchemy的应用程序 我很好奇PostgreSQL在请求完成时没有拆除事务空闲。
这是关于烧瓶的拆解PostgreSQL事务的代码:
@app.after_request
def after_request(r):
db.dispose()
session.close()
但是我仍然可以看到PostgreSQL的空闲事务进程。
$ ps axu | grep postgres
postgres 18127 0.9 1.0 326348 6612 ? Ss 11:08 0:00 postgres: postgres mydb ::1(59013) idle
如何在应用程序代码中终止该过程?
答案 0 :(得分:4)
您所看到的不是交易,它是没有开放交易的会话。
大多数系统池连接可以节省设置它们的成本,并为每个事务分解它们。很可能你在SQLAlchemy一侧看到了池中的连接,等待更多的工作。
只要它在交易中没有空闲就可以了。
要控制此行为,请tune SQLAlchemy's connection pool。
检查pg_stat_activity
以获取更多详细信息,而不是依赖ps
。