本文介绍可用于 SQL Server 2017 和 SQL Server 2016 的性能改进和配置选项的列表。
原始产品版本: SQL Server 2017、SQL Server 2016
原始 KB 数: 4465518
简介
本文介绍通过各种产品更新和配置选项Microsoft SQL Server 2017 和 SQL Server 2016 可用的性能改进和更改。
建议考虑应用这些更新以提高 SQL Server 实例的性能。 改进程度取决于各种因素,包括工作负荷模式、争用点、处理器布局(处理器组数、套接字数、NUMA 节点数以及每个 NUMA 节点中的内核数),以及系统中的可用内存量。
SQL Server 支持团队使用这些更新和配置更改,为使用包含多个 NUMA 节点和大量处理器的硬件系统的客户工作负荷实现合理的性能提升。 支持团队将来会继续更新本文。
定义:高端系统
“高端系统”通常具有多个套接字、每个套接字 8 个核心或更多个,以及一半 TB 或更多内存。
安装建议的更新并提高 SQL Server 性能
有关提高 SQL Server 2017 和 SQL Server 2016 性能的建议分为五个表,如下所示:
- 表 1 包含最常推荐的更新和跟踪标志,用于在高端系统上实现可伸缩性。
- 表 2 包含有关其他性能优化的建议和指南。
- 表 3 包含有关 SQL 2017 和 2016 中行为和默认设置更改的信息。
- 表 4 包含与累积更新(CU)一起包含的其他可伸缩性修复。
- 表 5 包含针对 Linux 环境中部署的 SQL Server 实例的建议修补程序和配置准则。
注意
有关其他上下文,请参阅 用于调优繁忙 SQL Server 的常用选项。
重要
如果启用了跟踪标志,请确保在迁移到 SQL Server 2017 或 SQL Server 2016 后查看本文中的信息。 本文中列出的许多跟踪标志和配置选项成为 SQL Server 2017 和 SQL Server 2016 中的默认选项。
表 1. 高端系统的重要更新和跟踪标记
查看下表,并在确保 SQL Server 实例满足 适用版本和生成范围 列中的要求后,在 跟踪标志 列中启用跟踪标志。
注意
- 适用的版本和内部版本 指示引入更改或跟踪标志的特定更新。 如果未指定 CU,则包括 SP 中的所有 CU。
- 版本和内部版本不适用 指示更改或跟踪标志成为默认行为的特定更新。 因此,只需应用该更新即可获得权益。
重要
在 AlwaysOn 环境中启用具有跟踪标志的修补程序时,请注意,必须在属于可用性组的所有副本上启用修补程序和跟踪标志。
| 需要考虑的场景和症状 | 跟踪标志 | 适用的版本和内部版本范围 | 不适用的版本和内部版本范围 | 有关更多详细信息的知识库文章或博客链接 |
|---|---|---|---|---|
| 大量 SOS_CACHESTORE 旋转锁争用,或者在即席查询工作负载中,计划经常被逐出。 | T174 | SQL Server 2016 RTM 到当前的 SP/CU SQL Server 2017 RTM 到当前的 SP/CU | 无 | KB3026083 - 修复:在即席 SQL Server 计划缓存上SOS_CACHESTORE旋转锁争用会导致 SQL Server 中的 CPU 使用率较高 |
| 由于其他缓存或内存事务员中的增长,计划缓存中的条目将被逐出。 由于查询频繁重新编译,CPU 消耗量较高。 | T8032 | SQL Server 2016 RTM 到当前的 SP/CU SQL Server 2017 RTM 到当前的 SP/CU | 无 | DBCC TRACEON - 跟踪标志(Transact-SQL)的文档。 请参阅计划缓存内部的“缓存大小管理”部分。 |
| tempdb 的使用非常频繁,并且对 tempdb 中的数据进行了许多修改。 使用 tempdb 数据库的间接检查点时,遇到非让出调度程序消息。 | T3468 | SQL Server 2016 SP1 CU5 到当前 SP/CU SQL Server 2017 CU1 到当前 SP/CU | 无 | 间接检查点和 tempdb - 好的、坏的和非让出调度程序KB4040276 - 修复:tempdb 数据库上的间接检查点会导致 SQL Server 2016 和 2017 中的“非让出调度程序”错误 |
| 频繁的短事务发生在 tempdb 中。 你注意到这些事务的 CPU 使用率增加,且未启用通用准则合规性 | T3427 | SQL Server 2016 SP1 CU2 到 SQL Server 2016 SP2 CU2 | SQL Server 2017 RTM | KB3216543 - 修复:在 SQL Server 2016 和 2017 中使用许多频繁的短事务的工作负荷可能比 SQL Server 2014 消耗更多 CPU |
| 正在排查特定的查询性能问题。 默认情况下禁用优化器修复。 |
T4199 | SQL Server 2016 RTM 到当前的 SP/CU SQL Server 2017 RTM 到当前的 SP/CU | 无 |
KB974006 - SQL Server 查询优化器修补程序跟踪标志 4199 服务模型 请注意,请考虑使用数据库范围选项 QUERY_OPTIMIZER_HOTFIXES 或查询提示 ENABLE_QUERY_OPTIMIZER_HOTFIXES,而不是服务器级别跟踪标志 4199。 |
| 统计作业需要很长时间才能完成。 无法并行运行多个统计信息更新作业。 | T7471 | SQL Server 2016 RTM CU1 到当前 SP/CU SQL Server 2017 RTM 到当前 SP/CU | 无 |
KB3156157 - 现已支持在单个表上同时对不同统计信息运行多个 UPDATE STATISTICS 使用 SQL 2014 和 SQL 2016 提升更新统计信息性能 |
表 2. 提高 SQL Server 实例性能的一般注意事项和最佳做法
查看 知识库文章或联机丛书资源 列中的内容,并考虑实施 建议的操作 列中的指导。
| 知识库文章或 Books Online 资源 | 建议的操作 |
|---|---|
| 配置“最大并行度”服务器配置选项 | 根据知识库文章,使用存储过程 sp_configure 对 配置最大并行度服务器配置选项进行配置更改。 |
| 按版本划分的计算容量限制 SQL Server 2012 的许可证核心限制 | 采用服务器和客户端访问许可证(CAL)许可的企业版,每个 SQL Server 实例最多限于 20 个核心。 基于内核的服务器许可模型没有限制。 请考虑将 SQL Server 版本升级到适当的 SKU 以使用所有硬件资源。 |
| 使用均衡电源计划时 Windows Server 性能降低 | 查看文章,并与 Windows 管理员协作,实现本文的“解决方案”部分中列出的解决方案之一。 |
|
优化临时工作负载服务器配置选项 FORCED PARAMETERIZATION |
由于其他缓存或内存分配器的增长,计划缓存中的条目将被逐出。 当缓存达到其最大条目数时,还可能会遇到计划缓存被逐出。 除了上面讨论的跟踪标志 8032 之外,请考虑 针对临时工作负荷进行优化 服务器选项以及 FORCED PARAMETERIZATION 数据库选项。 |
|
如何在 SQL Server 中减少缓冲池内存的分页 SQL Server 2012 及更高版本中的内存配置和大小调整注意事项 |
将 “内存中的锁页”选项(Windows) 用户权限分配给 SQL 服务启动帐户。 将最大服务器内存设置为大约 90% 的总物理内存。 确保 服务器内存配置选项 设置仅考虑配置为使用关联掩码设置的节点的内存。 |
| SQL Server 和大页详解... | 如果服务器具有大量内存,尤其是对于分析或数据仓库工作负荷,请考虑启用 跟踪标志 834 。 请注意 SQL Server 中列存储索引与大页内存模型的互操作性。 |
|
与大型安全缓存关联的查询性能问题 当 TokenAndPermUserStore 缓存的大小在 SQL Server 中增长时,查询需要更长的时间才能完成运行 DBCC TRACEON - 跟踪标志 (Transact-SQL) |
如果安全缓存增长到较大大小,并且遇到性能问题和旋转锁争用,请考虑启用跟踪标志 T4610 和 T4618 以减少 TokenAndPermuserStore 的最大大小。 |
| ALTER WORKLOAD GROUPKB3107401 - SQL Server 2012 现已提供新的查询内存授予选项(min_grant_percent 和 max_grant_percent) | 如果有许多查询正在耗尽大量内存授予,请将资源调控器配置中默认工作负荷组的 request_max_memory_grant_percent 从默认的 25% 降低到较低的值。 SQL Server 中提供了新的查询内存授予选项(min_grant_percent 和 max_grant_percent)。 |
| SQL 2016 - 运行更快:自动 TEMPDB 配置 | 如果这是升级的服务器,请为 tempdb 数据库添加大小相等的多个数据文件。 对于新安装,安装程序会自动执行此操作。 |
| TEMPDB - 文件和跟踪标志和更新 | 通过避免或减少临时对象上的 DDL,使用 tempdb 优化并提高可伸缩性。 |
| 即时文件初始化 | 请与 Windows 管理员协作,根据联机丛书主题中的信息向 SQL Server 服务帐户授予执行卷维护任务用户权限。 |
| SQL Server 中“autogrow”和“autoshrink”设置的注意事项 | 检查数据库的当前设置,并确保根据知识库文章中的建议配置它们。 |
| 间接检查点 | 请考虑在用户数据库上启用间接检查点以优化 SQL Server 2014 和 2012 中的 I/O 行为。 |
| SQL Server:大型 RAM 和 DB 检查点 | 请考虑对用户数据库启用间接检查点,以优化 SQL Server 2014 和 2012 中的 I/O 行为。 审阅参考资料 间接检查点和 tempdb - 好的、坏的和非让出调度程序 中针对 tempdb 所需的调整。 |
| KB3009974 - 修复:在 SQL Server AG 和 Logshipping 环境中,当主副本和辅助副本日志文件所在磁盘的扇区大小不同时,同步速度缓慢 | 如果你有一个可用性组,其中主副本上的事务日志位于具有 512 字节扇区大小的磁盘上,并且辅助副本事务日志位于具有 4-K 扇区大小的驱动器上,则可能会遇到同步速度缓慢的情况。 在这种情况下,启用 TF 1800 应更正此问题。 有关详细信息,请参阅 跟踪标志 1800。 |
|
查询性能分析基础架构 KB3170113 - 用于在 SQL Server 2014 SP2 的 showplan XML 和扩展事件中公开每运算符查询执行统计信息的更新 |
如果 SQL Server 尚未出现 CPU 瓶颈,并且 1.5% 至 2% 的开销对于您的工作负荷而言可以忽略不计,建议启用 TF 7412 作为启动跟踪标志。 此标志在 SQL Server 2014 SP2 或更高版本中启用轻型分析。 这样就可以在生产环境中执行实时查询故障排除。 |
| 使用查询存储确定计划选择回归激活最佳查询计划 | 使用查询存储功能标识回归或性能不佳的查询。 如果由于基数估计而出现查询性能问题,请选择适当的 CE 版本:数据库范围的选项 LEGACY_CARDINALITY_ESTIMATION、查询提示 LEGACY_CARDINALITY_ESTIMATION、数据库兼容性级别或 跟踪标志 9481。 |
| 新基数估算器中的联接包含假设会降低查询性能 | 评估使用联接和筛选器来了解简单和基本包含效果的查询。 使用默认基数估算器时,使用跟踪标志 9476 进行简单包含,而不是基本包含。 |
| 兼容性级别 130 中的改进兼容性级别 140 中的改进 | 使用数据库兼容性级别 130 或更高版本受益于以下改进: 使用数据库兼容性级别 140 或更高版本受益于以下改进: |
| 查询存储 最佳实践 | 将捕获模式设置为“自动” 启用跟踪标志 7745 和 7752 以提高高可用性和灾难恢复方案中查询存储的性能。 如果您在高负载下遇到查询存储旋锁争用,请应用 KB4340759 - 修复:启用查询存储时 SQL Server 2016 性能缓慢问题 中的修复。 |
| SQL Server 2016/2017:可用性组次要副本重做模型和性能 | 如果遇到等待次数过多(PARALLEL_REDO_TRAN_TURN、DPT_ENTRY_LOCK 或 DIRTY_PAGE_TABLE_LOCK),请查看此博客以采取纠正措施(应用适用的修复,评估重做模型的适当使用)。 |
|
KB2634571 - 使用 PHYSICAL_ONLY 选项时,对 DBCC CHECKDB 命令的改进可能会提高性能 DBCC TRACEON - 跟踪标志 更快的 CHECKDB - 第四部分 (SQL CLR UDT) |
如果在大型数据库(多个 TB 大小)上运行 DBCC CHECK 命令,请考虑使用跟踪标志 T2562、T2549 和 T2566。 现在,SQL Server 2016 中的 EXTENDED_LOGICAL_CHECK 选项下提供了多个检查。 |
| 保护 SQL Server 免受 Spectre 和 Meltdown 侧通道漏洞的攻击 | 仔细评估环境中的各种 SQL Server 工作负荷上的内核虚拟地址阴影(KVAS)、内核页表间接(KPTI)和间接分支预测缓解(IBP)的性能。 |
表 3。 SQL Server 2017 和 SQL Server 2016 中引入的重要更改
SQL Server 2017 和 SQL Server 2016 在可伸缩性和性能方面包含多项改进。 SQL Server 2014 和 SQL Server 2012 中所需的各种配置更改和跟踪标志成为 SQL Server 2017 和 2016 中的默认行为。 下表概述了在 SQL Server 2017 和 SQL Server 2016 中实现的所有更改。
| 区域 | 更改摘要 | 详细信息和参考资料 |
|---|---|---|
| SQL 引擎 | SQL Server 2016 和更高版本的 SQL Server 中经常使用的、已停用或不再需要的跟踪标志:8048、8079、9024、1236、1118、1117、6498、8075、3449、6532、6533、6534。 | SQL Server 跟踪标志 |
| 数据库引擎 | 数据库引擎中的新增功能 - SQL Server 2017 | |
| 数据库引擎 | SQL Server 2016 中数据库引擎功能的重大更改 | |
| 数据库引擎 | SQL Server 2017 中数据库引擎功能的重大更改 | |
| 查询处理数据类型转换 | SQL Server 2016 (13.x) 包括对某些数据类型转换和某些不常见操作的改进。 | 有关详细信息,请参阅 SQL Server 2016 improvements in handling some data types and uncommon operations(SQL Server 2016 在处理某些数据类型和不常见操作方面所做的改进)。 |
| 可用性组 | 对于辅助数据库,初始化自动播种使用数据库镜像端点将数据库内容流式传输到辅助数据库,并将其应用到辅助数据库。 | SQLSweet16! 第 2 集:可用性组自动设定种子 |
| 可用性组 | SQL Server 2016 在将日志块从主数据库传输到辅助数据库时,使用较少的上下文切换。 | SQL 2016 - 运行就是更快:Always On 日志传输减少上下文切换SQL Server 2016 - 运行就是更快:Always On 可用性组全面加速 |
| 可用性组 | SQL Server 2016 使用改进的压缩算法和日志块数据的并行压缩。 | SQL 2016 - 运行更快:Always On 并行压缩 / 改进的算法 |
| 可用性组 | SQL Server 2016 利用支持 AES-NI 加密功能的硬件,显著提高 Always On 日志传送的可伸缩性和性能。 | SQL 2016 - 运行更快 - Always On AES-NI 加密 |
| 性能 | SQL Server 2016 检测 AVX 或 SSE 的 CPU 功能,并使用基于硬件的矢量功能在压缩、生成字典和处理列存储数据时提高可伸缩性和性能。 | SQL 2016 - 它只需运行得更快:列存储使用矢量指令(SSE/AVX) |
| 性能 | SQL Server 2016 利用 CPU 向量指令来提高批量插入性能。 | SQL 2016 - 它只是运行得更快 - BULK INSERT 使用矢量指令 (SSE/AVX) |
| 性能 | SQL Server 2016 使 INSERT ... SELECT 语句能够通过并行处理来执行,从而显著减少数据加载时间。 | SQLSweet16!,第 3 集:并行 INSERT ... SELECT |
| 性能 | SQL Server 2016 对表的各个分区启用 TRUNCATE 操作,以便存档较旧的分区。 | SQLSweet16!,第 5 集:TRUNCATE 所选分区 |
| 性能 | SQL Server 2016 根据需要动态调整内存优化数据库工作线程池的大小。 | SQL 2016 - 运行更快:内存中优化的数据库工作线程池 |
| Tempdb | tempdb 和用户数据库中的分配使用统一的完整盘区。 tempdb 中的文件增长同时发生于所有文件。 | SQL 2016——就是运行得更快:针对 TEMPDB 和用户数据库的 -T1117 和 -T1118 更改 |
| Tempdb | 数据库引擎安装程序会自动计算 tempdb 数据文件的数量。 | SQL 2016 - 它运行得更快:自动 TEMPDB 配置 |
| 存储 | 数据库引擎使用0xC0标记,而不是使用0x00来初始化事务日志文件。 | SQL 2016 - 它运行得更快:LDF 标记 |
| 存储 | 对于大型内存服务器和大量写入环境,间接检查点的性能更好。 | SQL 2016 - 它运行得更快:间接检查点默认值 |
| 存储 | 高事务速率可受益于多个日志写入器将日志缓存刷新到事务日志。 | SQL 2016 - 它只需运行得更快:多个日志写入器工作线程 |
| 备份和还原 | 如果指定 MAXTRANSFERSIZE 大于 65536,则可以压缩使用 TDE 加密的数据库的备份。 | SQLSweet16!,第 1 集:已启用 TDE 的数据库的备份压缩 |
| SQL操作系统 | 动态分区内存对象以减少内存对象争用。 | SQL 2016 - 它运行得更快:动态内存对象(CMemThread)分区 |
| SQL操作系统 | SQL Server 2016 监视工作线程的时间片使用模式,使所有工作线程都能获得公平待遇并提高可伸缩性。 | SQL 2016 - 运行更快:更新的调度算法 |
| SQL操作系统 | SQL Server 2016 会检测硬件布局,并在每个 NUMA 节点报告 8 个或更多 CPU 的系统上自动配置软 NUMA。 分区在整个数据库引擎中触发各种调整,以提高可伸缩性和性能。 | SQL 2016 - 它运行得更快:自动软 NUMA |
| DBCC CHECK(数据库完整性检查) | 指定 MAXDOP 来管理 DBCC CHECK 命令使用的资源。 | SQLSweet16!,第 6 集:使用 MAXDOP 的 DBCC CHECKDB |
| DBCC CHECK(数据库完整性检查) | DBCC CHECK 使用改进的页面扫描算法,该算法具有较少的争用和高级预读功能。 | SQL 2016 - 运行速度更快:DBCC 扩展性提升 7 倍 |
| DBCC CHECK(数据库完整性检查) | 当 SQL Server 评估特殊数据类型和索引时,DBCC CHECK 命令需要很长时间。 这些检查已移至 EXTENDED_LOGICAL_CHECKS 选项下。 | SQL 2016 - 它运行得更快:DBCC 扩展检查 |
| 代码页 | BULK INSERT 或 bcp 实用工具已改进,以便将 UTF-8 数据加载到 SQL Server 中的表中。 | SQLSweet16!,第 10 集:“我可以吃玻璃...”,但我能把它加载到数据库中吗? |
| 空间 | 对于许多空间方法,SQL Server 2016 在 T-SQL 执行期间消除了 PInvoke 和 PUnInvoke 活动。 | SQL 2016 - 就是运行得更快:原生空间数据实现 |
| 空间 | SQL Server 2016 通过本机空间验证改进了使用空间数据的 TVP 的可伸缩性。 | SQL 2016 - 它就是运行得更快:具有空间列的 TVPs |
| 空间 | 本机支持的和 TVP 空间改进使 SQL Server 能够优化空间数据的索引创建和镶嵌。 | SQL 2016 - 运行更快:空间索引构建更快 |
| MPEG Audio Layer-3 | SQL Server 2016 根据需要动态启动 MSDTC,允许资源用于其他活动,直到需要为止。 | SQL 2016 - 利用按需 MSDTC 启动 |
| XEvent | 对 XEvent Linq 提供程序逻辑进行了各种更改,以减少上下文切换、内存分配和其他开销,以便更快地呈现事件。 | SQL 2016 - 它运行得更快:XEvent Linq 读取器 |
表 4。 CU 中包含的重要修复
查看 “症状” 列中的说明,并在适用环境中的 “必需更新” 列中应用所需的更新(最好是包含特定修复的最新更新)。 可以查看知识库文章,了解有关相应问题的详细信息。 这些建议并不要求你启用其他跟踪标志作为启动参数,除非本文或此表中明确标注了它。 只需应用包含这些修补程序的最新 CU 或 Service Pack 即可获得好处。
请注意,“必需更新”列中的 CU 名称提供了解决此问题的 SQL Server 的第一个 CU。 累积更新包含上一个 SQL Server 更新版本中包含的所有修补程序和所有更新。 如 SQL Server 增量服务模型的更新中所述,建议以持续主动的节奏安装最新的累积更新,以解决或阻止所描述的问题。 另请注意,从 SQL Server 2017 开始,引入了 SQL Server 的现代服务模型,因此不再提供 Service Pack。
| 适用的版本 | 区域或组件 | 已解决的问题说明 | 建议的更新 |
|---|---|---|---|
| SQL Server 2016、SQL Server 2017 | 备份和还原 | 如果使用了非默认的 MAXTRANSFERSIZE,启用了 TDE 的数据库的日志备份在查找过去用于加密 DEK 的旧证书副本时会间歇性失败并返回错误 33111 |
修复:在 SQL Server 中备份 TDE 加密的数据库时出现错误 33111 和 3013 SQL Server 2017 累积更新 2 SQL Server 2016 SP1 累积更新 6 SQL Server 2016 累积更新 9 |
| SQL Server 2016、SQL Server 2017 | 备份和还原 | 在 SQL Server 中,对 TDE 压缩备份执行 RESTORE HEADERONLY 语句完成速度缓慢 |
修复:针对完成速度较慢的 TDE 压缩备份执行 RESTORE HEADERONLY 语句时的问题(SQL Server) SQL Server 2017 累积更新 8 SQL Server 2016 SP2 的累积更新 1 |
| SQL Server 2016 | 备份和还原 | 在启用了 TDE 的数据库中使用 INIT 和 COMPRESSION 选项时,无法压缩备份文件 |
修复:在 SQL Server 2016 中启用了 TDE 的数据库中使用 INIT 和 COMPRESSION 选项时,无法压缩备份文件 SQL Server 2016 RTM 累积更新 7 SQL Server 2016 SP1 的 CU 4 |
| SQL Server 2016 | 备份和还原 | 在 SQL Server 中备份大型 TDE 加密数据库时断言失败 | SQL Server 2016 SP1 累积更新 4 |
| SQL Server 2016 | 备份和还原 | 在启用 TDE 的数据库上使用压缩和校验和执行备份时,还原失败 |
修复:在 SQL Server 2016 中对启用了 TDE 的数据库使用压缩和校验和执行备份时还原失败 SQL Server 2016 RTM 累积更新 7 SQL Server 2016 SP1 累积更新 4 |
| SQL Server 2016 | 备份和还原 | 尝试在 SQL Server 中为大型 TDE 加密数据库从多个文件还原压缩备份时出现错误 9004 |
修复:尝试从多个文件还原大型 TDE 加密的压缩备份时出现错误 9004 SQL Server 2016 RTM 累积更新 7 |
| SQL Server 2016、SQL Server 2017 | 备份和还原 | 在 SQL Server 中还原 4-K 扇区上的压缩备份时还原性能缓慢 |
KB4088193 - 修复:在 SQL Server 中,在具有 4K 扇区大小的磁盘上还原压缩备份时,还原性能缓慢 SQL Server 2016 SP1 的累积更新 9 SQL Server 2016 SP2 的累积更新 1 SQL Server 2017 累积更新 7 |
| SQL Server 2016、SQL Server 2017 | 备份和还原 [VDI] | 使用 VDI 客户端时,TDE 压缩备份的还原不成功 | SQL Server 2017 累积更新 7 SQL Server 2016 SP2 的累积更新 1 SQL Server 2016 SP1 的累积更新 9 |
| SQL Server 2016、SQL Server 2017 | 备份和还原 [VDI] | 通过 VDI 接口还原备份已压缩的、启用 TDE 的数据库失败,并返回 OS 错误 38 | SQL Server 2017 的累积更新 8 [VSTS Bug # 10936552] SQL Server 2016 SP2 RTM [VSTS Bug # 10698847] |
| SQL Server 2016、SQL Server 2017 | 备份和还原 [VSS] | 通过基于 VSS 的应用程序备份可用性组数据库可能会在 SQL Server 中失败 |
修复:在 SQL Server 中,通过基于 VSS 的应用程序备份可用性数据库可能会失败 SQL Server 2017 累积更新 1 SQL Server 2016 RTM 累积更新 9 SQL Server 2016 SP1 累积更新 5 SQL Server 2014 SP2 累积更新 8 |
| SQL Server 2016、SQL Server 2017 | 备份和还原 | 如果加密密钥存储在 SQL Server 中的 EKM 提供程序中,则启用 TDE 的备份和还原速度较慢 |
如果加密密钥存储在 EKM 中,启用了 TDE 的备份和还原速度缓慢 SQL Server 2017 累积更新 8 SQL Server 2016 Service Pack 2 的累积更新 1 SQL Server 2016 Service Pack 1 的累积更新 9 |
| SQL Server 2016、SQL Server 2017 | Always On AG列存储 | 使用非聚集索引查找检索数据的查询需要更长的时间 |
修复:使用非聚集索引查找的数据检索查询在 SQL Server 中花费更长的时间 SQL Server 2017 累积更新 2 SQL Server 2016 Service Pack 1 的累积更新 6 SQL Server 2016 累积更新 9 |
| SQL Server 2016、SQL Server 2017 | AlwaysOn AG | 包含堆表的可用性组的次要副本中的并行重做会生成运行时断言转储或运行 SQL Server 的服务器崩溃并返回访问冲突错误 |
修复:包含堆表的可用性组的次要副本中的并行重做会生成运行时断言转储或 SQL Server 崩溃并出现访问冲突错误 SQL Server 2016 SP1 的累积更新 9 SQL Server 2016 SP2 的累积更新 1 SQL Server 2017 累积更新 6 |
| SQL Server 2016 | AlwaysOn AG | 在 SQL Server Always On 可用性组的次要副本中使用并行重做时,将发生断言错误 |
修复:在 SQL Server Always On 可用性组的次要副本中使用并行重做时,将发生断言 SQL Server 2016 累积更新 3 |
| SQL Server 2016、SQL Server 2017 | AlwaysOn AG | 处理读取查询时 AlwaysOn AG 的性能缓慢 |
修复:在 SQL Server 中处理读取查询时 AlwaysOn AG 速度缓慢 SQL Server 2017 累积更新 8 SQL Server 2016 SP2 的累积更新 1 SQL Server 2016 SP1 的累积更新 9 |
| SQL Server 2017 | AlwaysOn AG | 改进以减少Linux 上的 SQL Server中可用性组的故障转移持续时间 |
改进以减少Linux 上的 SQL Server中可用性组的故障转移持续时间 SQL Server 2017 累积更新 8 |
| SQL Server 2017 | AlwaysOn AG | SQL Server 中 Pacemaker 群集上 AlwaysOn 可用性组的改进 |
SQL Server 中 Pacemaker 群集上 AlwaysOn 可用性组的改进 SQL Server 2017 累积更新 8 |
| SQL Server 2016 | 内存 | 并行重做会导致内存使用率高 |
修复:与 SQL Server 2014 或更低版本相比,并行重做会导致 SQL Server 2016 中的内存使用率较高 SQL Server 2016 SP1 的累积更新 3 |
| SQL Server 2016、SQL Server 2017 | 内存 | sp_execute_external_script和 DMV sys.dm_exec_cached_plans会导致内存泄漏 |
修复:系统存储过程sp_execute_external_script和 DMV sys.dm_exec_cached_plans导致 SQL Server 2017 和 2016 中的内存泄漏 SQL Server 2017 累积更新 4 SQL Server 2016 SP1 的累积更新 8 |
| SQL Server 2016、SQL Server 2017 | 内存 | SQL Server 进程的虚拟地址空间不足时出现内存不足错误 |
SQL Server 进程的虚拟地址空间不足时内存不足错误 SQL Server 2017 累积更新 4 SQL Server 2016 SP1 的累积更新 8 |
| SQL Server 2016 | 内存 | 在 SQL Server 中使用Azure 存储时发生内存泄漏 |
在 SQL Server 2014 或 2016 中使用Azure 存储时,会发生内存泄漏 SQL Server 2016 RTM 累积更新 5 SQL Server 2016 SP1 累积更新 2 SQL Server 2016 累积更新 2 |
| SQL Server 2016、SQL Server 2017 | 内存中OLTP | 大型磁盘检查点使用量出现在内存中优化文件组中 |
修复:在高强度非内存工作负载期间,内存中优化文件组的磁盘检查点占用过高 SQL Server 2017 累积更新 6 SQL Server 2016 SP1 的累积更新 8 SQL Server 2016 累积更新 1 |
| SQL Server 2016 | 内存 OLTP | 将数据插入内存优化表时,检查点文件会过度增长 |
修复:在 SQL Server 2016 中将数据插入内存优化表时,检查点文件会过度增长 SQL Server 2016 SP1 累积更新 2 SQL Server 2016 累积更新 4 |
| SQL Server 2016、SQL Server 2017 | 内存中 OLTP | 当数据库包含内存优化表时,数据库恢复需要很长时间 |
在 SQL Server 2017 和 2016 中恢复具有内存优化表的数据库需要很长时间 SQL Server 2017 累积更新 4 SQL Server 2016 SP1 累积更新 7 |
| SQL Server 2016、SQL Server 2017 | tempdb | PFS 页面轮询算法改进 |
SQL Server 2016 中的 PFS 页轮循机制算法改进 SQL Server 2017 累积更新 7 SQL Server 2016 SP2 的累积更新 1 SQL Server 2016 SP1 的累积更新 9 |
| SQL Server 2016、SQL Server 2017 | tempdb | 性能问题以 tempDB(sys.sysobjvalues 和 sys.sysseobjvalues)中的PAGELATCH_EX和PAGELATCH_SH等待的形式出现 |
性能问题以PAGELATCH_EX和PAGELATCH_SH等待的形式出现 SQL Server 2016 Service Pack 2 的累积更新 1 SQL Server 2016 Service Pack 1 的累积更新 9 |
| SQL Server 2016、SQL Server 2017 | tempdb | 严重的 tempdb 争用。具有命名约束的临时表 ALTER 需要同步删除该临时表 |
SQL Server 2016 或 2017 中发生大量 tempdb 争用 SQL Server 2017 累积更新 5 SQL Server 2016 SP1 的累积更新 8 |
| SQL Server 2017 | tempdb | 删除临时对象时PAGELATCH_EX争用 (sys.sysobjvalues) |
修复:在 SQL Server 中删除临时对象时PAGELATCH_EX争用 SQL Server 2017 累积更新 5 |
| SQL Server 2016 | tempdb | sys.sysobjvalues 中增加的 PAGELATCH_EX 争用 |
修复:SQL Server 2016 中 sys.sysobjvalues 的 PAGELATCH_EX 争用增加问题 SQL Server 2016 RTM 累积更新 6 SQL Server 2016 Service Pack 1 的累积更新 2 |
| SQL Server 2016、SQL Server 2017 | tempdb | tempdb 数据库上的间接检查点会导致“非让出调度程序”错误 |
修复:tempdb 数据库上的间接检查点会导致 SQL Server 2017 和 2016 中出现“非让出调度程序”错误 SQL Server 2017 累积更新 1 SQL Server 2016 Service Pack 1 的累积更新 5 SQL Server 2016 累积更新 8 |
| SQL Server 2016、SQL Server 2017 | tempdb | 使用许多频繁、短事务的工作负荷可能会消耗更多的 CPU |
在 SQL Server 2017 和 2016 中使用许多频繁的短事务的工作负荷可能会消耗比 SQL Server 2014 更多的 CPU SQL Server 2017 累积更新 4 SQL Server 2016 SP1 累积更新 2 |
| SQL Server 2016、SQL Server 2017 | 事务日志 | 当关键日志增长没有足够的磁盘空间时出现错误 9002 |
KB4087406 - 修复:SQL Server 2014、2016 和 2017 中关键日志增长没有足够磁盘空间时出现错误 9002 SQL Server 2017 累积更新 5 SQL Server 2016 SP2 的累积更新 1 SQL Server 2016 SP1 的累积更新 8 SQL Server 2014 SP2 累积更新 11 |
| SQL Server 2016 | 安全缓存 | CPU 使用率高会导致 SQL Server 2016 出现性能问题:SECURITY_CACHE 和 CMED_HASH_SET 的高旋转锁争用 SQLSweet16!第 8 集:SQL Server 2016 累积更新 2(CU2)如何提高高度并发工作负荷的性能 |
KB3195888 - 修复:CPU 使用率高会导致 SQL Server 2016 和 2017 中的性能问题 SQL Server 2016 累积更新 2 |
| SQL Server 2017 | 查询存储 | 查询存储收集运行时统计信息时发生访问冲突 |
查询存储在 SQL Server 2017 中收集运行时统计信息时发生访问冲突 SQL Server 2017 累积更新 5 |
| SQL Server 2016 | 查询存储 | 查询存储在企业版和开发人员版以外的版本上自动数据清理失败 |
查询存储在 SQL Server 2016 企业版和开发人员版以外的版本上自动数据清理失败 SQL Server 2016 累积更新 1 |
| SQL Server 2016 | 查询存储 | 启用查询存储时 SQL Server 性能降低 |
KB4340759 - 修复:启用查询存储时 SQL Server 2016 性能缓慢 SQL Server 2016 SP2 累积更新 2 |
表 5:Linux 环境中 SQL Server 的建议改进、修复和配置指南
此表是 SQL Server 2017 发布后累积更新中发布的所有关键改进、建议和代码更改的编译。 查看 “症状” 列中的说明,并在适用环境中应用 “所需更新” 列中的所需更新(最好是包含特定修补程序的最新更新)。 可以查看列出的知识库文章,了解有关相应问题的详细信息。
这些建议不要求你将其他跟踪标志启用为启动参数,除非本文或此表中明确标注了它。 只需应用包含这些修补程序的最新累积更新或 Service Pack,即可受益。 如果在 Linux 上的 SQL Server 中使用 AlwaysOn 可用性组,请将 SQL Server 2017 升级到累积更新 8 或更高版本,因为此更新中提供了多项改进。 注意必需更新列中的 CU 名称表示可解决此问题的 SQL Server 第一个累积更新。 累积更新包含以前 SQL Server 更新版本中包含的所有修补程序和所有更新。 如 SQL Server 增量服务模型的更新中所述,现在建议你以持续主动的节奏安装最新的累积更新,以解决或阻止所描述的问题。 另请注意,从 SQL Server 2017 开始,引入了 SQL Server 的现代服务模型,因此不再提供服务包。
| 更改或改进摘要 | 详细信息和参考资料 |
|---|---|
| SQL 和 OS:审查在 Linux 上部署 SQL Server 时针对 OS 和 SQL Server 的各种最佳实践建议 | Linux 上 SQL Server 的性能最佳实践和配置指南 |
| SQL 代理改进:SQL Server 代理作业可以启动,而无需等待所有数据库恢复 |
SQL Server 代理作业可以启动,而无需等待所有数据库在 Linux 上的 SQL Server 2017 中恢复 SQL Server 2017 累积更新 9 |
| 存储 改进:在 SQL Server 2017 中启用“强制刷新”机制 |
在 Linux 上的 SQL Server 2017 中启用强制刷新机制 SQL Server 2017 累积更新 6 |
| 存储空间 改进:将 master 数据库和错误日志文件移动到另一个位置 |
KB4053439 - 改进:将 master 数据库和错误日志文件移动到 Linux 上的 SQL Server 2017 中的另一个位置 SQL Server 2017 累积更新 4 |
| AG 改进:SQL Server 中 Pacemaker 群集上的 Always On 可用性组改进 |
KB4339875 - SQL Server 中 Pacemaker 群集上 AlwaysOn 可用性组的改进 SQL Server 2017 累积更新 8 |
| 内存 改进:最小内存限制设置为 2 GB 以安装或启动 SQL Server |
KB4052969 - 修复:安装或启动 SQL Server 2017 时,最低内存限制被设为 2 GB SQL Server 2017 累积更新 2 |
| 内存 修复:启用 TF 834 后内存爬升阶段过长 |
KB4075203 - 修复:在 Linux 上的 SQL Server 2017 中启用 TF 834 后内存增长阶段过长 SQL Server 2017 累积更新 4 |
| 调度 修复:SQL Server 2017 中 Windows 和 Linux 调度程序映射之间的可移植性和性能不同 |
KB4043455 - FIX:SQL Server 2017 中 Windows 和 Linux 计划程序映射在可移植性和性能方面存在差异 SQL Server 2017 累积更新 1 |
| AD 身份验证 修复:无法基于属于父域的用户创建登录名 |
KB4073670 - 修复:无法基于属于 Linux 上的 SQL Server 2017 中父域的用户创建登录名 SQL Server 2017 累积更新 4 |
| AD Auth 更新:通过限制在地理范围较大的网络中可联系的 KDC,提高 SQL Server 性能 |
KB4463314 - 通过限制在地理范围广的大型网络中可联系哪些 KDC,更新可提高 SQL Server 性能 SQL Server 2017 累积更新 11 |
| AD 身份验证 修复:使用第三方 Active Directory 提供程序时 SQL Server 崩溃 |
KB4466962 - 修复:使用第三方 Active Directory 提供程序时 SQL Server 2017 崩溃 SQL Server 2017 累积更新 12 |
| TSQL 修复:在重启 SQL Server 后,NEWSEQUENTIALID 函数生成重复的 GUID |
KB4078097 - 修复:在 Linux 上的 SQL Server 2017 重启后,NEWSEQUENTIALID 函数生成重复的 GUID SQL Server 2017 累积更新 4 |
| 连接 修复:使用 TCP 协议连接时出现意外的内存消耗 |
KB4073045 - 修复:在 Linux 上将 TCP 协议连接用于 SQL Server 2017 时出现意外的内存消耗 SQL Server 2017 累积更新 4 |
| 连接 修复:启动时禁用 IPv6 时发生名称解析错误 |
KB4053392 - 修复:在 Linux 上的 SQL Server 2017 启动时禁用 IPv6 时发生名称解析错误 SQL Server 2017 累积更新 2 |
| 连接 修复:SQL Server 不侦听 mssql-conf 脚本指定的非默认 IP 地址 |
KB4053393 - 修复:Linux 上的 SQL Server 2017 不侦听 mssql-conf 脚本指定的非默认 IP 地址 SQL Server 2017 累积更新 2 |
| 设置 修复:应用 CU 时脚本升级失败 |
升级 SQL Server 2017 CU4 或更高版本而不在 Linux 上启用 SQL 代理时出错 SQL Server 2017 累积更新 6 |
| 数据库邮件 修复:使用非默认 TCP 端口时,数据库邮件 无法连接到 SQL Server |
KB4100873 - 修复:使用非默认 TCP 端口时,数据库邮件无法连接到 Linux 上的 SQL Server 2017 SQL Server 2017 累积更新 6 |
| 容器 修复:无法使用“docker stop”命令停止 SQL Server Linux Docker 容器 |
KB4093805 - 修复:无法使用“docker stop”命令停止 SQL Server Linux Docker 容器 SQL Server 2017 累积更新 5 |
| 容器 修复:在 Linux Docker 容器中运行 SQL Server 时出现内存不足错误 |
KB4347055 - 修复:在 Linux Docker 容器中运行 SQL Server 2017 时出现内存不足错误 SQL Server 2017 累积更新 10 |
| AG:如果使用 Pacemaker 包 1.1.18-11.el7 或更高版本,请调整 start-failure-is-fatal 属性 |
KB4229789 - SQL Server 2017 累积更新 7 请参阅Pacemaker 通知部分 |
| AG FIX:Pacemaker 可能会在操作超时时终止资源代理进程 |
KB4460203 - 修复:在 SQL Server 2017 AlwaysOn 可用性组中操作超时时,Pacemaker 可能会终止资源代理进程 SQL Server 2017 累积更新 11 |
| AG FIX:两个 SQL Server 实例是可用性组的主副本 |
KB4316791 - 修复:两个 SQL Server 实例是 SQL Server 中某个可用性组的主副本 SQL Server 2017 累积更新 8 |
| AG FIX:使用 AlwaysOn 可用性组时不必要的故障转移 |
KB4056922 - 修复:在 Linux 上的 SQL Server 2017 中使用 AlwaysOn 可用性组时不必要的故障转移 SQL Server 2017 累积更新 3 |
| AG FIX:Pacemaker 降级 Always On AG 的现有主副本,且从不提升新的主副本 |
KB4076982 - 修复:Pacemaker 在 Linux 上的 SQL Server 2017 中降级 Always On AG 的现有主副本,且永远不会将新的副本提升为主副本 SQL Server 2017 累积更新 4 |
| AG FIX:使用 AlwaysOn AG 时,Pacemaker 将未同步的副本提升为主副本 |
KB4091722 - 修复:在 Linux 上的 SQL Server 2017 中使用 AlwaysOn AG 时,Pacemaker 将非同步副本提升为主副本 SQL Server 2017 累积更新 5 |
| AG 修复:使用 Always On AG 时,将本地副本提升为主副本的 Pacemaker 失败 |
KB4230542 - 修复:在 SQL Server 2017 中使用 Always On AG 时,Pacemaker 将本地副本提升为主副本失败 SQL Server 2017 累积更新 7 |
| AG FIX:启动属于可用性组的数据库超时 |
KB4316790 - 修复:在 Linux 上的 SQL Server 中,属于可用性组的数据库启动超时 SQL Server 2017 累积更新 8 |
| AG FIX:SQL Server 故障转移群集实例或 Always On AG 由 Pacemaker 管理时发生不必要的故障转移 |
KB4316793 - 修复:SQL Server 2017 故障转移群集实例或 AlwaysOn AG 由 Pacemaker 管理时发生不必要的故障转移 SQL Server 2017 累积更新 8 |