iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >为什么读懂执行计划对你是那么重要
  • 226
分享到

为什么读懂执行计划对你是那么重要

2024-04-02 19:04:59 226人浏览 八月长安
摘要

一条俊俏的 sql 被一个懵懂的少年,扔向了深远的 tcp 隧道,少年苦苦等待,却迟迟等不来那满载而归。于是少年气愤,费尽苦心从度娘那边求来的一手好代码,等来的却是 timeout… 如果你也正在经历

一条俊俏的 sql 被一个懵懂的少年,扔向了深远的 tcp 隧道,少年苦苦等待,却迟迟等不来那满载而归。于是少年气愤,费尽苦心从度娘那边求来的一手好代码,等来的却是 timeout…

如果你也正在经历着这些苦涩的等待,那么该了解执行计划了;如果你自认为执行计划已经了如指掌,那么你该读一读 SQL Server 2017 新特性, adaptive query processing , 我蹩脚的将其翻译为 “自适应查询处理”。

在讲解概念之前,首先要对内存分配要有清晰的理解。一个查询请求在执行完毕之后,会有详细的内存分配指标和统计值附加在它的执行计划属性上。这些内存分配指标和统计值,分别是执行前预估的内存分配和最佳内存大小以及运行中被分配的内存大小。

如果一开始内存预估分配不准确,在执行的时候,就会分配不到合理的执行内存,导致整个查询期间,频繁的往 tempdb 里面去做spill(这个词真不好翻译,有缓存溢出的意思,即内存装不下,暂交给 tempdb 存储的意思), 将不能被当前内存空间容纳的数据缓存到 tempdb 里面,利用硬盘io来缓存数据,比起内存存储效率差了很多。因此在执行前就需要保证预估的数据量大小和需要的内存比较精确。 这里需要对统计信息 (statistics)做实时更新,以便预分配内存准确。

Brentozar 有个实例可以很好的解释和解决这个问题:
https://www.brentozar.com/blitzcache/tempdb-spills/

换句话来说,对即将执行的查询,分配足够多的内存,那么该查询的执行所需的数据,就完全可以在内存中处理,而不会溢出到硬盘。从而查询速度就快。

如果发生 spill 会有系统提示,这必须依靠执行计划才能铺捉到


为什么读懂执行计划对你是那么重要


在 SQL Server 2017 出来之前,需要掌握 DBA 知识才能意识和掌握处理这类事情。但 SQL Server 2017 之后,作为普通的一名开发者,完全可以忽略这类问题,因为 adaptive query processing 已经帮我们在幕后优化这类 SQL.

如上所说,SQL 执行完毕之后,会将执行计划与执行环境( execution context)一起缓存。Adaptive Query Processing 引入了 Batch Mode memory grant
feedback.  执行引擎通过对执行计划缓存属性的校验,可以发现请求的执行过程中,是否发生了 spill,对于发生 spill 的情况,引擎会对这份执行计划做重估,一旦发现如统计信息过期 等导致的 spill, 就会用最新的统计信息去重估执行计划,更新执行计划中分配内存的策略,要么降低内存分配提高并发中内存需要,要么提高内存,减少 spill 的发生概率。这些校验都回反馈给 memory grant feedback, 由 它采用最新的策略,去更新执行计划缓存。

上述讲的是自适应查询处理( Adaptive Query Processing)中 Batch Mode Memory Grant Feedback 的一个自动处理特性,被称为 memory grant feedback sizing. 除此之外,SQL Server 2017 还带来了更多的智能优化策略, 自动化完成 DBA 的部分工作。


您可能感兴趣的文档:

--结束END--

本文标题: 为什么读懂执行计划对你是那么重要

