概述
本文是 Microsoft 和 Dell 公司共同合作的成果用来说明 Microsoft® SQL Server; 和 Dell 硬件的可缩放性在 Dell 企业版八路服务器上运行的 SQL Server 可以支持上千个数据库及为数众多的用户同时还可以提供进行集中管理所需的性能SQL Server 使用户能够在对称多重处理 (SMP) 系统方面获得最大的投资回报用户可以增加处理器内存和磁盘以建立集中管理的大型企业服务器
更多公司愿意从应用服务提供商 (ASP) 那里获取数据库服务内部信息技术 (IT) 组织正在根据其总拥有成本 (TCO) 和可管理收益合并数据库服务本文重点介绍常见的 ASP 方案其中一个系统上承载了多个数据库而每个数据库中只有较少的几个用户此方案同样适用于希望将跨企业服务器的多个数据库合并到一个集中管理的服务器上的公司因此本文的目的也就是要说明如何使用多个实例成功地调整单个服务器上增加的工作负荷我们将使用 Microsoft bCentral; 的应用程序来研究不同的配置对工作负荷性能的影响测量依据是每分钟的事务处理数 (TPM)
下表列出了在一台服务器上使用多个实例的优点
一台服务器可以承担更大的工作负荷
可以基于不同服务水平协议 (SLA) 的要求灵活地分离数据库
可以根据不同的性能要求分离数据库
可以根据不同的备份和恢复要求分离数据库
可以根据不同的安全性要求分离数据库
可以根据变化控制操作和维护要求分离数据库
此案例研究的结果表明
与使用单个实例相比使用多个实例可以支持更多数据库这样一台服务器所能承载的工作负荷就增大了八倍
与多个实例一起使用时设置处理器关系可以使工作负荷相对于默认设置增加 %
从数据文件中分离事务日志可以使工作负荷增加 %为将日志和文件放在不同设备上的最佳实践提供了其他支持
当某台服务器专用于 SQL Server 时可以获得最佳效果
本文提供了一些一般的原则以帮助用户理解成功配置多个实例以获取最佳吞吐量过程中所涉及的标准
简介
鑒于越来越多的客户开始关注服务器功能合并我们期望 ASP 和企业 IT 部署多个 SQL Server 实例以承载更多的数据库
分离数据库的能力使得 ASP 或企业 IT 能够更灵活地向客户提供不同层次的服务而无需使用单独的计算机要使用这种方法需要确定何时使用多个实例以及如何配置这些实例以获得最佳性能
最佳配置是在研究过若干个参数(包括多个实例内存配置CPU 关系磁盘布局和 TPM 中的恢复模式)的影响之后确定的
本文重点介绍一个常见的方案其中一个系统上承载了多个数据库而每个数据库只有较少的几个用户上述参数的影响可以从称为PACE的实际应用程序中看出PACE 来自 Microsoft bCentral 的一个财务应用程序它运行在一组服务器上这些服务器包括Microsoft SQL Server Enterprise EditionMicrosoft Windows® Datacenter; Server 和 Dell PowerEdge servers
PACE 应用程序
所部署的 PACE 应用程序是一个会计和财务管理产品是 Microsoft bCentral 为客户提供的众多服务之一PACE 用来帮助小型企业更有效地完成日常工作它包括处理财务问题银行业务生成工资单记录销售采购信息以及快速方便地生成报告的功能
为了向每位客户提供实体安全的会计控制和可靠的多用户访问该应用程序在一台服务器上提供了许多小型财务数据库为每位客户建立一个数据库它还使用户能够对安全性备份和恢复变化控制和维护操作进行更精确的控制此应用程序为每个数据库提供了 多个存储过程以支持 Web 服务
这种反传统的设计为系统管理和 SQL Server 的性能优化带来了新的问题最大的问题是随着数据库的增多支持大量存储过程所需要的内存也在成倍地增加对于 SQL Server 来说需要具有虚拟内存空间以便为每个数据库上的每个过程编译执行计划然后将该计划保存在过程高速缓存中对于 PACE 应用程序来说为 个数据库高速缓存的执行计划数量为 *即 个高速缓存条目PACE 数据库的数量越多所需的服务器过程高速缓存大小就越大如果执行计划的数量超出了过程高速缓存能够存储的数量将对执行重新进行编译这将减少处理查询的吞吐量利用传统的方法(例如使存储过程参数化)不能解决此问题
进行有效的调整需要完成特定的配置以增加用于过程高速缓存的有效内存空间其他问题还包括如何有效地利用 CPU以处理由于数据库和用户数量增加而导致频繁发生并发活动的情况以及如何有效地利用最佳磁盘布局和最佳恢复模式
使用多个实例
使用多个实例可以增加每台服务器上的数据库数量和工作负荷
当数据库的数量和相应的工作负荷达到一定水平后将多个 SQL Server 实例中的数据库分组是一个好办法因为这样可以缓解内存压力为每个实例的服务器过程高速缓存分配更多内存可以获得良好的性能并能够提供更好的操作和安全隔离
测试表明使用多个实例可以增加数据库的总数以及系统上产生的相应工作负荷同时还能维护每个数据库的吞吐量
图 表明当 PACE 数据库的数量从 增加至 时单个实例的性能将降低但是如果分散到 个实例上每个实例上运行 个数据库那么每分钟的事务处理数量是在一个实例上运行 个数据库时的 倍在 个实例中的每个实例上运行高工作负荷的 个数据库几乎利用了此硬件配置中的全部 CPU 容量所以通过在 个实例中的每个实例上运行 个数据库来增加数据库的总数不能增加总吞吐量(但是系统仍然显示了一个可接受的吞吐量)
图 表明当单个 SQL Server 上的数据库数量(或客户端连接数量)增加时每个数据库的工作负荷吞吐量将减少如果每个实例的数据库保持在 个则每个数据库的吞吐量在单个实例和在 个实例上是一样的但是当增加至 个实例后吞吐量会因为 CPU 的限制而减少
图 系统上的总工作负荷吞吐量与系统上的 PACE 数据库总数图 每个数据库上的工作负荷吞吐量与系统上的 PACE 数据库数量为什么要在此方案中使用多个实例
在一个实例上使用上千个 PACE 数据库会造成性能下降
SQL Server 最多可以为该过程高速缓存使用 GB 的虚拟内存(如果在 bootini 中设置了 / GB 开关则为 GB)当单个实例上的数据库数量从 增加至 时过程高速缓存中将没有足够的虚拟内存来保存内存中增加的所有查询执行计划为了释放内存以便为其他存储过程的计划腾出空间系统会丢弃过程高速缓存中的某些执行计划但是此操作要求在需要时重新编译这些被丢弃的存储过程计划请注意这样所造成的频繁的重新编译工作会影响工作负荷性能
使用多个实例缓解内存压力
如图 所示在具有 GB 以上物理内存的情况下在多个实例上运行数据库可以留出更多的内存供过程高速缓存使用(每个实例具有自己的虚拟地址空间和过程高速缓存)
当单个实例的 PACE 数据库数量增至数千后这些数据库对象会占用太多供过程高速缓存使用的内存空间从而导致性能下降过程高速缓存将被丢弃然后进行重新编译综上所述我们建议使用多个实例
图 不同配置中过程高速缓存的有效内存其他类似的设计也面临同样的问题
决定多个实例是否能够提高性能的关键因素是所有执行计划所需的内存空间总量所需的内存空间总量是由执行计划的平均大小每个数据库的存储过程数量和数据库数量决定的如果每个数据库中有较多的过程那么即使使用较少的数据库也会产生同样的问题此外如果较少的数据库中存在非常复杂的过程即使每个数据库的存储过程较少也会产生同样的问题
多个实例的内存配置
要使多个实例发挥最佳性能只需指定合理的最小服务器内存而无需额外调整内存配置我们注意到如果为每个实例预留 GB 的最小服务器内存并保持开放最大的服务器内存在性能方面要比使用默认的动态内存分配提高 %这样获得的性能与使用最佳静态内存分配一样无需进行高成本的反复重新校准使用此方法的客户应注意此方法可能会影响同一服务器上其他应用程序的内存分配争用内存的其他应用程序会影响动态内存分配因此Microsoft 建议您将此系统专用于 SQL Server
将此系统专用于 SQL Server 的另外一个优点是使配置能够支持不同实例上的不同工作负荷无需为了确定最合适的内存配置而进行特别的测试和调整这种方法(将系统专用于 SQL Server)能够减少为了在工作负荷不同的情况下获得最佳性能而重新配置内存的工作
简化内存配置可以提高系统性能
为每个实例使用最小内存配置可以获得与使用最佳静态分配时一样的性能可以减少为确定每个实例的最佳静态分配所进行的测试工