我正在创建一个我想作为服务提供的网站。每个客户都有自己的数据库,每个站点需要两个数据库。如果我有 100 个活跃客户并且他们都在他们的网站上工作,我可以有 200 个不同的连接字符串。
我怎么知道有多少是太多了?我不想等到遇到问题 - 我想提前计划。
我正在创建一个我想作为服务提供的网站。每个客户都有自己的数据库,每个站点需要两个数据库。如果我有 100 个活跃客户并且他们都在他们的网站上工作,我可以有 200 个不同的连接字符串。
我怎么知道有多少是太多了?我不想等到遇到问题 - 我想提前计划。
连接的数量并不是一个特别有用的限制资源。服务器上的负载对这些连接上正在执行的操作要敏感得多。你会用这些知识做什么?达到限制后拒绝连接?你怎么知道超过这个限制会开始降低用户体验?
你在使用 ASP.NET 吗?.NET 使用连接池重用 SQL 连接。真正的问题,直接打开了多少个连接:
select COUNT(*)
from master.dbo.sysprocesses p
join master.dbo.sysdatabases d on p.dbID = d.dbID
where d.name = '<database>'
您可以从您的 DAL 调用此语句,但我认为这不是必需的。为什么?我有使用 MSSQL 2000 的经验。它在有数百个打开的连接时很稳定。
如果您的 Web 服务是无状态的(我认为这是一种常见且良好的模式),您可以避免该连接问题。
使用statefull(我的意思是有一个永久的开放连接)服务很难计划,我认为你应该重新考虑你的设计。
负载测试。
编写一个小的多线程控制台应用程序,打开许多您想建立的连接并自己检查一下。尝试确定每个连接将执行多少查询,并确保将其包含在测试中。运行测试时,打开 db 服务器上的性能监视器并观察 CPU 周期。弄清楚你的 CPU 周期基准是什么,当你完成这个基准时,你就有了答案。确保您测试的数据库服务器的设置与您将在生产中运行的服务器完全相同。
不要等到你有问题。您的客户不会对此感到满意。