SQL Server 如何执行一个查询

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:

   大家好,欢迎来到第1周的SQL Server性能调优培训。在我们进入SQL Server性能调优里枯燥难懂的细节内容之前,我想通过讲解SQL Server如何执行一个查询来建立基础。这个部分非常重要,因为接下来的培训中我们会以这些概念来加深我们对SQL Server的认识。

当我们执行一个查询时,在SQL Server中最重要的组件有哪些,下面这张图片可以给大家一个概观的认识。

        可以看到,SQL Server内部分成了2个部分:关系引擎存储引擎关系引擎中最大的一个组件是查询优化器。查询优化器唯一和仅有的任务是把我们传入的查询语句生成实际的执行计划。

 

读取数据

        我们提交给SQL Server 的查询,通过协议层传给命令分析器。命令分析器会检查我们是否提供了一个语法正确的语句,我们所提到的表和列在数据库里是否存在。命令分析器会生成可以重现我们查询的查询树。查询树会被查询优化器用来生成执行计划。

        然后编译后的执行计划会提交给查询执行器。查询执行器的任务是执行执行计划。但是为了以后的重用,首先它会把编译好的执行计划放在执行计划缓存区进行缓存。在SQL Server 中计划缓存是个强大同时又是一个非常危险的概念。我们会在第10周讨论计划缓存的时学到更多的细节。

        执行计划被缓存后,查询执行器与存储引擎进行互动,并在执行计划里执行每个操作。当我们在执行计划里访问数据时,存取方法会向缓冲区管理器读取我们想要指定页。下周我们将讨论SQL Server中页的更多细节。现在你只要知道页是8Kb的缓存,在那里存放着我们的表和索引数据。缓冲管理器管理着缓冲池(缓冲池包含执行计划缓存区和数据缓存区),那里存放着我们8kb大小的页。缓冲池是SQL Server的主要内存消耗,它的大小我们可以通过服务器属性->内存->最小、最大服务器内存(MB)来配置。

        当请求的页面已经被存在缓冲池时,页会被立即读取。在SQL Server里这个被称为逻辑读如果请求的页没存在缓冲池,缓冲区管理器会发起异步I/O操作把请求的页从我们的存储子系统中读到缓冲池,这个被称为物理读。在异步I/O操作期间,我们的查询需要一直等到操作结束才继续。在第22周我们会讨论等待等待统计的更多细节。

        一旦页被读取到缓冲池,页会被请求的访问方法取走。当执行计划执行完成后,产生的数据会通过协议层返回给提交查询的程序。  

 

修改数据

当我们与使用修改数据的TSQL语句(INSERT,UPDATE,DELETE,MERGE)打交道时,存储引擎同样与事务管理器进行交互。事务管理器把执行事务中描述我们所做的改变通过事务日志写到事务文件。当这些日志记录写好后,事务就可以提交了。事务执行有多快,你的数据修改就有多快。

在内存中被修改的页通过称为检查点过程写回存储子系统。默认情况下,检查点每一分钟从缓冲区管理器请求所有的脏页并执行一次。脏页就是在内存里被修改,但还没有写回存储的。一旦脏页被写回存储,这个页就会被标记为干净页。

小结

从上面的描述我们可以看到,当你执行一个SQL语句查询时,SQL Server里面发生了很多不同的事情。如果你想了解更多SQL Server里各个组件间的相互操作,我强烈推荐看下SQL Server团队成员Remus 


本文转自Woodytu博客园博客,原文链接:http://www.cnblogs.com/woodytu/p/4465649.html,如需转载请自行联系原作者

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
1天前
|
SQL 数据库
SQL数据库基础语法-查询语句
SQL数据库基础语法-查询语句
|
1天前
|
SQL 安全 数据库
SQL Server 备份和还原
SQL Server 备份和还原
|
1天前
|
SQL 存储 安全
SQL Server 权限管理
SQL Server 权限管理
|
1天前
|
存储 SQL
SQL Server 存储过程 触发器 事务处理
SQL Server 存储过程 触发器 事务处理
|
1天前
|
SQL 自然语言处理 搜索推荐
SQL Server 索引和视图
SQL Server 索引和视图
|
1天前
T-sql 高级查询( 5*函数 联接 分组 子查询)
T-sql 高级查询( 5*函数 联接 分组 子查询)
|
1天前
|
机器学习/深度学习
T-sql 各种查询命令
T-sql 各种查询命令
|
1天前
|
SQL 数据库
Sql server 表管理(创建 修改 删除)
Sql server 表管理(创建 修改 删除)
|
7天前
|
SQL 机器学习/深度学习 数据采集
数据分享|SQL Server、Visual Studio、tableau对信贷风险数据ETL分析、数据立方体构建可视化
数据分享|SQL Server、Visual Studio、tableau对信贷风险数据ETL分析、数据立方体构建可视化
|
7天前
|
SQL 关系型数据库 数据库
SQL 42501: Postgresql查询中的权限不足错误
SQL 42501: Postgresql查询中的权限不足错误