当前位置: 首页 > news >正文

SQL问题分析与诊断(8)——关键信息(2)

8.2. 关键信息

8.2.2. 警告

查询计划中,可能会看到出现于操作符上的小图标,特别是黄色或红色的感叹号。这些图标都是警告。并非每个警告都指示一个严重问题,但发现时请检查该图标的属性窗口,其将包含该警告图标的具体细节。

8.2.3. 评估与实际数据行数

请记住,查询计划中看到的所有成本都是基于基数评估,而非基于实际数据和执行数,这点非常重要。因此,这些成本也仅限于优化器对基数估计的精度。

深入研究和查看各个操作符成本前,查询计划中查看的第一件事情就是,检查评估和实际数据行数并确信其在合理误差范围内,以进一步确认与评估成本相关的技术评估的精度。有些场景下,会看到一个操作符的评估成本很高,因为优化器评估其将需要处理很多数据,而事实上其将仅需处理很少数据;当评估成本很低时,反之亦然。

如果评估和实际数据行差距明显,则需首先定位原因并修复。仅在此时,才可以查看操作符的成本。

​​​​​​​8.2.4. 操作符成本

确认评估基数精确后,就可以开始寻找成本最高的操作符,以将其作为确定初始工作重点的方法。通常,比较同一查询计划中两个操作符的成本是可用的。但是,不能拿不同查询计划中操作符的成本进行比较,因为成本评估基于数学模型,其并未提供这种不同查询计划操作符成本间进行直接对比的能力。

还有,某些操作符没有与其相关的成本,或者说其成本是固定的,这基于优化器内在的、未必精确的假设。例如,Compute Scalar运算符的成本总是非常低且固定,大概是0.0x(零点零几),这在通常情况下是OK的,但偶尔也会产生误导。

所以,虽然成本评估很重要且被采用,但需要注意的是,我们不能盲目将其认作查询计划内精确测量的实际成本。

​​​​​​​8.2.5. 数据流

查询计划中的数据流由连接不同操作符的箭头进行定义。这些箭头因其表示操作符间数据的流动而通常被参考为管道。管道的粗细表示实际查询计划中的实际数据量或评估查询计划中的评估数据量。一个粗管道表示正在处理较多数据,而一个细管道表示较少数据被处理。某些场景下,实际查询计划中某些操作符并不报告实际数据行数,因此,采用评估数据行数来设置管道大小。

阅读查询计划时,不仅要查看寻找“粗管道”,而且还需注意管道厚度的突然变化。例如,查询计划中开始很粗的管道到左边突然变得很细,这说明较晚的过滤正在发生。细管道从右至左变得越来越粗,说明查询正在一某种方式大量增加了数据。

​​​​​​​8.2.6. 读操作符

这里,我们需要关注的读操作符是扫描和搜寻。扫描操作符(索引扫描或表扫描)只是某种读取索引或表中所有数据页的一个指示器。但是,这种读取经常指示正在读取很多数据行。

搜寻操作符是另一种利用索引结构识别索引页扫描起始点或终止点的一个指示器。搜寻操作符多数场景下指示正在读取少量数据行。

大部分人读取查询计划时都有“扫描糟,搜寻好”的意识。其实,这些操作从定义角度无所谓好坏。查询计划中需要查找的是那些获取有限数据集合(有时指示丢失或性能差的索引)或获取巨量数据集的高成本扫描。

​​​​​​​8.2.7. 陌生操作符

阅读查询计划的过程中,当看到从未见过的操作符,或者看到见过也认识但不清楚其为何出现于此的操作符时,我们需要搞清楚这些操作符的概念和具体含义,并理解其在该查询计划中的具体行为及其对执行计划的影响。

http://www.dtcms.com/a/108305.html

相关文章:

  • 数据结构----栈
  • LangChain/Eliza框架在使用场景上的异同,Eliza通过配置实现功能扩展的例子
  • 【力扣hot100题】(036)二叉树的最大深度
  • Spring Boot 工程创建详解
  • 小游戏中Enable Exceptions的各选项有何区别
  • 基于开源AI大模型与S2B2C模式的线下服务型门店增长策略研究——以AI智能名片与小程序源码技术为核心
  • 从静态到动态:D * 算法如何革新机器人路径规划
  • 图形渲染: tinyrenderer 实现笔记(Lesson 1 - 4)
  • ATEngin开发记录_1_在Vsiual Studio2022中使用ReShaper创建类模板
  • 理解激活函数,多个网络层之间如何连接
  • 红宝书第二十七讲:详解WebAssembly与asm.js如何实现高效执行
  • 七种分布式ID生成方式详细介绍--Redis、雪花算法、号段模式以及美团Leaf 等
  • 二分查找与二分答案入门c++
  • 如何对后端API进行负载测试
  • vue将组件中template转为js
  • codeforces C. Creating Keys for StORages Has Become My Main Skill
  • systemd服务开机启动(code=exited, status=203/EXEC)错误,由于SELinux 开启安全模式
  • AI知识补全(十五):AI可解释性与透明度是什么?
  • 详细说明一下C++中的static关键字
  • 火山引擎coze用户市场
  • 使用PyTorch实现GoogleNet(Inception)并训练Fashion-MNIST
  • 【华为OD技术面试真题 - 技术面】- Java面试题(17)
  • 移动端六大语言速记:第1部分 - 基础语法与控制结构
  • 网络安全协议知识点总结
  • 网络空间安全(49)Python基础语法
  • 三.微服务架构中的精妙设计:服务注册/服务发现-Eureka
  • JavaScript reduce 方法详解
  • 视图函数的应用
  • 数据仓库项目启动与管理
  • App与Page构造器