代码改变世界

【SQLServer】SQLServer执行计划概览

2022-09-22 11:04  abce  阅读(745)  评论(0编辑  收藏  举报

在本系列文章中,我们将纵览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存储引擎执行的四个处理步骤总结如下:

提交SQL查询后,它将被分解为多个单独的部分并由SQL Server关系引擎检查以确保它以正确的方式编写,没有语法错误,这个过程称为查询解析。查询解析过程的结果就是解析树。 解析树是查询的内部表示,包括执行提供的查询所遵循的所有步骤,也称为抢占式操作。

在为DML查询创建解析树之后,Algebrizer将获取生成的树,并根据系统目录解析提交的查询引用的不同数据库对象的名称,以确保这些对象存在于数据库中并且用户有权执行查询。Algebrizer将生成一个查询树,将在下一步中使用,如下所示:

来自algebrizer的查询处理器树结果将输入到SQL Server执行计划的查询优化器。

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

SQL Server执行计划是SQL Server引擎执行查询所遵循的步骤的二进制表示。换句话说,它是由SQL Server查询优化器生成的最有效和成本最低的路线图,通过遵循不同的算法来执行提交的查询。该计划将基于绑定步骤产生的查询处理器树以及描述数据库对象内数据的分布和唯一性的数据库表和索引统计信息创建,确保将优化级别设置配置为full。这些统计信息帮助SQL Server查询优化器将扫描所有表行返回的记录数和使用不同索引返回的记录数与每个操作的成本进行比较。保持数据库表和索引的统计信息是最新的非常重要,以便能够创建最佳的执行计划。

为新提交的查询选择最高效的SQL Serve Execution Plan后,会被存储在Plan Cache内存中,这是存储查询计划的SQL Server缓冲区的一部分,以备将来重用,比每次执行都有一个新计划生成更高效。这是因为生成最佳执行计划是一个昂贵的过程。提交新查询时,SQL Server查询优化器将在计划缓存存储中搜索现有SQL Server执行计划,以便重复使用该查询。如果它没有找到可以重用的计划,查询优化器将通过前面描述的过程来创建一个新计划,从而花费更多时间来执行该查询。在使用不同参数频繁执行但仍使用相同缓存执行计划的存储过程的情况下,重用执行计划非常有益。在数据库上运行大量即时查询将阻止执行计划被重用,并且需要连续生成计划,在配置工作负载时应考虑这一点,我们将在本系列中详细讨论。

在特定情况下,SQL Server查询优化器更喜欢创建一个基本计划(也称为琐碎计划)来执行没有聚合或复杂计算的查询,而不是花费时间和资源来生成最有效的计划。之后,执行计划会在查询的执行阶段根据选择的计划被SQL Server存储引擎调度使用,并执行请求的数据检索、插入或修改过程,如下图:

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

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

准备好深入了解执行计划!

 

本文地址:https://www.cnblogs.com/abclife/p/16698109.html

原文地址:SQL Server Execution Plans overview