SQL连接最佳实践

5

目前有讨论关于采用单一 SQL 连接架构的利弊。

具体而言,我们正在讨论的是,在应用程序创建时打开一个 SQL 连接,在应用程序关闭或错误关闭 SQL 连接时关闭它。而不是创建另一个连接,而是只使用那个连接与数据库通信。

我们想知道社区的想法。


6个回答

10

在不确定时间长度的情况下,尽快关闭连接。这样做可以将连接返回到连接池(如果启用了连接池),并可供其他人(重新)使用。

(连接是昂贵的资源,并且有时是有限制的)。

如果您在应用程序的整个生命周期中一直保持对连接的控制,并且对于该应用程序有多个用户(因此有多个应用程序实例和多个连接),并且如果您的DB服务器仅限于具有x个并发连接,则可能会遇到问题....

参见ado.net的最佳实践。


7

遵循这个简单的规则... 尽可能晚地打开连接,尽可能早地关闭连接。


2
我认为这是一个不好的想法,原因如下:
  1. 如果有10,000个用户使用您的应用程序,那么就会有10,000个连接 不断地 打开。
  2. 如果您必须重新启动Sql Server,则所有这些10,000个连接都将无效,您的应用程序将突然 - 假设您已包含重新连接逻辑 - 进行10000次近乎同时的重新连接请求。

关于第一点,您应该尽快关闭连接,因为否则您正在使用有限的资源,可能需要无限长的时间。如果您将Sql Server配置为允许最多10,001个同时连接,则您在任何时候只能有10,001个用户运行您的应用程序。如果您按需打开/关闭连接,则您的应用程序将可以更好地进行 扩展,因为实际上所有活动用户同时使用数据库的可能性很低。


1
在底层,ADO.NET使用连接池来管理与数据库的连接。我建议让连接池来处理您的连接需求。保持连接在应用程序运行期间处于打开状态是一个不好的想法。

1

我使用一个名为Richmond Systems的帮助台系统,它在应用程序的生命周期内只使用一个连接。作为一名笔记本电脑用户,这真是让人头疼。即使我把笔记本电脑打开带着走,无线接入点之间的跳跃足以断开数据库连接。软件随后会抱怨数据库连接问题,进入错误状态并且无法关闭。必须从任务管理器手动结束它。

简而言之,不要长时间保持数据库连接。


1

但反过来说,我会谨慎地频繁打开和关闭连接。使用连接池比不用要便宜得多,但即使有连接池,池管理器也可能决定增加或缩小池,使其变成昂贵的操作。

我的一般规则是在用户启动某个操作时打开连接,完成工作,然后在等待下一个用户输入之前关闭连接。对于任何给定的“更新”按钮点击或其他操作,我通常只有一个连接。但是,如其他人所述,你绝对不想在等待用户输入时保持连接打开。用户可能在按下另一个键或触摸另一个按钮之前等待几天 - 如果他开着电脑去度假怎么办?像这样随机地占用资源很糟糕。在大多数情况下,等待用户输入所花费的时间将远远超过实际工作所需的时间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接