在前面两篇文章中( 浅谈SQL Server内部运行机制 and 浅谈SQL Server数据内部表现形式 ),我们交流了一些关于SQL Server的一些术语,SQL Sever引擎

与SSMS抽象模型,SQL Server内部存储机制和SQL Server内部体系结构等。讨论的这些问题,均可以归为一个问题,即"SQL Server是怎么执行客户端输入的SQL

语句的?”,其中,重点讨论了下图(SQL Server 体系结构)

然而,如果我们仅仅了解如上技术,是不具备一个资深DBA或数据库优化高手条件的,原因很简单,我们仅仅知道了SQL Server是怎么做的(SQL Server是如

何执行SQL语句的),但是我们并不知到是什么做的(是什么真正执行SQL语句?),只知其然,而不知其所以然。本篇文章,我们将重点论述是什么执行了SQL Server

体系结构逻辑?其实,执行SQL Server体系结构逻辑的核心组件便是SQLOS(简称SQL Server操作系统)。

一  SQL Server引擎组件


下图为SQL Server引擎核心主件,它大致包括五大部分:协议层(Protocol Layer),查询引擎(Query Processor),存储引擎(Storage Engine),公用组件(Utilities)和

SQL Server操作系统(SQLOS)。其中,除了Utilities和SQLOS两大部分外,其他部分在前面两篇文章中均已简要论述。本篇文章,我们将重点论述SQLOS。

(一)SQLOS

SQLOS是SQL Server和Windows OS(Windows  操作系统)瘦用户模式层,它主要负责一些底层的操作,如调度、处理I/O、内存管理、文件管理等。

当客户端(如在SSMS中输入)输入一条SQL语句(SELECT * FROM TableName),并基于TDS服务点,向SQL Server服务引擎提交该语句,SQL Sever引擎接收到

该语句后(准确来说,是先通过Protocol Layer协议层),查询引擎的命令分析器(Query Processor)先检查语法结构,若语法结构有错误,则直接将错误返回给客户端,

编译不通过;若语法正确,则命令分析器会去缓冲池的计划任务中寻找是否存在该语句的缓存,若存在,则命令分析器把该计划缓存交给查询执行器处理,若缓存池的计

划缓存中没有该计划任务,则命令解析器将会生成查询树,并将该SQL语句传递给查询优化器,查询优化器根据“最少开销算法”生成最优方案,然后传递给查询执行器;

流程到查询执行器后,查询执行器通过存储引擎的访问方法传递给存储引擎,存储引擎根据规则来配置和使用缓冲区管理器和事务管理器,接下来的工作,就交给

SQLOS来处理。

也许读者会问?为什么不直接用Windos OS来调度,而要另做一个SQLOS来执行调度呢?因为Windows OS是基于“抢占式调度算法的”,这种算法依据时间片来执行的,

这种算法并没有针对SQL Server进行优化,为了解决这个问题,微软决定SQL Server应自己处理自己的调度,并通过创建用户模式调度器(UMS)来解决该问题,UMS基于

“合作调度模式”算法被设计,这种算法指当执行中的线程需要等待其他资源才能执行时,不会因为时间片的轮询被中断,而是采用自动退出处理器的方式。

(二)线程三态

当在一个会话中执行请求时,SQL Server将这项工作(这个请求)分成一个或多个任务,每个任务由一个线程负责,任务被放在任务队列中,等待调度器去调度工作线程来执行,

原则上,调度器会为每个任务分配一个工作线程,这个工作线程就负责执行该任务。每个线程都有三个状态,即执行状态(Running)、挂起状态(Suspend)和可执行状态(Runable)。

  • 执行状态(Running):表示该线程正在执行任务
  • 挂起状态(Suspend):表示该线程因缺资源,被CPU强制挂起,如尝试修改被锁的表
  • 可执行状态(Runnable):表示线程具备了可执行任务的条件,如线程1执行完任务1后,被放在线程队列中,等待调度器分配任务

