gpt4 book ai didi

c# - SQL Server 是否有最大连接限制

转载 作者:太空宇宙 更新时间:2023-11-03 15:50:39 26 4
gpt4 key购买 nike

我使用 ADO.NET 和 SQL Server 2008 完成了我的桌面应用程序。我计划在 10 台计算机上运行我的应用程序,这些计算机通过本地网络连接到 Windows 7 计算机上的 SQL Server 数据库。

如果所有电脑同时运行有什么问题吗?

那么 SQL Server 连接池呢?

请注意,当我尝试使用以下命令在 SQL Server 上查找我的数据库的事件连接时:

sp_who

我发现了 20 多个事件连接。

这会导致问题吗?

最佳答案

如果您只考虑十个客户端,SQL Server 应该能够处理。

除此之外,这只是针对这种负载进行设计的问题。例如,您想确保在正确的时间获得正确的锁。本质上,让多个并发客户端访问同一个数据库与让多个并发线程在一台机器上访问相同变量是一样的。数据库比简单的 int 要聪明一些。 ,但您仍然希望确保自己掌握事情的进展情况。

例如,假设您有一个表 Tasks您要完成的,它有一列用于 ID一个用于 LastCompleted时间。在单个客户端上,您可能想编写像这样访问它的东西:

  1. 获取下一个 LastCompleted < DATEADD(HOUR, -1, GETDATE())
  2. 做那个任务,需要五分钟
  3. UPDATE要设置的表 LastCompleted = GETDATE()

然后您可以非常轻松地每小时完成所有任务。

但是,如果您面临多个客户端访问,这将导致多个客户端多次抓取同一任务,并同时执行。在那种情况下,您可能需要另一列来指示 InProgressAsOf作为日期,那么您可以根据需要重试孤立的任务,但您永远不会冒险发生重叠的事情。即便如此,您可能还想使用 OUTPUT关于你的条款 UPDATE以确保它都是原子的。

  1. UPDATE Tasks SET InProgressAsOf = GETDATE() OUTPUT DELETED.* WHERE LastCompleted < DATEADD(HOUR, -1, GETDATE()) AND InProgressAsOf < DATEADD(MINUTE, -10, GETDATE())中获取结果
  2. 做那个任务,需要五分钟
  3. UPDATE要设置的表 LastCompleted = GETDATE()

但是,是的,只要您了解多线程操作的细微差别,您就应该能够针对同一个数据库运行十个并发连接。

关于c# - SQL Server 是否有最大连接限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26006361/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com