POSTGRES 中的大量显示事务隔离级别查询
2022-09-02 21:39:28
我正在使用Hibernate 4,PostgreSQL和C3P0。
在我的Web应用程序中,一段时间后,我在数据库中收到多个查询,因此我的服务器挂起。在我的代码中,我的所有连接都已正确关闭。SHOW TRANSACTION ISOLATION LEVEL
是由于连接泄漏造成的吗?
我正在使用Hibernate 4,PostgreSQL和C3P0。
在我的Web应用程序中,一段时间后,我在数据库中收到多个查询,因此我的服务器挂起。在我的代码中,我的所有连接都已正确关闭。SHOW TRANSACTION ISOLATION LEVEL
是由于连接泄漏造成的吗?
您还应该检查每个查询,如果是,则很可能没有任何问题。state
idle
pg_stat_activity
将显示每个打开的连接执行的最后一个查询。c3p0 用于保持连接打开(正常和预期行为)。SHOW TRANSACTION ISOLATION LEVEL
这就是正在发生的事情:
SHOW TRANSACTION ISOLATION LEVEL
执行以保持连接打开。pg_stat_activity
idle
听起来您可能在连接池中的连接中搅动得太快了。
这可能是因为您设置了过于激进的 或 ,或者因为连接未通过连接测试并被逐出,或者因为应用程序在请求连接而不是保持和使用稳定池时错误地重建了池。(这是一个非常糟糕但令人惊讶的常见错误。maxIdleTime
maxConnectionAge
c3p0 为每个获取的连接检查一次连接隔离级别。由于已获取的连接在池中的生存期应较长,因此其摊销开销可以忽略不计。
但是,如果由于某些配置问题或错误,您的应用程序具有 c3p0 不断获取连接,每个客户端一个,或者更糟糕的是,如果您正在为每个客户端重建池,则事务隔离检查可能成为更严重的潜在问题的明显症状。