线程三个状态之间,存在如下转换关系:

1.具备执行条件的线程(Runnable),只要获得CPU,就可执行任务,从而从Runnable状态变成Running状态

2.正在执行的线程(Running)因缺必要资源,被cpu挂起,从而从Running状态变成Suspend状态

3.被挂起的线程(Suspend)因获得可执行的资源,被cpu唤醒执行,从而从Suspend状态变成Running状态

4.Runnable状态的线程,调度器可不让其执行(这里,暂且称之为Suspeng状态)

(三)Windows OS与SQL Server

当一台电脑刚生产出来,未装任何系统时,我们称之为裸机,对于裸机,我们是无法使用的,若要使用,则需要安装操作系统,如win10,

当我们在裸机上装上操作系统后,就可以通过操作系统来操作电脑了,如查看cpu,管理文件,管理内存等,不仅仅如此,我们还在操作系统上

安装相应的运用软件,如Visual Studio 2017,SQL SERVER 2014等。

二  SQL Server一个较为完整的调度流程


当SSMS向SQL Server引擎发起请求时,将会产生一个会话(Session),会话成功后,就可以执行SQL语句请求了。

1.当建立会话成功后,在会话中建立一个SQL语句请求时(如执行查询语句:SELECT * FROM TableName),会话会将一个请求分成一个或多个任务,并将这些任务放在任务队列中;

2.每个任务都会被分配一个或多个工作线程来执行;

3.SQLOS任务调度器通过从工作线程队列中调度线程来执行相应的工作任务

注意:SQLOS只是逻辑的,真的的执行还是Windows OS

以下是一些涉及到的相关类型表

sys.dm_exec_*:该类型表包含用户代码执行和关联连接直接或间接相关的信息,如请求表sys.dm_exec_requests,会话表sys.dm_exec_sessions

sys.dm_os_*:    该类型表包含操作OS相关的信息

sys.dm_tran_*:  该类型表包含事务相关信息

sys.dm_logpool_*:该类型包含日志相关信息

sys.dm_io_*:      该类型表包含IO相关信息

sys.dm_db_*:    该类型包含数据库相关信息

三  参考文献


【01】《Microsoft SQL Server 2012 Internals》Kalen Delaney,Bob Beauchemin,Conor Cunningham,Jonathan Kehayias,Benjamin Nevarez,Paul S.Randal

【02】《Microsoft SQL Server 2012 Administration》Tom Carpenter

【03】《SQL Server 2012 深入解析与性能优化 第3版》Christian Bolton,Justin Langford,Glenn Berry,Gavin Payne,Amit Banerjee,Rob Farley著

【04】《Microsoft SQL Server 2008 技术内幕:T-SQL查询》ltzik Ben-Gran,Lubor Kollar,Dejan Sarka,Steve Kass著

【05】《SQL Server 2008查询性能优化》Grant Fritchey,Sajal Dam著

四  版权区


  • 感谢您的阅读,若有不足之处,欢迎指教,共同学习、共同进步。
  • 博主网址:http://www.cnblogs.com/wangjiming/。
  • 极少部分文章利用读书、参考、引用、抄袭、复制和粘贴等多种方式整合而成的,大部分为原创。
  • 如您喜欢,麻烦推荐一下;如您有新想法,欢迎提出,邮箱:2098469527@qq.com。
  • 可以转载该博客,但必须著名博客来源。

