具备高性能工作负载的 SQL Server 的建议更新和配置选项

本文包含可用于 SQL Server 2012 及更高版本的性能改进和配置选项的列表。

原始产品版本:SQL Server 2014、SQL Server 2012
原始 KB 编号: 2964518

本文介绍通过各种产品更新和配置选项对 SQL Server 2014 和 SQL Server 2012 版本可用的性能改进和更改。 可以考虑应用这些更新,以提高 SQL Server 实例的性能。 你看到的改进程度取决于各种因素,包括工作负载模式、争用点、处理器布局 (处理器组数、套接字、NUMA 节点、NUMA 节点、NUMA 节点) 核心数以及系统中存在的内存量。 SQL Server支持团队使用这些更新和配置更改,为使用具有多个 NUMA 节点和大量处理器的硬件系统的客户工作负载实现合理的性能提升。 将来,支持团队将继续使用其他更新更新本文。

高端系统 高端系统通常具有多个套接字,每个套接字有 8 个或更多核心,以及 5 TB 或更多内存。

注意

在 SQL Server 2016 及更高版本中,本文中提到的许多跟踪标志都是默认行为,你不必在这些版本中启用它们。

建议分为三个表,如下所示:

  • 表 1 包含针对高端系统上可伸缩性最常推荐的更新和跟踪标志。
  • 表 2 包含有关其他性能优化的建议和指南。
  • 表 3 包含随累积更新一起包含的其他可伸缩性修补程序。

表 1. 高端系统的重要更新和跟踪标志

查看下表,在确保SQL Server实例满足“适用版本和生成范围”列中的要求后,在“跟踪标志”列中启用跟踪标志。

注意

  • 适用的版本和内部版本指示在其中引入了更改或跟踪标志的特定更新。 如果未指定 CU,则包括 SP 中的所有 CU。

  • 不适用版本和内部版本指示更改或跟踪标志成为默认行为的特定更新。 因此,只需应用该更新即可获得好处。

重要

在Always On环境中启用具有跟踪标志的修补程序时,请注意,必须在属于可用性组的所有副本上启用修复和跟踪标志。

要考虑的方案和症状 跟踪标志 适用的版本和内部版本范围 不适用的版本和内部版本范围 提供更多详细信息的知识库文章/博客链接
  • 遇到高 CMEMTHREAD 等待时间。
  • SQL Server安装在每个套接字具有 8 个或更多核心的系统上。
T8048
  • SQL Server 2012 RTM 到当前 Service Pack (SP) /CU
  • SQL Server 2014 RTM 到 SP1
  • SQL Server 2014 SP2 到当前 SP/CU
  • SQL Server 2016 RTM 到当前 SP/CU
  • SQL Server 2017 RTM 到当前 SP/CU
  • 遇到高 CMEMTHREAD 等待时间。
  • SQL Server安装在每个套接字具有 8 个或更多核心的系统上。
T8079 SQL Server 2014 SP2 到当前 SP/CU
  • SQL Server 2016 RTM 到当前 SP/CU
  • SQL Server 2017 RTM 到当前 SP/CU
  • 你正在使用依赖于日志池缓存的功能。 例如, (Always On)
  • SQL Server安装在具有多个套接字的系统上。
T9024 SQL Server 2012 Service Pack 1 到 SP2 的累积更新包 3 SQL Server 2014 RTM
  • SQL Server 2012 SP3 到当前 SP/CUSQL
  • 服务器 2014 SP1 到当前 SP/CU
  • SQL Server 2016 RTM 到当前 SP/CU
  • SQL Server 2017 RTM 到当前 SP/CU
修复:SQL Server 2012 或 SQL Server 2014 实例上的高“日志写入等待”计数器值
由于连接池,SQL Server 实例正在处理数千个连接重置。 T1236 SQL Server 2012 Service Pack 1 到 SP2 累积更新包 9 SQL Server 2014 累积更新包 1
  • SQL Server 2012 SP3 到当前 SP/CUSQL
  • 服务器 2014 SP1 到当前 SP/CUSQL
  • 服务器 2016 RTM 到当前 SP/CU
  • SQL Server 2017 RTM 到当前 SP/CU
  • 应用程序工作负荷涉及频繁使用 tempdb (创建和删除临时表或表变量) 。
  • 你注意到由于分配争用而等待 tempdb 页面资源的用户请求。
T1118
  • SQL Server 2012 RTM 到当前 SP/CU
  • SQL Server 2014 RTM 到当前 SP/CU
  • SQL Server 2016 RTM 到当前 SP/CU
  • SQL Server 2017 RTM 到当前 SP/CU
