在前面两篇文章中( 浅谈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. freemarker动态生成word并将生成的word转为PDF,openoffice转换word乱码

    之前项目有个需求,需要先动态生成word内容,然后再预览生成word的内容(不能修改).整理一下,方便以后使用. 网上参考了好多大神的博客.具体也忘了参考谁的了,如有侵权,请告知修改. 思路一: 将目 ...

  2. Vue.js 学习笔记 第6章 表单与v-model

    本篇目录: 6.1 基本用法 6.2 绑定值 6.3 修饰符 表单类控件承载了一个网页数据的录入与交互,本章将介绍如何使用指令v-model完成表单的数据双向绑定. 6.1 基本用法 表单控件在实际业 ...

  3. 18 章 CSS 链接、光标、 DHTML 、缩放

    1.CSS 中链接的使用 2.CSS 中光标的使用 3.CSS 中 DHTML 的使用 4.CSS 中缩放的使用 1 18 8. .1 1 S CSS  中 链接的使用 超链接伪类属性 a:link ...

  4. 模型转换[yolov3模型在keras与darknet之间转换]

    首先借助qqwweee/keras-yolo3中的convert.py和tensorrt例子yolov3_onnx,并重新编写了代码,实现将darknet格式的yolov3的yolov3.cfg和yo ...

  5. @SuppressWarnings("rawtypes") 是什么含义

    简介:java.lang.SuppressWarnings是J2SE 5.0中标准的Annotation之一.可以标注在类.字段.方法.参数.构造方法,以及局部变量上.作用:告诉编译器忽略指定的警告, ...

  6. 百度地图点击地图显示地址详情的默认方法怎么关闭,去掉百度地图api图标信息

    去掉百度地图api图标信息 调用百度地图API时,如果想去掉百度的logo,只需要在css里设置: <style> .anchorBL{display:none} </style&g ...

  7. MVC详解:mvc是什么?为什么要用MVC?MVC工作原理以及MVC优缺点

    一.什么是MVC Model:模型层 View:视图层 Controller:控制层 MVC (Modal View Controler)本来是存在于Desktop程序中的,M是指数据模型,V是指用户 ...

  8. 跟我一起学opencv 第二课之图像的掩膜操作

    1.掩膜(mask)概念 用选定的图像,图形或物体,对处理的图像(全部或局部)进行遮挡,来控制图像处理的区域或处理过程.用于覆盖的特定图像或物体称为掩模或模板.光学图像处理中,掩模可以足胶片,滤光片等 ...

  9. golang的cms

    golang的cms 说说cms cms(内容管理系统)是建站利器.它的本质是为了快速建站.cms本质是一个后台服务站,使用这个后台,能很快搭建一个前台web站.在PHP的世界里面,CMS框架简直不要 ...

  10. JVM回收算法

    根搜索算法 原理:设立若干种根对象,当任何一个根对象到某一个对象均不可达时,则认为这个对象是可以被回收的.一般是对象持有的引用指向该对象不可达 在JAVA语言中,可以当做GC roots的对象有以下几 ...