Sql server SQL Server体系结构指南

Sql server SQL Server体系结构指南,sql-server,database,performance,architecture,Sql Server,Database,Performance,Architecture,我们正在根据新的模式设计现有产品的新版本。 它是一个内部web应用程序,可能有100个并发用户(最多),将在SQLServer2008数据库上运行 最近讨论的一个问题是,出于性能原因,我们是否应该在两个单独的数据库中使用一个数据库来拆分数据库 数据库可以在5年内增长50-100GB 我们是开发人员,而不是DBA,所以最好能得到一些一般性的指导 [我知道答案并不简单,因为它取决于架构、归档策略、数据量等。] 选项1单个主数据库 [这是我的首选] 计划是将所有表放在一个数据库中,如果需要,还可以使用

我们正在根据新的模式设计现有产品的新版本。 它是一个内部web应用程序,可能有100个并发用户(最多),将在SQLServer2008数据库上运行

最近讨论的一个问题是,出于性能原因,我们是否应该在两个单独的数据库中使用一个数据库来拆分数据库

数据库可以在5年内增长50-100GB

我们是开发人员,而不是DBA,所以最好能得到一些一般性的指导

[我知道答案并不简单,因为它取决于架构、归档策略、数据量等。]

选项1单个主数据库 [这是我的首选]

计划是将所有表放在一个数据库中,如果需要,还可以使用文件组和分区在多个磁盘上分离数据。[如果合适,请使用架构]。这应该解决性能问题 其中一条评论指出,单个服务器实例仍将处理此数据,因此仍将存在处理瓶颈

对于报告,我们可以有一个单独的报告数据库,但这仍在讨论中

选项2将数据库拆分为两个独立的数据库

DB1-客户、账户、客户资源等

DB2—这将包含大量数据[即车辆跟踪数据、金融交易表等]

这些表通常包含大量数据。[如果需要,它可以驻留在单独的服务器上]

该计划将涉及将主数据保存在较小的数据库[DB1]中,并将[主要]只读事务类型数据保留在单独的数据库[DB2]中。UI将主要从DB1读取,因此响应性更强。 [我知道此选项使引用完整性更难实施。]

考虑要点 由于我们处于设计阶段,我们至少可以适当地使用索引来处理性能问题,这就是为什么选项1对我来说很有吸引力,而且更像是一种标准方法。 对于这两种选择,我们都在考虑实施一个归档数据库

为这个冗长的问题道歉。总之,问题是1分贝还是2分贝

提前感谢,


利亚姆

在我看来,选择1是正确的选择

CPU不太可能成为您的瓶颈,因为100个并发用户提供了您的工作负载。您可以通过热插拔技术获得一台具有额外CPU容量的多插槽服务器,以提供增长空间。依赖于可用性需求,您还可以考虑使用集群解决方案,允许通过强制故障转移到另一个节点来处理更多的CPU资源。 磁盘子系统的性能将是您最关心的问题。您的设计决策将受到您使用的存储解决方案的影响,我认为这将是SAN技术

您至少需要将日志(RAID 1)和数据文件(RAID 10或5,具体取决于工作负载)放在不同的LUN上


根据您的表访问,您可能希望考虑将不同的文件组放置在不同的LUN上。对表数据进行分区可能会对您有利,但只对大型表有利。

50到100GB和100个用户是当今大多数标准中非常小的数据库。不要试图解决你还没有看到的问题,从而过度设计你的解决方案。将其拆分为两个数据库,尤其是在两个不同的服务器上,会产生一大堆令人头痛的问题,如果没有这些问题,你会过得更好。将精力集中在开发有用的产品上。

我同意其他评论的说法,即现在50到100GB之间的容量很小。我也同意你不应该过度设计

但是,如果您存储的实体之间存在明显(或不太明显)的逻辑分离(如您所说,一个是读写的,其他部分主要是只读的),我仍然会将其拆分到不同的数据库中。至少我会以一种方式设计它,我可以很容易地将其中的一部分考虑出来。安全性是一个原因,管理/备份/恢复是另一个原因,更易于维护(因为从本质上来说,设计将更好地考虑因素,各部分将更好地彼此隔离),并且在SQL Server中,扩展能力(如果是单个数据库,则缺少扩展能力)。例如,分离登录数据库和内容数据库对于大型web应用程序通常是有意义的

而且,如果你真的想要一个合理的设计,在一个数据库中分离你的实体,使用不同的模式,在对象上设置适当的权限,在我看来,你最终会付出几乎相同的努力

像SharePoint、TFS和BizTalk这样的Microsoft产品都使用几种不同的数据库(尽管我并不假装知道原因/可能只是他们组织团队的方式的结果)

特别是在SQL Server上不能扩展单个数据库实例(集群需要多个实例)的情况下,我会尝试将其拆分


@约翰:我永远不会用RAID5。除了损害性能之外,没有其他目的。我同意RAID10方法。

将数据放入另一个数据库不会对性能产生丝毫影响。性能完全是其他因素的一个因素


创建新数据库的原因之一是出于维护和管理原因。例如,如果一组数据需要不同的备份和恢复策略或具有更高的可用性要求。

我根据要执行的工作负载类型决定是否使用RAID 5 vs 10。例如,由70-90%(取决于存储供应商)以上的读取活动组成的工作负载(例如,基于搜索的应用程序)将从RAID 5磁盘配置中获得优异的总体性能。感谢所有人的全面回复。非常感谢。因此,我们还有一些需要考虑的因素。