0

我不是数据库管理员(更不用说MS数据库管理员 :),我收到的投诉是我编写的一段代码在数据库中留下了“休眠连接”。

我的代码是 Java,并使用 Apache Commons DBCP 进行连接池。我还使用 SpringJdbcTemplate来管理连接的状态,因此不关闭连接是不可能的(因为库正在为我这样做)。

我的主要问题是,从 DBA 的角度来看,这些连接会导致中断或性能下降吗?

这个问题是相关的,目前设置保持原样(池中的无限活动/空闲连接)。

4

2 回答 2

1

Apache DBCP 的maxIdle连接设置为 8,maxActive设置为 8。这意味着池中可以存在 8 个活动连接和 8 个空闲连接。DBCP 在调用连接时重用连接。您可以根据自己的要求进行设置。您可以参考以下文档:

DBCP 配置 - 阿帕奇

于 2011-05-06T09:40:59.813 回答
1

真的,要回答您的问题,了解这些“睡眠”连接的数量会很好。该服务器的主要目的是为您的应用程序提供服务,还是您的应用程序是众多应用程序之一,这也很重要。同样相关的是您的应用程序是否有多个实例(例如,在多个 Web 服务器上),或者它是否只是一个。

以我的经验,现代硬件上的空闲连接几乎没有开销,只要你不达到数百个。也就是说,看看你之前的问题,允许池产生无限数量的连接听起来并不明智 - 我建议设置一个上限,即使你将其设置为数百个。

我可以从至少一个连接池泄漏的痛苦情况告诉你,拥有一千个到单个 SQL 服务器的打开连接是昂贵的,即使它们是空闲的。我似乎记得服务器在接近 2,000 个连接范围时开始丢失它(无法接受新连接、简单查询超时等)(这是几年前中档硬件上的 SQL 2000)。

希望这可以帮助!

于 2011-05-06T15:01:47.830 回答