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

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

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

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

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

注意

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

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

  • 表 1 包含最常推荐的更新和跟踪标志,用于在高端系统上实现可伸缩性。
  • 表 2 包含有关其他性能优化的建议和指南。
  • 表 3 包含附加的可伸缩性修复,这些修补程序与累积更新一起包含在一起。

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

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

注意

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

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

重要

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

需要考虑的方案和症状 跟踪标志 适用的版本和生成范围 不适用的版本和生成范围 提供更多详细信息的知识库文章/博客链接
  • 遇到高 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
  • 你正在使用依赖于日志池缓存的功能。 (例如 AlwaysOn)
  • SQL Server 安装在具有多个套接字的系统上。
T9024 SQL Server 2012 Service Pack 1 到 SP2 SQL Server 2014 RTM 的累积更新包 3
  • 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 累积更新 1 的累积更新包 9(适用于 SQL Server 2014
  • 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
  • 由于其他缓存或内存 clerk 中的增长,计划缓存中的条目将被逐出
  • 由于频繁重新编译查询,CPU 消耗量较高
T8032
  • SQL Server 2012 RTM 到当前的 SP/CU
  • SQL Server 2014 RTM 到当前的 SP/CU
由于表中大量行,因此不会频繁更新现有统计信息。 T2371
  • SQL Server 2012 RTM 到当前的 SP/CU
  • SQL Server 2014 RTM 到当前的 SP/CU
  • 统计信息作业需要很长时间才能完成。
  • 无法并行执行多个统计信息更新作业。
T7471 SQL Server 2014 SP1 CU6 到当前的 SP/CU 使用 SQL 2014 和 SQL 2016 提升更新统计信息性能
CHECKDB 命令对于大型数据库需要很长时间。
  • T2562
  • T2549
    • SQL Server 2012 RTM 到当前的 SP/CU
    • SQL Server 2014 RTM 到当前的 SP/CU
    CHECKDB 命令对于大型数据库需要很长时间。 T2566
    • SQL Server 2012 RTM 到当前的 SP/CU
    • SQL Server 2014 RTM 到当前的 SP/CU
    执行需要长时间编译时间的并发数据仓库查询, 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 到最新版
    使用具有空间数据类型的查询操作时性能缓慢。
    • 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 安装在内存量较大的计算机上。
        • 创建新数据库需要很长时间。
        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 实例性能的一般注意事项和最佳做法

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

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

        ALTER WORKLOAD GROUP Memory grant query hints 如果有许多查询耗尽了大型内存授予,请将资源调控器配置中默认工作负荷组的默认工作负荷组从默认 25% 减少 request_max_memory_grant_percent 到较低的值。 SQL Server 中提供了新的查询内存授予选项(min_grant_percentmax_grant_percent
        即时文件初始化 与 Windows 管理员合作,根据联机丛书主题中的信息,向 SQL Server 服务帐户授予“执行卷维护任务”用户权限。
        SQL Server 中“autogrow”和“autoshrink”设置的注意事项 检查数据库的当前设置,并确保它们根据知识库文章中的建议进行配置。
        数据库检查点 (SQL Server) 请考虑在用户数据库上启用间接检查点以优化 SQL Server 2012 和 2014 中的 I/O 行为。
        修复:当磁盘在 SQL Server AG 和 Logshipping 环境中主副本和次要副本日志文件具有不同的扇区大小时,同步速度缓慢 如果有一个可用性组,其中主副本上的事务日志位于具有 512 字节扇区大小的磁盘上,而辅助副本的事务日志位于具有 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 中的临时表操作时 I/O 性能不佳
        在查询操作中止后ALTER INDEX ... ONLINE遇到PWAIT_MD_RELATION_CACHEMD_LAZYCACHE_RWLOCK等待。 SQL Server 2014 RTM CU1
        SQL Server 2012 SP1 CU9
        修复:ALTER INDEX 后的性能会降低...ONLINE 操作在 SQL Server 2012 或 SQL Server 2014 中中止
        查询在产品的标准版本上突然表现不佳。 SQL Server 2014 RTM CU1
        SQL Server 2012 SP1 CU7
        修复:未在 SQL Server 2012 或 SQL Server 2014 标准版中均匀计划线程
        由于页面预期寿命突然下降,性能下降。 SQL Server 2012 SP1 CU4 修复:SQL Server 2012 中可能会遇到性能问题
        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 硬件上的内核数量不断增加而缩放,导致 SQL Server 中的 CPU 饱和
        排序运算符的内存分配需要很长时间才能在具有较大内存的 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_CACHESTORE 大型表中的空间数据类型生成索引时,以及 SOS_SELIST_SIZED_SLOCK 何时进行旋转锁争用。 SQL Server 2014 RTM CU1
        SQL Server 2012 SP1 CU7
        修复:在大型表的空间数据类型上生成索引时,SQL Server 2012 或 SQL Server 2014 中的性能降低
        在大型表中的空间数据类型上生成索引时,高 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
        修复:在 SQL Server 2012 或 SQL Server 2014 中的外页处理期间 NUMA 环境中出现性能问题
        CHECKDB 命令对于大型数据库需要很长时间。 SQL Server 2014 累积更新包 6 修复:SQL Server 2012 或 SQL Server 2014 中的 DBCC CHECKDB/CHECKTABLE 命令可能需要更长的时间

        重要事项

        参考

        适用于

        • SQL Server 2014 Enterprise
        • SQL Server 2014 Enterprise Core
        • SQL Server 2014 Business Intelligence
        • SQL Server 2014 开发人员
        • SQL Server 2014 Standard
        • SQL Server 2014 Web
        • SQL Server 2014 Express
        • SQL Server 2012 商业智能
        • SQL Server 2012 开发人员
        • SQL Server 2012 企业版
        • SQL Server 2012 Standard
        • SQL Server 2012 Web
        • SQL Server 2012 Enterprise Core