我不是数据库管理员(更不用说MS数据库管理员 :),我收到的投诉是我编写的一段代码在数据库中留下了“休眠连接”。
我的代码是 Java,并使用 Apache Commons DBCP 进行连接池。我还使用 SpringJdbcTemplate
来管理连接的状态,因此不关闭连接是不可能的(因为库正在为我这样做)。
我的主要问题是,从 DBA 的角度来看,这些连接会导致中断或性能下降吗?
这个问题是相关的,目前设置保持原样(池中的无限活动/空闲连接)。
我不是数据库管理员(更不用说MS数据库管理员 :),我收到的投诉是我编写的一段代码在数据库中留下了“休眠连接”。
我的代码是 Java,并使用 Apache Commons DBCP 进行连接池。我还使用 SpringJdbcTemplate
来管理连接的状态,因此不关闭连接是不可能的(因为库正在为我这样做)。
我的主要问题是,从 DBA 的角度来看,这些连接会导致中断或性能下降吗?
这个问题是相关的,目前设置保持原样(池中的无限活动/空闲连接)。
Apache DBCP 的maxIdle
连接设置为 8,maxActive
设置为 8。这意味着池中可以存在 8 个活动连接和 8 个空闲连接。DBCP 在调用连接时重用连接。您可以根据自己的要求进行设置。您可以参考以下文档:
真的,要回答您的问题,了解这些“睡眠”连接的数量会很好。该服务器的主要目的是为您的应用程序提供服务,还是您的应用程序是众多应用程序之一,这也很重要。同样相关的是您的应用程序是否有多个实例(例如,在多个 Web 服务器上),或者它是否只是一个。
以我的经验,现代硬件上的空闲连接几乎没有开销,只要你不达到数百个。也就是说,看看你之前的问题,允许池产生无限数量的连接听起来并不明智 - 我建议设置一个上限,即使你将其设置为数百个。
我可以从至少一个连接池泄漏的痛苦情况告诉你,拥有一千个到单个 SQL 服务器的打开连接是昂贵的,即使它们是空闲的。我似乎记得服务器在接近 2,000 个连接范围时开始丢失它(无法接受新连接、简单查询超时等)(这是几年前中档硬件上的 SQL 2000)。
希望这可以帮助!