postgres中有很多SHOW TRANSACTION ISOLATION LEVEL查询

Ric*_*cky 11 java postgresql hibernate c3p0

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

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

是否由于连接泄漏?

wlk*_*wlk 8

您还应该检查state每个查询,如果idle它是最有可能没有问题的.

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

这就是发生的事情:

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


Ste*_*man 5

听起来你可能正在通过连接池中的连接方式过快地搅拌.

这可能是因为您设置过于激进maxIdleTimemaxConnectionAge,或因为连接失败的连接测试,并越来越被驱逐,或者因为你的应用程序错误重构池时,它要求的连接,而不是持有和使用稳定池.(这是一个非常糟糕但令人惊讶的常见错误.)

c3p0检查每个连接获取的连接隔离级别一次.由于获取的Connections应该在池中具有较长的生命周期,因此其摊销开销可以忽略不计.

但是,如果由于某些配置问题或错误,您的应用程序让c3p0不断获取Connections,每个客户端一个或者如果您为每个客户端重建池更糟糕,那么事务隔离检查可能会成为更糟糕的潜在问题的可见症状.