tempdb 数据库的并发增强

注意 启用跟踪标志并为 tempdb 数据库添加多个数据文件。
  • 有多个 tempdb 数据文件。
  • 首先,数据文件设置为相同的大小。
  • 由于活动繁重,tempdb 文件会遇到增长,并非所有文件同时增长并导致分配争用。
T1117
  • SQL Server 2012 RTM 到当前 SP/CU
  • SQL Server 2014 RTM 到当前 SP/CU
  • SQL Server 2016 RTM 到当前 SP/CU
  • SQL Server 2017 RTM 到当前 SP/CU
减少SQL Server tempdb 数据库中的分配争用的建议
大量 SOS_CACHESTORE 旋转锁争用或计划经常在即席查询工作负载上被逐出。 T174 None
  • 计划缓存中的条目因其他缓存或内存管理器的增长而逐出
  • 由于频繁重新编译查询,CPU 使用率较高
T8032
  • SQL Server 2012 RTM 到当前 SP/CU
  • SQL Server 2014 RTM 到当前 SP/CU
None
由于表中存在大量行,因此不经常更新现有统计信息。 T2371
  • SQL Server 2012 RTM 到当前 SP/CU
  • SQL Server 2014 RTM 到当前 SP/CU
None
  • 统计信息作业需要很长时间才能完成。
  • 无法并行执行多个统计信息更新作业。
