SQL Server 2008中数据库的最大数量是多少?

10
我们正在编写一个基于ASP.Net/C#的程序,可能会由许多公司访问(每个公司都有独立的登录和数据)。我们考虑在同一实例中拥有多个sql server 2008数据库,每个数据库为一个公司提供服务。但是,访问数据库的C#程序将是相同的,并且将根据客户要访问的数据库创建适当的连接字符串。
在单个sql server实例中创建多少此类数据库才不会因以下原因出现性能下降:
- 连接限制,因为每个连接(不确定是否池化以访问不同的数据库)都是使用不同的连接字符串创建的。 - 数据库数量限制,它是否受硬件限制或在数据库数量增加到例如100时SQL Server 2008会显示降级。
还有其他需要注意的问题吗?
谢谢您的时间。
3个回答

13
  • 每个 SQL Server 实例的最大数据库数: 32,767
  • 最大用户连接数:32,767

(来自这里:SQL Server 的最大容量规格)

实际上,两者都受 SQL Server 机器的 RAM 限制,远在达到这些最大值之前就会出现限制。

如果您有成千上万的用户(因为您没有使用连接池),我认为用户连接将是更大的问题。

要查找 SQL Server 机器的当前值:

SELECT @@MAX_CONNECTIONS AS 'Max Connections'

针对问题作者的评论进行更新:
问题实际上不在于数据库数量,而在于这些数据库中频繁访问的页面数量。如果所有“热门”页面都适合内存(几乎没有物理读取发生),那就没问题了。


感谢您的评论。如果我们增加数据库数量,SQL Server性能会如何受到影响,您有什么想法呢?比如,我们可以将数据使用主/外键进行分区,并将每个公司存储在不同的数据库中进行比较。此外,如果您从同一ASP.NET进程实例创建对不同数据库的连接,SQL Server与ADO.NET是否不会进行连接池处理? - Samuel
2
@Samuel:建议您将这些问题添加到原始问题中。(1)重要的不是数据库的数量,而是这些数据库中经常访问的页面的数量。如果所有“热门”页面都适合内存(并且很少发生物理读取),那么一切都很好。(2)不是。连接到不同的DB是另一个用户连接。 - Mitch Wheat

4

同时,请注意连接将根据连接字符串进行连接池化——在您的情况下,您将为每个客户数据库获得单独的连接池。如果您的每个客户流量很高,那么这可能不是什么坏事,但是如果您对许多不同的数据库的流量很低,您将无法充分利用连接池的全部优势。


2
拥有多个数据库以服务多个客户可能会变成维护的噩梦。如果应用程序相同,那么我假设数据库设计也将是相同的。
我们几年前做过一个类似的项目,但我们决定将数据混合在同一个数据库中,然后开发了一个强大的安全模型,以确保一个客户不会看到或修改另一个客户的数据。
我可以自豪地说,该项目取得了成功,并且今天它正在无缺地存储100多个不同客户的数据。
Raj

2
这是正确的,但我在考虑如果服务器负载过高,更改客户到不同实例的灵活性...此外,我认为拥有单独的数据库可能会使处理速度更快,因为每个数据库中的记录不会太多。我们正在讨论每个公司大约有100,000条记录。 - Samuel
2
如果您是单个数据库或数据库集合的唯一或绝对大的用户,则在开发完成后,该数据库的维护应该几乎自动化。如果您无法自动化它,那么它最起码会与问题同时出现。良好管理的部署过程不应该将多个相同的数据库的维护视为噩梦。 - ProfK

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