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