【问题标题】:Connection pools and releasing temporary tables on return连接池和返回时释放临时表
【发布时间】:2016-12-28 03:45:04
【问题描述】:

我正在使用 MySQL 的 temporary tablesconnection pooling

通常,在会话中创建的临时表会保留在该会话中,并在连接关闭时被删除。但是,由于我正在使用连接池,并且在调用 java.sql.Connection.close() 时物理连接实际上并未关闭,因此我发现临时表仍然存在并影响下一个会话。

这会导致数据库上的资源泄漏,因为临时表没有立即释放,并且由于表名冲突而导致名称冲突。

直觉上,当我借用连接时,我期望一个干净的状态。如何做到这一点?

除了临时表,这个问题还会影响:

【问题讨论】:

  • “返回池时始终关闭物理连接可以工作” ...这是一个矛盾,不是吗?如果连接关闭,它不会回到池中。您可以尝试通过发出查询ROLLBACK RELEASE; 来强制池释放数据库连接,这几乎肯定会做您想做的事情,但副作用会很有趣,并且池变得有点毫无意义.从根本上说,通过池化,您的代码必须确保它自己进行初始化,DROP TEMPORARY TABLE IF EXISTS... 在创建表之前,等等。

标签: mysql apache-commons-dbcp


【解决方案1】:

使用 MySqlConnection.ClearPool(connection);能行得通。 我对 GET_LOCK() 也有类似的问题,MySqlConnection.ClearPool(connection) 可以解决这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 2011-08-19
    • 2016-07-25
    • 1970-01-01
    • 2016-05-31
    相关资源
    最近更新 更多