沉沙
2018-12-28
来源 :
阅读 2382
评论 0
摘要:本篇教程探讨了SQLServer数据库入门之任务调度,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。
本篇教程探讨了SQLServer数据库入门之任务调度,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

<
本篇文章,我们将重点论述是什么执行了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_*: 该类型包含数据库相关信息
本文由职坐标整理发布,学习更多的相关知识,请关注职坐标IT知识库!
喜欢 | 0
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号