SQL Server 执行计划(1)- 概述

2021/6/14 2:24:36

本文主要是介绍SQL Server 执行计划(1)- 概述,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

在本系列文章中,我们将导航 SQL Server 执行计划的海洋,从定义执行计划的概念开始,遍历执行计划的类型、组件和运算符,分析执行计划,我们将完成如何保存和管理执行计划。

SQL Server 执行计划概述

当你提交一个 T-SQL 查询时,你告诉 SQL Server 引擎你想要什么,但没有指定如何为你做。在将 T-SQL 查询提交给 SQL Server 数据库引擎和将查询结果返回给最终用户之间,SQL Server 引擎将执行四个内部查询处理操作,将查询转换为便于 SQL Server 存储引擎轻松获取请求数据的格式,使用操作系统分配给 SQL 引擎的进程来处理提交的查询。

前三个过程;解析(Parsing)、代数化(Algebrizing)和优化(Optimizing)将由 SQL Server 关系引擎执行。另一方面,执行步骤由 SQL Server 存储引擎执行。如果提交的查询不是数据操作语言 (DML) 语句,例如 CREATE TABLE 或 ALTER TABLE,则无需优化该查询,因为 SQL Server 引擎只有一种直接的方式来执行该操作。SQL Server 关系引擎和 SQL Server 存储引擎执行的四个处理步骤总结如下:

QL Server 执行计划概要

解析(Parsing)/代数化(Algebrizing)

提交 SQL 查询后,它将被分解为单独的部分,并由 SQL Server 关系引擎检查以确保它以正确的方式编写,没有语法错误,例如,在称为Query Parsing的过程中。查询解析过程的结果就是解析树。解析树是查询的内部表示,包括执行提供的查询所遵循的所有步骤,也称为抢占操作。在为 DML 查询创建解析树后,Algebrizer将获取生成的树并根据系统目录解析提交的查询所引用的不同数据库对象的名称,以确保这些对象存在于数据库中并且用户具有执行查询的权限。Algebrizer 会生成一个查询树,供下一步使用,如下图:
代数器查询树
来自代数器处理(algebrizer processing)的查询处理器树结果将作为查询优化器(Query Optimizer)的输入用于 SQL Server 执行计划。

优化(Optimizing)

查询优化器是(Query Optimizer)负责对 SQL Server 关系引擎的工作方式进行建模的功能,它通过创建最有效的计划来执行所提供的查询,以使用最低的资源消耗。这称为基于成本的执行计划。查询优化器会尝试不同的执行方法,读取所有表行,使用不同的索引、连接和顺序,并在不同的资源消耗场景之间进行折衷,直到最终以尽可能少的成本得到最优的执行计划。每个候选执行计划的总成本是通过为每个操作分配一个权重,然后将所有这些操作的成本加在一起来计算的。

SQL Server执行计划是 SQL Server 引擎执行查询所遵循的步骤的二进制表示形式。换句话说,它是最高效、成本最低的路线图,由 SQL Server 查询优化器(Query Optimizer)生成,通过遵循不同的算法来执行提交的查询。该计划将基于绑定步骤产生的查询处理器树以及描述数据库对象内数据分布和唯一性的数据库表和索引统计信息创建。这些统计信息帮助 SQL Server 查询优化器比较扫描所有表行返回的记录数和使用不同索引返回的记录数,以及每个操作的成本。

为新提交的查询选择最高效的 SQL Serve 执行计划后,将存储在执行计划缓存(Plan Cache)中,它是存储查询计划的 SQL Server 缓冲区的一部分,以供将来重用,这比每次执行时生成新计划更有效,因为生成最佳执行计划是一个耗时的过程。提交新查询时,SQL Server 查询优化器将在执行计划缓存(Plan Cache)中搜索现有 SQL Server 执行计划,以便重新使用该查询。如果找不到可以重用的计划,查询优化器将通过前面描述的过程来创建新计划,从而花费更多时间来执行该查询。所以参数化的数据库存储过程频繁执行时非常高效,因为每次执行时无需重新生成执行计划。反之,在数据库上大量执行AdHoc查询,会阻止执行计划的重用并需要持续的计划生成。

在一些特定情况下,SQL Server 查询优化器更喜欢创建一个基本计划,也称为平凡计划(Trivial plan),来执行没有聚合或复杂计算的查询,而不是花费时间和资源来生成最有效的执行计划。

执行(Execution)

SQL Server 存储引擎会在查询的执行阶段(Execution stage)根据选择的计划,执行请求的数据检索、插入或修改过程,如下所示:
查询计划执行

总结

SQL Server 数据库管理员经常依赖 SQL Server 执行计划来对 T-SQL 查询的性能进行故障排除并定位性能最差的部分。执行计划还为 DBA 提供了不同问题的答案,例如为什么查询速度慢且耗时长,消耗大量 CPU、内存或 I/O 资源,或者为什么在查询中不使用此索引。此外,执行计划帮助DBA 以更高效的方式编写查询并选择最合适和最高推荐的索引以加快数据检索。为了能够使用执行计划来调整查询的性能,DBA 应该具备创建执行计划、了解其不同类型以及分析其组件和运算符所需的技能。

现在我们清楚地了解了什么是 SQL Server 执行计划以及它是如何由 SQL Server 查询优化器在内部生成的。我们准备跳到本系列的下一篇文章,讨论不同类型的执行计划,实际、估计或实时计划以及图形、文本或 XML 格式。准备深入了解执行计划!
查询的 SQL Server 执行计划

参考

Display an Actual Execution Plan

系列目录

SQL Server 执行计划(1) - 概述
SQL Server 执行计划(2) - 执行计划类型
SQL Server 执行计划(3) - 如何分析 SQL 执行计划图形组件
SQL Server 执行计划(4) -执行计划运算符1
SQL Server 执行计划(5) -执行计划运算符2
SQL Server 执行计划(6) -执行计划运算符3
SQL Server 执行计划(7) -执行计划运算符4
SQL Server 执行计划(8) -使用 SQL 执行计划进行查询性能调优
SQL Server 执行计划(9) -保存和比较SQL 执行计划



这篇关于SQL Server 执行计划(1)- 概述的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程