在 pg_activity 中使用“显示事务隔离级别”获取多个查询

Yog*_*ati 10 postgresql postgresql-9.2

我在生产中使用 PostgreSQL 服务器。

当我发起一个查询时

select * from pg_stat_activity
Run Code Online (Sandbox Code Playgroud)

在我的服务器上,我收到了 98% 的查询,例如

SHOW TRANSACTION ISOLATION LEVEL
Run Code Online (Sandbox Code Playgroud)

我的服务器只接受 100 个连接,所以我无法继续进行。

为什么会这样?如何阻止所有这些查询?

Eva*_*oll 2

如果他们在那里;它们就在那里,但它们并不是神奇地凭空出现。虽然我希望您能回来告诉我们您的情况,但这通常是两件事之一,

\n
    \n
  1. 连接池
  2. \n
  3. ORM 或 SQL 抽象
  4. \n
\n

有时这些人会连接并启动空交易,或准备交易。这总是由糟糕的库造成的。如果库是新的或者是数据库新的,这是情有可原的。如果图书馆已有多年历史并这样做,我怀疑他们没有太多的目光关注它并寻找替代方案。

\n

从评论来看,

\n
\n

Postgres 不会自己创建连接。您的应用程序创建这些连接并运行这些查询。可能是连接池或类似的东西。\xe2\x80\x93 a_horse_with_no_name 2013 年 9 月 10 日 9:03

\n

您正在运行 Java 应用程序吗?使用 HikariCP,或者其他连接池选项?我正在使用 HikariCP,当我登录 psql 并从 pg_stat_activity 进行选择查询时看到类似的事情;...我也想知道为什么会发生这种情况;我的猜测是这是 HikariCP 保持连接“新鲜”的一种机制。\xe2\x80\x93 克里斯·W. Jan 16 \'16 at 19:22

\n
\n

虽然这有可能是尝试保持连接“新鲜”,但这样做的正确方法是这样

\n
result = PQexec(imp_dbh->conn, "/* DBD::Pg ping test v3.6.0 */");\n
Run Code Online (Sandbox Code Playgroud)\n

您可能需要提交错误报告以改用该方法。

\n