【发布时间】:2018-06-04 09:31:50
【问题描述】:
我正在调试我的 PostgreSQL 数据库,发现 7 个查询“DEALLOCATE pdo_stmt”已经运行了 15 天。
阅读 PostgreSQL 文档,我看到这些查询应该在会话结束后释放准备好的语句,但我不敢相信它会花费这么多时间。
此外,该公司的其他项目发现相同的查询已经运行了不寻常的时间。
数据库托管在 AWS RDS 上,并使用 Laravel 5.2 访问。
我运行的查询是:
SELECT
pid,
now() - query_start as duration,
query,
state
FROM pg_stat_activity
where now() - query_start > interval '2 minutes'
order by now() - query_start desc
结果是:
10169 15 days 23:52:04.697072 DEALLOCATE pdo_stmt_00000003 idle
10170 15 days 23:52:04.64288 DEALLOCATE pdo_stmt_00000003 idle
10171 15 days 23:52:04.616907 DEALLOCATE pdo_stmt_00000003 idle
10172 15 days 23:52:04.60968 DEALLOCATE pdo_stmt_00000003 idle
10174 15 days 23:52:04.604393 DEALLOCATE pdo_stmt_00000003 idle
10173 15 days 23:52:04.596357 DEALLOCATE pdo_stmt_00000003 idle
10175 15 days 23:52:04.591835 DEALLOCATE pdo_stmt_00000003 idle
【问题讨论】:
-
你在用
PgBouncer吗? -
@Hackerman 不,我们没有使用
PgBouncer。数据库托管在 AWS RDS 上。 -
postgresql.org/docs/current/static/… "
idle: 后端正在等待新的客户端命令。" -
@Abelisto 我不明白你的意思。你想说什么?
-
idle状态表示 PostgreSQL (AWS) 处于空闲状态,正在等待来自客户端的下一条命令(SQL 语句)。所以看来问题不在于deallocate语句,而在于中间/前端的一些“死”会话。
标签: postgresql laravel amazon-web-services amazon-rds postgresql-9.3