T7471 SQL Server 2014 SP1 CU6 到当前 SP/CU None 使用 SQL 2014 & SQL 2016 提高更新统计信息性能
对于大型数据库,CHECKDB 命令需要很长时间。
  • T2562
  • T2549
    • SQL Server 2012 RTM 到当前 SP/CU
    • SQL Server 2014 RTM 到当前 SP/CU
    None
    对于大型数据库,CHECKDB 命令需要很长时间。 T2566
    • SQL Server 2012 RTM 到当前 SP/CU
    • SQL Server 2014 RTM 到当前 SP/CU
    None
    执行需要较长编译时间的并发数据仓库查询会导致 RESOURCE_SEMAPHORE_QUERY_COMPILE 等待。 T6498 SQL Server 2014 到 SP1 的累积更新包 6
    • SQL Server 2014 SP2 到当前 SP/CUSQL
    • 服务器 2016 RTM 到当前 SP/CU
    • SQL Server 2017 RTM 到当前 SP/CU
    你正在排查特定的查询性能问题 优化器修复在默认情况下处于禁用状态。 T4199
    • SQL Server 2012 RTM 到 SP4
    • SQL Server 2014 RTM 到最新
    None
    使用具有空间数据类型的查询操作时,性能会降低。
    • T6532
    • T6533
    • T6534
    • SQL Server 2012 SP3 到当前 SP/CU
    • SQL Server 2014 SP2 到当前 SP/CU
      • SQL Server 2016 RTM 到当前 SP/CU
      • SQL Server 2017 RTM 到当前 SP/CU
        • 查询遇到 SOS_MEMORY_TOPLEVELBLOCKALLOCATOR ,CMEMTHREAD 等待。
        • SQL Server进程的可用虚拟地址空间不足。
        T8075
        • SQL Server 2012 SP2 CU8 到当前 SP/CU
        • SQL Server 2014 RTM CU10 到当前 SP/CU
        • SQL Server 2016 RTM 到当前 SP/CU
        • SQL Server 2017 RTM 到当前 SP/CU
        修复:当SQL Server进程的虚拟地址空间不足时出现内存不足错误SQL Server
        • SQL Server安装在具有大量内存的计算机上。
        • 创建新数据库需要很长时间。
        T3449
        • SQL Server 2012 SP3 CU3 到当前 SP/CU
        • SQL Server 2014 RTM CU14 到当前 RTM CU
        • SQL Server 2014 SP1 CU7 到当前 SP/CU
        • SQL Server 2016 RTM 到当前 SP/CU
        • SQL Server 2017 RTM 到当前 SP/CU
        修复:在具有大量内存的系统上创建SQL Server数据库所需的时间比预期要长

        表 2. 提高 SQL Server 实例性能的一般注意事项和最佳做法

        查看知识库文章/联机丛书资源列中的内容,并考虑实施“建议的操作”列中的指导。

        知识库文章/联机丛书资源 建议的操作
        配置最大并行度服务器配置选项 根据知识库文章,使用sp_configure存储过程对 SQL Server 实例配置最大并行度服务器配置选项进行配置更改。
        按版本SQL Server的计算容量限制 Enterprise Edition服务器 + 客户端访问许可证 (CAL) 许可限制为每个SQL Server实例 20 个核心。 基于核心的服务器许可模型没有限制。 请考虑将SQL Server版本升级到相应的 SKU,以利用所有硬件资源。
        使用“均衡”电源计划时 Windows Server 上的性能降低 查看文章,并与 Windows 管理员协作,实现本文“解决方法”部分所述的解决方案之一。
        手动将 NUMA 节点分配给 K 组。
        针对即席工作负荷进行优化强制参数化 计划缓存中的条目由于其他缓存或内存管理器的增长而逐出。 当缓存达到其最大条目数时,还可能会遇到计划缓存逐出。 除了上面讨论的跟踪标志 8032 之外,请考虑 优化临时工作负荷 服务器选项和 FORCED PARAMETERIZATION 数据库选项。
        如何在 SQL Server 2012 及更高版本中减少SQL Server内存配置和大小调整注意事项中的缓冲池内存分页 将 Windows) 用户权限分配给 SQL 服务启动帐户 (启用“在内存中锁定页”选项 。 请参阅如何在 2012 SQL Server中启用“锁定页面”功能。 将最大服务器内存设置为大约总物理内存的 90%。 确保 服务器内存配置选项 设置仅考虑到配置为使用关联掩码设置的节点的内存。
        SQL Server和大页面说明...在高性能工作负荷中运行时用于SQL Server的优化选项 如果服务器具有大量内存,尤其是分析或数据仓库工作负荷,请考虑启用 TF 834。 请记住, 如果使用列存储索引,则不建议使用 TF 834
        描述sp_configure存储过程中提供的“访问检查缓存存储桶计数”和“访问检查缓存配额”选项 使用访问检查缓存服务器配置选项根据知识库文章中的建议配置这些值。 高端系统的建议值如下所示:
        “访问检查缓存存储桶计数”:256
        “访问检查缓存配额”:1024

        ALTER WORKLOAD GROUP内存授予查询提示 如果有许多查询耗尽了大内存授予,请将资源调控器配置中默认工作负荷组的值从默认的 25% 减少 request_max_memory_grant_percent 到更低的值。 SQL Server 中 (min_grant_percentmax_grant_percent) 提供了新的查询内存授予选项
        即时文件初始化 请与 Windows 管理员协作,根据联机丛书主题中的信息,向 SQL Server 服务帐户授予“执行卷维护任务”用户权限。
        有关SQL Server中的“自动增长”和“自动收缩”设置的注意事项 检查数据库的当前设置,并确保它们已按照知识库文章中的建议进行配置。
        数据库检查点 (SQL Server) 请考虑在用户数据库上启用间接检查点,以优化 SQL Server 2012 和 2014 中的 I/O 行为。
        修复:当磁盘在 SQL Server AG 和 Logshipping 环境中主要和辅助副本 (replica) 日志文件具有不同的扇区大小时,同步速度缓慢 如果你有一个可用性组,其中主副本 (replica) 上的事务日志位于扇区大小为 512 字节的磁盘上,而辅助副本 (replica) 的事务日志位于 4K 扇区大小的驱动器上,则可能存在同步速度缓慢的问题。 在这些情况下,启用 TF 1800 应更正此问题。 有关详细信息,请参阅 跟踪标志 1800
        如果SQL Server尚未受 CPU 限制,并且工作负荷的开销为 1.5% 到 2% 可以忽略不计,建议启用 TF 7412 作为启动跟踪标志。 此标志在 SQL Server 2014 SP2 或更高版本中启用轻型分析,使你能够在生产环境中执行实时查询故障排除。

        表 3. 累积更新中包含的性能修补程序

        查看“症状”列中的说明,并在适用环境中应用“必需更新”列中所需的更新。 有关相应问题的详细信息,请查看知识库文章。 这些建议不需要启用其他跟踪标志作为启动参数。 只需应用包含这些修补程序的最新累积更新或 Service Pack 即可获得权益。

        注意

        必需更新”列中的 CU 名称提供解决此问题SQL Server的第一个累积更新。 累积更新包含以前的SQL Server更新版本中包含的所有修补程序和所有更新。 因此,建议安装 最新的累积更新 以解决问题。

        症状 所需的更新 知识库文章
        在临时表的 Select-into 期间,预先写入会导致性能问题。 SQL Server 2012 SP2 CU1
        SQL Server 2012 SP1 CU10
        修复:在 SQL Server 2012 中执行 select into 临时表操作时 I/O 性能不佳
        在中止查询操作后ALTER INDEX ... ONLINE遇到PWAIT_MD_RELATION_CACHEMD_LAZYCACHE_RWLOCK等待。 SQL Server 2014 RTM CU1
        SQL Server 2012 SP1 CU9
        修复:ALTER INDEX 后性能下降...ONLINE 操作在 2012 SQL Server或 2014 SQL Server中止
        查询在产品的标准版本上突然表现不佳。 SQL Server 2014 RTM CU1
        SQL Server 2012 SP1 CU7
        修复:线程在 2012 SQL Server 或 SQL Server 2014 Standard Edition 中未均匀计划
        由于页面预期寿命突然下降,性能下降。 SQL Server 2012 SP1 CU4 修复:在 2012 SQL Server可能会遇到性能问题
        在 NUMA 配置、大型内存和“最大服务器内存”设置为低值的系统上,资源监视器的 CPU 使用率较高。 SQL Server 2012 SP1 CU3 修复:在服务器上安装 SQL Server 2012 后服务器上没有负载时的 CPU 峰值
        无收益计划程序,而用于排序的分配内存在安装了大量内存的系统上运行关联的大型内存授予。 SQL Server 2012 SP1 CU2 修复:在 SQL Server 2012 或 SQL Server 2008 R2 中具有多个 CPU 和大量内存的服务器上运行查询时出现错误 17883
        当排序操作员在内存较大的系统上遍历缓冲池中的多个存储桶时,无收益计划程序。 SQL Server 2012 SP1 CU1 修复:在 SQL Server 2012 中运行查询时出现“进程似乎在计划程序上未生成”错误消息
        在具有多个 NUMA 节点和多个内核的系统上运行需要很长时间进行编译的并发查询时,CPU 使用率较高。 SQL Server 2012 SP2 CU1
        SQL Server 2014 RTM CU2
        修复:密集查询编译工作负荷不会随着 NUMA 硬件上内核数量的增加而扩展,导致 CPU 饱和,SQL Server
        由于远程节点分配,在内存较大的 NUMA 系统上完成排序运算符的内存分配需要很长时间。 SQL Server 2012 SP1 CU3 修复:NUMA 环境中的SQL Server性能问题
        在具有大量 RAM 的 NUMA 计算机上安装SQL Server时出现内存不足错误,SQL Server具有大量外部页。 SQL Server 2012 RTM CU1 修复:在使用 NUMA 的计算机上运行 SQL Server 2012 实例时出现内存不足错误
        在 和 SOS_SELIST_SIZED_SLOCKSOS_CACHESTORE对大型表中的空间数据类型生成索引时,旋转锁争用。 SQL Server 2014 RTM CU1
        SQL Server 2012 SP1 CU7
        修复:在SQL Server 2012 年或 2014 SQL Server在大型表的空间数据类型上生成索引时性能下降
        在大型表中对空间数据类型生成索引时,高 CMEMTHREAD 等待类型。 SQL Server 2014 RTM CU1
        SQL Server 2012 SP1 CU7
        修复:在 SQL Server 2012 或 SQL Server 2014 实例中对大型表的空间数据类型生成索引时,SQL Server性能降低
        由于 SOS_PHYS_PAGE_CACHE 和 CMEMTHREAD 在大内存计算机上的内存分配过程中等待,导致性能问题。 SQL Server 2014 RTM CU1
        SQL Server 2012 SP1 CU9
        修复:在 2012 SQL Server 或 2014 SQL Server处理外部页面期间 NUMA 环境中出现性能问题
        对于大型数据库,CHECKDB 命令需要很长时间。 2014 SQL Server累积更新包 6 修复:DBCC CHECKDB/CHECKTABLE 命令在 2012 SQL Server 或 2014 SQL Server可能需要更长时间

        重要说明

        References

        适用对象

        • SQL Server 2014 Enterprise
        • SQL Server 2014 Enterprise Core
        • SQL Server 2014 Business Intelligence
        • SQL Server 2014 Developer
        • SQL Server 2014 Standard
        • SQL Server 2014 Web
        • SQL Server 2014 Express
        • SQL Server 2012 商业智能
        • SQL Server 2012 Developer
        • SQL Server 2012 Enterprise
        • SQL Server 2012 Standard
        • SQL Server 2012 Web
        • SQL Server 2012 Enterprise Core