适用于具有高性能工作负载的 SQL Server 2017 和 SQL Server 2016 的推荐更新和配置选项
本文介绍可用于 SQL Server 2016 及更高版本的性能改进和配置选项的列表。
原始产品版本: Windows 上的 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 使用率较高 |
由于其他缓存或内存 clerk 中的增长,计划缓存中的条目将被逐出。 由于查询频繁重新编译,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 中使用许多频繁的短事务的工作负荷可能消耗的 CPU 数可能比 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 实例性能的一般注意事项和最佳做法
查看知识库文章或联机丛书资源列中的内容,并考虑在“建议的操作”列中实施指导。
知识库文章或联机丛书资源 | 建议的操作 |
---|---|
配置 max degree of parallelism 服务器配置选项 | sp_configure 根据知识库文章,使用存储过程对 SQL Server 实例配置最大并行度服务器配置选项进行配置更改。 |
按版本 列出的计算容量限制 SQL Server 2012 的许可证核心限制 | 具有服务器和客户端访问许可证(CAL)许可的企业版限制为每个 SQL Server 实例 20 个核心。 基于内核的服务器许可模型没有限制。 请考虑将 SQL Server 版本升级到适当的 SKU 以使用所有硬件资源。 |
使用均衡电源计划时 Windows Server 性能降低 | 查看文章,并与 Windows 管理员协作,实现本文的“解决方案”部分中列出的解决方案之一。 |
针对即席工作负荷进行优化服务器配置选项 FORCED PARAMETERIZATION |
由于其他缓存或内存 clerk 中的增长,计划缓存中的条目将被逐出。 当缓存达到其最大条目数时,还可能会遇到计划缓存逐出。 除了上面讨论的跟踪标志 8032 之外,请考虑针对即席工作负荷服务器选项和 FORCED PARAMETERIZATION 数据库选项进行优化。 |
如何在 SQL Server 中减少缓冲池内存的分页 SQL Server 2012 及更高版本中的内存配置和大小调整注意事项 |
将 “启用内存中的锁页”选项(Windows) 用户权限分配给 SQL 服务启动帐户。 请参阅 如何在 SQL Server 2012 中启用“锁定页面”功能。 将最大服务器内存设置为大约 90% 的总物理内存。 确保 服务器内存配置选项 设置仅占配置为使用关联掩码设置的节点的内存。 |
SQL Server 和大型页说明... | 如果服务器具有大量内存,尤其是对于分析或数据仓库工作负荷,请考虑启用 跟踪标志 834 。 请记住, 列存储索引与 SQL Server 中的大页内存模型的互操作性。 |
与大型安全缓存关联的查询性能问题 当 TokenAndPermUserStore 缓存的大小在 SQL Server 中增长时,查询需要更长的时间才能完成运行 DBCC TRACEON - 跟踪标志 (Transact-SQL) |
如果安全缓存增长到较大大小,并且遇到性能问题和旋转锁争用,请考虑启用跟踪标志 T4610 和 T4618 以减少 TokenAndPermuserStore 的最大大小。 |
ALTER WORKLOAD GROUP KB3107401 - SQL Server 2012 中提供了新的查询内存授予选项(min_grant_percent和max_grant_percent) | 如果有许多查询耗尽了大型内存授予,请将资源调控器配置中默认工作负荷组的默认工作负荷组从默认 25% 减少 request_max_memory_grant_percent 到较低的值。 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 -Update 以在 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 或更高版本受益于以下改进: |
Query Store 最佳实践 | 将捕获模式设置为“自动” 启用跟踪标志 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 - 它只需运行速度更快:始终运行日志传输减少上下文交换机 SQL Server 2016 - 它只需运行速度更快:Always On 可用性组 Turbocharged |
可用性组 | SQL Server 2016 使用改进的压缩算法和日志块数据的并行压缩。 | SQL 2016 - 它只需运行速度更快:始终使用并行压缩/改进的算法 |
可用性组 | SQL Server 2016 利用基于 AES-NI 加密功能的硬件,通过一个重要因素提高 AlwaysOn 日志传送可伸缩性和性能。 | SQL 2016 - 它只需运行得更快 - 始终使用 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 ...选择 |
性能 | SQL Server 2016 对表的各个分区启用 TRUNCATE 操作,以便存档较旧的分区。 | SQLSweet16!,第 5 集:TRUNCATE 所选分区 |
性能 | SQL Server 2016 根据需要动态调整内存中优化数据库辅助角色池的大小。 | SQL 2016 - 它只需运行速度更快:内存中优化的数据库辅助角色池 |
Tempdb | 分配是 tempdb,用户数据库使用统一的完整盘区。 tempdb 中的文件增长同时发生于所有文件。 | SQL 2016 - 它只需运行速度更快:-T1117 和 -T1118 TEMPDB 和用户数据库的更改 |
Tempdb | 数据库引擎安装程序会自动计算 tempdb 数据文件的数量。 | SQL 2016 - 它只需运行速度更快:自动 TEMPDB 配置 |
存储 | 数据库引擎使用0xC0标记,而不是0x00事务日志文件初始化。 | SQL 2016 - 它只需运行速度更快:LDF 标记 |
存储 | 对于大型内存服务器和大量写入环境,间接检查点的性能更好。 | SQL 2016 - 它只需运行速度更快:间接检查点默认值 |
存储 | 高事务速率可以从多个日志写入器将日志缓存刷新到事务日志中获益。 | SQL 2016 - 它只需运行得更快:多个日志编写器辅助角色 |
备份和还原 | 如果指定 MAXTRANSFERSIZE 大于 65536,则可以使用 TDE 压缩备份以加密数据库。 | SQLSweet16!,第 1 集:已启用 TDE 的数据库的备份压缩 |
SQL OS | 动态分区内存对象以减少内存对象争用。 | SQL 2016 - 它只需运行速度更快:动态内存对象 (CMemThread) 分区 |
SQL OS | SQL Server 2016 监视辅助角色的量子使用模式,使所有辅助角色都能获得公平待遇并提高可伸缩性。 | SQL 2016 - 它只需运行得更快:更新的计划算法 |
SQL OS | 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 - 它只需运行速度更快:本机空间实现(s) |
空间 | SQL Server 2016 通过本机空间验证改进了使用空间数据的 TVP 的可伸缩性。 | SQL 2016 - 它只需运行得更快:具有空间列的 TVP(s) |
空间 | 本机和 TVP 空间改进使 SQL Server 能够优化空间数据的索引创建和分割。 | SQL 2016 - 它只需运行得更快:空间索引生成速度更快 |
MSDTC | 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 2016SQL Server 2017 | 备份和还原 | 启用了 TDE 的数据库的日志备份失败,如果使用了非默认 MAXTRANSFERSIZE,则查找过去用于加密 DEK 的旧证书副本时间歇性返回错误 33111 | 修复:在 SQL Server 中备份 TDE 加密的数据库时出现错误 33111 和 3013 SQL Server 2017 累积更新 2 SQL Server 2016 SP1 累积更新 6 SQL Server 2016 累积更新 9 |
SQL Server 2016SQL Server 2017 | 备份和还原 | 在 SQL Server 中完成 TDE 压缩备份速度缓慢的 RESTORE HEADERONLY 语句 | 修复:SQL Server 中 TDE 压缩备份的 RESTORE HEADERONLY 语句速度较慢 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 2016SQL Server 2017 | 备份和还原 | 使用 SQL Server 中 4 K 扇区上的压缩还原备份时还原性能缓慢 | KB4088193 - 修复:在 SQL Server 中还原磁盘上的压缩备份时还原性能缓慢 SQL Server 2016 SP1 的累积更新 9 SQL Server 2016 SP2 的累积更新 1 SQL Server 2017 累积更新 7 |
SQL Server 2016SQL Server 2017 | 备份和还原 [VDI] | 使用 VDI 客户端时,TDE 压缩备份的还原不成功 | SQL Server 2017 累积更新 7 SQL Server 2016 SP2 的累积更新 1 SQL Server 2016 SP1 的累积更新 9 |
SQL Server 2016SQL Server 2017 | 备份和还原 [VDI] | 通过 VDI 接口还原已启用备份压缩的 TDE 数据库失败,并返回 OS 错误 38 | SQL Server 2017 的累积更新 8 [VSTS Bug # 10936552] SQL Server 2016 SP2 RTM [VSTS Bug # 10698847] |
SQL Server 2016SQL Server 2017 | 备份和还原 [VSS] | 通过基于 VSS 的应用程序备份可用性数据库可能会在 SQL Server 中失败 | 修复:通过基于 VSS 的应用程序备份可用性数据库可能会在 SQL Server 中失败 SQL Server 2017 累积更新 1 SQL Server 2016 RTM 累积更新 9 SQL Server 2016 SP1 累积更新 5 SQL Server 2014 SP2 累积更新 8 |
SQL Server 2016SQL 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 2016SQL Server 2017 | AlwaysOn AG 列存储 | 使用非聚集索引查找检索数据的查询需要更长的时间 | 修复:使用非聚集索引查找的数据检索查询在 SQL Server 中花费更长的时间 SQL Server 2017 累积更新 2 SQL Server 2016 Service Pack 1 的累积更新 6 SQL Server 2016 累积更新 9 |
SQL Server 2016SQL Server 2017 | Always On AG | 包含堆表的可用性组的次要副本中的并行重做会生成运行时断言转储或运行 SQL Server 的服务器崩溃并返回访问冲突错误 | 修复:包含堆表的可用性组的次要副本中的并行重做会生成运行时断言转储或 SQL Server 崩溃并出现访问冲突错误 SQL Server 2016 SP1 的累积更新 9 SQL Server 2016 SP2 的累积更新 1 SQL Server 2017 累积更新 6 |
SQL Server 2016 | Always On AG | 在 SQL Server Always On 可用性组的次要副本中使用并行重做时,将发生断言 | 修复:在 SQL Server Always On 可用性组的次要副本中使用并行重做时,将发生断言 SQL Server 2016 累积更新 3 |
SQL Server 2016SQL Server 2017 | Always On AG | 处理读取查询时 AlwaysOn AG 的性能缓慢 | 修复:在 SQL Server 中处理读取查询时 AlwaysOn AG 速度缓慢 SQL Server 2017 累积更新 8 SQL Server 2016 SP2 的累积更新 1 SQL Server 2016 SP1 的累积更新 9 |
SQL Server 2017 | Always On AG | 改进以减少Linux 上的 SQL Server中可用性组的故障转移持续时间 | 改进以减少Linux 上的 SQL Server中可用性组的故障转移持续时间 SQL Server 2017 累积更新 8 |
SQL Server 2017 | Always On 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 2016SQL 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 2016SQL 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 2016SQL 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 2016SQL Server 2017 | 内存中 OLTP | 当数据库包含内存优化表时,数据库恢复需要很长时间 | 在 SQL Server 2017 和 2016 中恢复具有内存优化表的数据库需要很长时间 SQL Server 2017 累积更新 4 SQL Server 2016 SP1 累积更新 7 |
SQL Server 2016SQL Server 2017 | tempdb | PFS 页轮循机制算法改进 | SQL Server 2016 中的 PFS 页轮循机制算法改进 SQL Server 2017 累积更新 7 SQL Server 2016 SP2 的累积更新 1 SQL Server 2016 SP1 的累积更新 9 |
SQL Server 2016SQL 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 2016SQL Server 2017 | tempdb | 具有命名约束的重 tempdb 争用表更改需要临时表的同步删除 | 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 2016SQL 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 2016SQL Server 2017 | tempdb | 使用许多频繁、短事务的工作负荷可能会消耗更多的 CPU | 在 SQL Server 2017 和 2016 中使用许多频繁的短事务的工作负荷可能会消耗比 SQL Server 2014 更多的 CPU SQL Server 2017 累积更新 4 SQL Server 2016 SP1 累积更新 2 |
SQL Server 2016SQL 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 的新式服务模型,以便不再提供 Service Pack。
更改或改进摘要 | 详细信息和参考资料 |
---|---|
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 群集上 AlwaysOn 可用性组的改进 | 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 身份验证 更新:通过限制可在地理大型网络中联系哪些 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 降级 AlwaysOn AG 的现有主副本,并且永远不会提升新副本 | KB4076982 - 修复:Pacemaker 在 Linux 上的 SQL Server 2017 中降级 AlwaysOn AG 的现有主副本,永远不会提升新副本 SQL Server 2017 累积更新 4 |
AG FIX:使用 AlwaysOn AG 时,Pacemaker 将未同步的副本提升为主副本 | KB4091722 - 修复:在 Linux 上的 SQL Server 2017 中使用 AlwaysOn AG 时,Pacemaker 将非同步副本提升为主副本 SQL Server 2017 累积更新 5 |
AG 修复:使用 AlwaysOn AG 时,将本地副本提升到主要副本的 Pacemaker 失败 | KB4230542 - 修复:在 SQL Server 2017 中使用 AlwaysOn 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 |