要使多个实例发挥非常好的性能,只需指定合理的最小服务器内存,而无需额外调整内存配置。我们注意到,如果为每个实例预留 1 GB 的最小服务器内存并保持开放最大的服务器内存,在性能方面要比使用默认的动态内存分配提高 25%。这样获得的性能与使用非常好的静态内存分配一样,无需进行高成本的反复重新校准。使用此方法的客户应注意,此方法可能会影响同一服务器上其他应用程序的内存分配。争用内存的其他应用程序会影响动态内存分配。因此,Microsoft 建议您将此系统专用于 SQL Server。
将此系统专用于 SQL Server 的另外一个优点是使配置能够支持不同实例上的不同工作负荷,无需为了确定最合适的内存配置而进行特别的测试和调整。这种方法(将系统专用于 SQL Server)能够减少为了在工作负荷不同的情况下获得非常好的性能而重新配置内存的工作。
简化内存配置可以提高系统性能
为每个实例使用最小内存配置可以获得与使用非常好的静态分配时一样的性能。可以减少为确定每个实例的非常好的静态分配所进行的测试工作。
为了确定某种方法是否可以提供更好的性能,我们分别使用静态和动态内存分配设置在 8 实例和 16 实例配置上进行了测试。因为每个数据库具有相同的工作负荷而且每个实例具有相同数量的数据库,所以工作负荷在各个实例中是相等的。
但是运行 16 个实例时,使用静态内存分配提供的性能比使用动态分配提供的性能高 25%。
对于 16 个实例的配置,通过为每个实例预留 1 GB 的最小服务器内存并保持开放最大的服务器内存,可以获得与使用非常好的静态内存分配一样的性能。
为什么需要内存配置
当一台计算机上运行多个 SQL Server 实例时,各实例分别使用标准算法进行动态内存管理。分配给每个特定 SQL Server 实例的内存量是根据每个实例的相对工作负荷而定的。这样可以确保处理较多工作负荷的实例可以获得较多的内存,而处理较少工作负荷的实例获得较少的内存。
运行 16 个实例时,系统中没有足够的物理内存来满足所有实例的需求。SQL Server 的实例开始争用有限的可用内存,要在各实例之间获得平衡会花费很长的时间。在本方案中,使用静态内存分配可以确保实例的非常好的初始内存容量分配提供更好的性能。
请注意,每个实际的方案会有所不同。需要对它们进行测试,以确定分配给每个实例的非常好的内存量。同样,不同实例上的工作负荷水平发生变化时,也需要进行测试,以重新确定各个实例间的非常好的内存分配。这种测试在大多数实际应用中是不适用的。
要在多个实例间分配内存,较可行的方法是结合静态内存分配和动态内存分配。为每个实例合理地预留最小的服务器内存可以减少为了达到平衡所需的系统开销。保持开放最大服务器内存可以使实例根据自身的工作负荷动态地调整内存分配。
处理器关系
测试表明,使用关系掩码手动为 SQL Server 的特定实例分配处理器可以使性能提高 80%(假设工作负荷是一样的,ASP 工作负荷通常如此)。如果 SQL Server 的实例不需要与其他服务器应用程序进程共享处理器,这时可以获得非常好的效果。
使用 CPU 关系可以提高性能
测试b是在非常好的内存配置下,在 8 个实例,每个实例上 500 个数据库上进行的。各实例上的工作负荷是相同的。相对于默认处理器关系设置,将 8 个实例分别分配给 8 个 CPU 时,吞吐量将增加 80%。
为什么使用 CPU 关系可以提高性能
默认情况下,SQL Server 实例的每个线程都被安排给了下一个可用的处理器。CPU 关系掩码设置可以用来将实例限制在 CPU 的某个子集中,并且可以确保每个线程在各个中断间隔之间使用相同的处理器,而不用在多个处理器之间切换同一个线程,同时提高了二级高速缓存上的高速缓存命中率。但是,使用 CPU 关系设置时要小心,因为如果每个实例上的工作负荷不相等,那么不同 CPU 上的工作负荷就无法动态取得平衡。
在一台具有多个处理器的服务器上运行多个实例时,通过设置 CPU 关系为特定实例分配派处理器,可以减少每个处理器的活动线程数,还可以减少上下文切换次数,因此最好使用二级高速缓存。
磁盘布局
基于可恢复性的考虑,请勿将日志和数据放在同一设备上。此外,分隔日志文件使用的物理磁盘可以提高性能。
本测试方案表明,相对于将日志文件和数据文件放在同一个(较大)卷中,分隔物理磁盘上的日志文件和数据文件可以使性能提高 10%。
测试是使用具有非常好的内存配置、非常好的 CPU 配置的 8 个实例(每个实例上 500 个数据库)上进行的,具有两个不同的磁盘布局,如图 4 所示。
方案 1:
数据文件、日志文件(包括 Tempdb 日志)和相同磁盘阵列上每个实例的 Tempdb 文件,如附录 E 中的“磁盘配置 2”所述。
方案 2:
数据文件、日志文件(包括 Tempdb 日志)和三个独立磁盘阵列上每个实例的 Tempdb 文件,如附录 E 中的“磁盘配置 3”所述。
分隔物理磁盘上的日志文件和数据文件可以使性能提高 10%。
![]() |
为什么分隔物理磁盘上的日志文件可以提高性能
通常会将日志文件与数据文件放在不同的物理磁盘上,以便分开日志文件上的顺序磁盘 I/O 和数据文件上的随机磁盘 I/O。这也适用于本测试方案中的数百个日志文件。在较大卷中具有更多轴的好处大于将随机数据 I/O 和顺序日志 I/O 分开的好处。
恢复模式
测试表明,在完全恢复模式 (full recovery model) 下运行工作负荷可以获得在批量记录恢复模式 (bulk-logged recovery model) 下运行性能的 90%。在特定的方案中,使用完全恢复模式可以最灵活地进行恢复,同时还能维护良好的性能。
完全恢复模式可以提供良好的性能
为了确定不同恢复模式对工作负荷性能的影响,我们在 8 个实例中每个实例上的 500 个数据库中进行测试,使用非常好的内存配置、磁盘配置和具有两种恢复模式的 CPU 关系,这两种恢复模式为:完全恢复和批量记录恢复。相对于使用完全恢复模式,使用批量记录模式运行工作负荷使性能提高 10%。
其他注意事项
Microsoft 建议所有的生产联机事务处理 (OLTP) 系统使用完全恢复模式及其提供的数据保护。进行工作量较大的操作(例如创建索引或装载大量数据)时,可以暂时使用批量记录恢复模式。工作量较大的操作能够提高性能,但也增加了丢失数据的风险。有关详细信息,请参阅 SQL Server 联机图书。