解析SQL Server之任务调度的更多相关文章

  1. 深入解析SQL Server并行执行原理及实践(上)

    在成熟领先的企业级数据库系统中,并行查询可以说是一大利器,在某些场景下他可以显著的提升查询的相应时间,提升用户体验.如SQL Server, Oracle等, Mysql目前还未实现,而Postgre ...

  2. 全面解析SQL SERVER 的左右内连接

    SQL SERVER数据库的三种常用连接解析: 这里先给出一个官方的解释: left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右 ...

  3. 深入解析SQL Server并行执行原理及实践(下)

    谈完并行执行的原理,咱们再来谈谈优化,到底并行执行能给我们带来哪些好处,我们又应该注意什么呢,下面展开. Amdahl’s  Law 再谈并行优化前我想有必要谈谈阿姆达尔定律,可惜老爷子去年已经驾鹤先 ...

  4. 深入解析 SQL Server 高可用镜像实现原理

    作者:郭忆 本文由 网易云 发布. SQL Server 是 windows 平台 .NET 架构下标配数据库解决方案,与 Oracle.MySQL 共同构成了 DB-Engines Ranking ...

  5. 深入解析SQL Server高可用镜像实现原理

    本文来自网易云社区 SQL Server 是windows平台.NET架构下标配数据库解决方案,与Oracle.MySQL共同构成了DB-Engines Ranking的第一阵营,在国内外企业市场中有 ...

  6. 深入解析SQL Server并行执行原理及实践

    http://dbaplus.cn/news-21-431-1.html

  7. 深入解析SQL Server并行执行原理及实践(上) ---高继伟

    http://www.cnblogs.com/shanksgao/p/5497106.html

  8. SQL SERVER SQLOS的任务调度

    原文:SQL SERVER SQLOS的任务调度 原文地址:http://blogs.msdn.com/b/apgcdsd/archive/2011/11/24/sql-server-sqlos.as ...

  9. SQL Server技术内幕笔记合集

    SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...

随机推荐

  1. String字符串类总结

    object类 int hashCode() Object定义的hashCode方法能为不同对象返回不同的整数.实际上是把JVM给对象分配的地址转化为整数,确保了逻辑上的唯一性.而转化的散列算法,可能 ...

  2. python的学习笔记01_1 python2和python3的区别和环境

    1.python2 与 python3 区别: 关于这两个版本的区别,从宏观上来讲: python2:源码不标准,混乱(很多技术大佬写的都有自己语言的特点,看起来很不pythoner)由于python ...

  3. ArcGIS API for JavaScript 入门教程[6] 再讲数据——Map类之可操作图层

    [回顾]上篇交代了Map是各种图层(不管是实际上的图层还是由图层构成的对象)的容器,是数据的容器,并不作显示(由视图类绘制).并重点讲解了由图层构成的复杂图层——高程属性ground和底图属性base ...

  4. 【Chrome插件】去掉因使用jsonView插件的弹出窗口"请停用以开发者模式运行的扩展程序"

    前言 小编最近使用jsonView插件时,每次打开谷歌浏览器都会弹出下面的窗口,上网搜索,找到一个非常有效的方法. 解决方法 一.新建一个文本文档 二.复制代码 <# : @echo off c ...

  5. PostgreSQL数据库部署之 :PostgreSQL pgadmin4 the application server could not be contacted

    遇到问题: 尝试了删除c:\Users\your_name\AppData\Roaming\pgAdmin 之内的删除所有文件和文件夹, 然后在C:\Program Files\PostgreSQL\ ...

  6. Spring boot 配置文件详解 (properties 和yml )

    从其他框架来看 我们都有自己的配置文件, hibernate有hbm,mybatis 有properties, 同样, Spring boot 也有全局配置文件. Springboot使用一个全局的配 ...

  7. cmd命令重定向到剪切板

    Windows下 使用系统自带的 clip 命令. # 位于 C:\Windows\system32\clip.exe. 示例: # 将字符串 Hello 放入 Windows 剪贴板 echo He ...

  8. python word转pdf

    原理 使用python win32 库 调用word底层vba,将word转成pdf 安装pywin32 pip install pywin32 python代码 from win32com.clie ...

  9. scrapy爬虫 快速入门

    Scrapy 1. 简介 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络 ...

  10. hadoop rpc协议客户端与服务端的交互流程

    尽管这里是hadoop的rpc服务,但是hadoop还是做到了一次连接仅有一次认证.具体的流程待我慢慢道来. 客户端:这里我们假设ConnectionId对应的Connection并不存在.在调用ge ...