POSTGRES 中的大量显示事务隔离级别查询

2022-09-02 21:39:28

我正在使用Hibernate 4,PostgreSQL和C3P0。

在我的Web应用程序中,一段时间后,我在数据库中收到多个查询,因此我的服务器挂起。在我的代码中,我的所有连接都已正确关闭。SHOW TRANSACTION ISOLATION LEVEL

是由于连接泄漏造成的吗?


答案 1

您还应该检查每个查询,如果是,则很可能没有任何问题。stateidle

pg_stat_activity将显示每个打开的连接执行的最后一个查询。c3p0 用于保持连接打开(正常和预期行为)。SHOW TRANSACTION ISOLATION LEVEL

这就是正在发生的事情:

  1. 连接已打开
  2. SHOW TRANSACTION ISOLATION LEVEL执行以保持连接打开。
  3. 连接池将定期(例如每 10 分钟)发送此查询,以保持连接打开。
  4. 这些查询之所以显示,是因为在某些情况下,这些查询是通过给定连接执行的最后一个查询。此外,它们将显示为,因为此连接未在活动使用中pg_stat_activityidle

答案 2

听起来您可能在连接池中的连接中搅动得太快了。

这可能是因为您设置了过于激进的 或 ,或者因为连接未通过连接测试并被逐出,或者因为应用程序在请求连接而不是保持和使用稳定池时错误地重建了池。(这是一个非常糟糕但令人惊讶的常见错误。maxIdleTimemaxConnectionAge

c3p0 为每个获取的连接检查一次连接隔离级别。由于已获取的连接在池中的生存期应较长,因此其摊销开销可以忽略不计。

但是,如果由于某些配置问题或错误,您的应用程序具有 c3p0 不断获取连接,每个客户端一个,或者更糟糕的是,如果您正在为每个客户端重建池,则事务隔离检查可能成为更严重的潜在问题的明显症状。


推荐