本文链接: https://www.lsjlt.com/news/45833.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL的执行计划是什么
    这篇文章给大家介绍MySQL的执行计划是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、前言当我们工作到了一定的年限之后,一些应该掌握的知识点,我们是必须需要去了解的,比如今天面...
    99+
    2024-04-02
  • SQL Server的执行计划是什么
    本文小编为大家详细介绍“SQL Server的执行计划是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“SQL Server的执行计划是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一...
    99+
    2023-07-06
  • 什么是SQLServer中的执行计划
    SQL Server中的执行计划是指数据库管理系统在执行SQL查询时生成的用于优化和执行查询的计划。执行计划是一个由数据库引擎生成的...
    99+
    2024-04-02
  • mysql执行计划指的是什么
    这篇文章主要讲解了“mysql执行计划指的是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql执行计划指的是什么”吧! ...
    99+
    2022-11-30
    mysql
  • oracle执行计划的方法是什么
    本篇内容主要讲解“oracle执行计划的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“oracle执行计划的方法是什么”吧!先从最开头一直往右看,直到...
    99+
    2024-04-02
  • 数据库执行计划原则是什么
    本篇内容介绍了“数据库执行计划原则是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • 数据库中cluster factor对执行计划的影响是什么
    这篇文章主要讲解了“数据库中cluster factor对执行计划的影响是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“数据库中cluster fact...
    99+
    2024-04-02
  • MySQL执行计划中的各个参数及含义是什么
    本篇文章给大家分享的是有关MySQL执行计划中的各个参数及含义是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧...
    99+
    2024-04-02
  • Oracle数据库中索引的常见执行计划是什么
    这篇文章将为大家详细讲解有关Oracle数据库中索引的常见执行计划是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。今天主要介绍下Oracle索引的常见执...
    99+
    2024-04-02
  • PostgreSQL中与执行计划相关的配置参数是什么
    本篇内容主要讲解“PostgreSQL中与执行计划相关的配置参数是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PostgreSQL中与执行计划相关的配置参...
    99+
    2024-04-02
  • 为什么要用debugger来调试代码?这样你能读懂各种源码!
    很多同学不知道为什么要用 debugger 来调试,console.log 不行么?还有,会用 debugger 了,还是有很多代码看不懂,如何调试复杂源码呢?这篇文章就来讲一下这篇文章就来讲一下为什么要用这些调试工具,希望对大家有所帮助!...
    99+
    2023-05-14
    debugger 前端 JavaScript Node.js
  • MySQL执行计划中的各个参数及含义指的是什么
    这期内容当中小编将会给大家带来有关MySQL执行计划中的各个参数及含义指的是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。查看执行计划可以使用explain + SQ...
    99+
    2024-04-02
  • NPM是什么,为什么它对Web开发人员如此重要?
    作为Web开发人员,我们经常会使用很多第三方的库和框架来完成我们的工作。而NPM就是我们常用的一个包管理器,它可以帮助我们管理这些库和框架的依赖关系,使我们的工作更加高效和方便。 NPM是什么? NPM是Node.js的包管理器。它是一个...
    99+
    2023-08-30
    索引 git npm
  • 什么是 IDE,为什么它对 Go 数据类型如此重要?
    随着计算机科学和软件工程的发展,编写和调试代码的工具也不断得到改进和创新。其中,集成开发环境(IDE)是一类非常流行的工具。IDE是一种软件应用程序,它可以帮助程序员编写、调试和测试代码。Go语言是一种强类型语言,它需要程序员在编写代码时...
    99+
    2023-09-03
    数据类型 npm ide
  • MySQL 执行计划explain与索引数据结构推演过程是什么
    了解MySQL 执行计划explain与索引数据结构推演过程是什么?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!先建好数据...
    99+
    2024-04-02
  • 为什么缓存对于PHP、Bash和NumPy都是重要的?
    缓存是一种提高计算机程序性能的技术手段,可以将频繁访问的数据、计算结果等存储在快速访问的存储介质中,以便加快程序的执行速度。在PHP、Bash和NumPy中,缓存的重要性也不言而喻。在本文中,我们将探讨缓存在这三种编程语言中的应用和实现。 ...
    99+
    2023-08-05
    bash numy 缓存
  • 为什么Python对象是Unix和NumPy中的重要概念?
    Python是一种高级编程语言,它的对象是在Unix和NumPy中的重要概念。Python的对象是指变量和数据类型,是Python编程语言的基本构建块。在本文中,我们将探讨为什么Python对象在Unix和NumPy中如此重要,以及如何使用...
    99+
    2023-07-01
    对象 unix numy
  • 为什么 Python 框架打包文件对于你的项目很重要?
    Python 是一种非常流行的编程语言,它具有简单易学、功能强大、可扩展性好等特点,因此在各种应用场景中得到广泛应用。在开发 Python 项目时,使用框架可以大大提高开发效率和代码质量。但是,如果不对 Python 框架打包文件进行管理,...
    99+
    2023-10-11
    框架 打包 文件
  • ASP 缓存 实时 索引:为什么它对你的网站很重要?
    ASP缓存实时索引:为什么它对你的网站很重要? 当我们访问一个网站时,我们希望能够快速地获得所需的信息,而不是花费很长时间等待页面加载。这就是为什么网站的性能对于用户体验和搜索引擎排名至关重要。在这个过程中,ASP缓存实时索引是一个非常重要...
    99+
    2023-07-03
    缓存 实时 索引
  • Go异步编程和重定向:为什么这对你的学习笔记很重要?
    Go语言是一种非常流行的编程语言,它具有高效、简单和可靠的特点,因此在Web开发和云计算领域得到了广泛的应用。在Go编程中,异步编程和重定向技术是两个非常重要的概念,如果你想成为一名高级的Go开发人员,那么你需要掌握这些技术。 异步编程是一...
    99+
    2023-07-23
    异步编程 重定向 学习笔记
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作