阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

SQL Server 2016改进了查询优化器

413次阅读
没有评论

共计 2306 个字符,预计需要花费 6 分钟才能阅读完成。

SQL Server 的前两个版本主要是通过提供新特性提高性能,而 SQL Server 2016 主要是改进本身已有的功能。

基数估计器

基数估计器是所有查询优化器的核心。它会查看被查询表的统计信息以及执行的操作,估计查询执行计划每一步的行数。有经验的 DBA 都知道,错误的基数估计会严重降低数据库的性能。可能导致的问题包括:

  • 选择了错误的索引;
  • 选择了错误的连接运算符(例如嵌套循环、哈希和合并);
  • 分配的内存过多,妨碍了其他查询;
  • 分配的内存过少,导致过多数据溢出到 tempdb。

考虑到基数估计器如此重要,你可能会惊讶,SQL Server 2012 使用的基数估计器基本上与 1998 年 SQL Server 7 引入的基数估计器相同。仅仅是两年之前,我们才看到了“SQL Server 查询优化器基数估计过程的第一次大规模重新设计”。要想深入了解那个版本,可以阅读白皮书《使用 SQL Server 2014 基数估计器优化查询计划》。

SQL Server 2016 就是以那项工作为基础构建的,当兼容性级别设置为 130 时,可以提供更准确的估计。不过,也可能出现退化,因此,在生产环境中更改兼容性级别之前,要对现有的数据库进行彻底地测试。

兼容性级别

你可能不熟悉这个术语,兼容性级别在 SQL Server 中有两个关键的作用。首先,可以确定哪些数据库特性可用。将数据库设置到一个比较低的兼容性级别上,就会无法使用一些较新的特性。通常,这不会带来升级问题,因为数据库的设计考虑了较老的特性集。

另外一件受兼容性级别控制的事情是使用哪个查询优化器和基数估计器。在经过精心调优的数据库中,为了降低性能退化的可能性,你可以选择一个较低的兼容性级别,强制 SQL Server 使用使用一个来自旧版本的查询优化器。

在某些情况下,你需要更细粒度的控制。例如,SQL Server 2016 允许你将兼容性级别设为 130,以使用所有的新特性,但仍然使用旧版本的基数估计器。这可以通过下面的命令设置:

ALTER DATABASE SCOPED CONFIGURATIONSET LEGACY_CARDINALITY_ESTIMATION = ON;

除了 SQL Server 2008 R2 之外,每个版本的兼容性级别都比上一个版本大 10。所以 SQL Server 2000 的兼容性级别为 80,而 SQL Server 2016 为 130。每个 SQL Server 版本都至少支持前面的两个版本。

多线程插入

在 SQL Server 2016 之前,Insert-Select 语句只在选择阶段是多线程的,而实际的插入操作是序列化的。现在,插入操作也可以是“多线程的或者可以有并行计划”。

内存优化表

内存优化表也具备了多线程的能力。

统计

SQL Server 2016 在统计方面有两个变化。第一个是在使用大表时更新频率更高了。

以前,当发生变化的行数达到 20% 时才会触发统计信息的自动更新,这对于大表来说是不合适的。从 SQL Server 2016(兼容性级别 130)开始,该阈值会与表的行数关联起来——表的行数越多,触发统计信息更新的阈值就越低。注意,在以前的版本中,该行为由 Trace Flag 2371 控制。

例如,如果一个表有 10 亿行,在以前的行为模式下,只有当发生变化的行数达到 2 亿时才会启动自动统计更新。在 SQL Server 2016 中,只需要 100 万行就可以触发自动统计更新。

继续讨论并行化。现在,当使用兼容性级别 130 时,统计信息可以“由一个多线程的进程抽样收集”。

外键约束

关系型数据库的一大卖点是能够将一个表和其他的表关联,并使用外键约束确保数据一致性。但那有一些开销,因此,在 SQL Server 2014 及更早的版本中,表的外键约束上限为 253。

你可能会觉得这个数很大了,但在一个大型数据库中,当你开始考虑包含审计列时,如“CreatedByKey”,就很容易达到那个限制了。为了缓解这个问题,微软将传入外键约束的上限增加到了 10000。就是说,你可以有数千个表同时引用某一个用户表。但有一些注意事项。

首先,这不适用于传出外键约束,也不适用于自引用表。这些情况的外键上限仍然是 200 多个。

其次,被引用的表不能使用 MERGE 操作修改;只允许进行 DELETE 和 UPDATE 操作。(理论上,SELECT 和 INSERT 操作也是允许的,但文档中并没有提到它们,因为它们不受传入外键约束的影响。)

注:“关系型数据库管理系统”中的“关系”一词实际上并不是指表之间的关系。更确切地说,它是一个数据科学术语,是指行里的每个值和同一行里的其他所有值的关系。在数据透视表中,每个单元格都是一个独立的和或平均值,它是一个非关系型表的例子。

连接和外键约束

前面已经讲过,外键约束是有成本的。如果你修改一个被外键约束潜在引用的行,那么数据库就需要进行检查,以确保没有违反约束。

在 SQL Server 2014 中,执行检查时会连接每个引用上述表的表。不难想象,开销很快就会变得非常大。为了解决这个问题,SQL Server 引入了一个新的“参照完整性运算器(Referential Integrity Operator)”。

新的查询执行运算器会就地执行参照完整性检查,比较修改的行和引用表里的行,以验证修改是否会破坏参照完整性。这会极大地减少此类计划的编译时间及相应的执行时间。

英文原文:Query Optimizer Improvements in SQL Server 2016

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-06/132130.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计2306字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7965986
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

  开源 MoneyPrinterTurbo 利用 AI 大模型,一键生成高清短视频! 在短视频内容...
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...
飞牛NAS玩转Frpc并且配置,随时随地直连你的私有云

飞牛NAS玩转Frpc并且配置,随时随地直连你的私有云

飞牛 NAS 玩转 Frpc 并且配置,随时随地直连你的私有云 大家好,我是星哥,最近在玩飞牛 NAS。 在数...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛 NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手! 作为动漫爱好者,你是否还在为...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...