如何为特定的 SQL Server 2005 数据库保留系统资源?

如何为特定的 SQL Server 2005 数据库保留系统资源?

是否可以指定 SQL Server 2005 服务器中每个数据库实例可用的最小/最大系统资源量(磁盘 IO、内存、CPU 周期/秒)?

这类似于 SQL 服务器的 QoS 设置。

答案1

不。它们都使用 sqlservr.exe 进程,即 SQL Server 实例。

如果需要管理数据库级资源,则需要一个单独的实例

一般来说,我发现同一个实例上的多个数据库通常会保持平衡。每个数据库都有自己的使用模式、负载模式、用户数量等,并且 SQL Server 会根据此负载很好地管理缓冲池、计划缓存、内存等。

如果您的数据库代码较差或占用大量资源,我建议您使用自己的硬件或至少是实例。

答案2

Ricardo - 你的问题有点误导。有两种解读方式。

如果你指的是 SQL Server 实例内的数据库,那么您无法使用 SQL Server 2005 来实现这一点。SQL Server 2008 引入了资源调控器,它在某种程度上实现了您的要求,但还不够。它可以限制内存和 CPU,但不能限制磁盘 IO。

如果你指的是同一台计算机上的不同 SQL Server 实例,那么你就可以这样做。每个实例都有自己的最小和最大内存设置。在 SQL Server Management Studio 中,右键单击对象资源管理器中的实例名称,然后单击属性。从那里,您可以设置每个实例将占用的最小和最大内存。您还可以设置 CPU 亲和性掩码,这将让您选择实例可以使用的 CPU。如果您有一个 2 插槽、四核服务器(总共 8 个内核),您可以将一个实例分配给两个特定内核,将另一个实例分配给六个内核。不幸的是,如果其中一个实例处于空闲状态,另一个实例将无法利用这些空闲内核。

在实例之间隔离磁盘 IO 变得更加复杂。如果您愿意在存储设计和路径上投入大量时间,则可以使用存储多路径来分离实例之间的流量。您可以将一个实例的数据和日志文件分配给特定阵列,然后仅通过特定的主机总线适配器 (HBA) 设置到该阵列的路径。如果这对您来说没有意义,那么请让您的存储管理员参与进来,如果您没有 SAN 管理员,那么这项工作(和金钱)将比您想要解决的要多。

答案3

使用 SQL Server 的命名实例(即多个 sqlservr.exe 进程),您可以使用处理器亲和性将实例的 SQL Server 调度程序绑定到特定 CPU,从而限制 CPU。每个 SQL Server 实例还指定了一个最大服务器内存设置。

我认为没有任何可以使用磁盘设置的服务器范围的设置,但至少您可以为数据库创建单独的 LUN 来驻留并以此方式对负载进行分区。

在 SQL Server 2008 中有资源管理器它允许您为工作负载以及每个数据库可以消耗的资源量设置非常复杂的规则。也许需要升级?

答案4

您可以使用虚拟机而不是实例来实现部分功能。在每个虚拟机中放置一个单独的实例,因为虚拟机管理程序往往具有更好的资源管理工具。

资源管理器是一个好的开始,但到目前为止,它存在严重的限制。正如 Brent 提到的,它是一个很好的开始,但它不涵盖 I/O。考虑到预读算法,我不太确定如何让某人轻松管理它。

相关内容