上次我们说到,sql server 2012的企业版的任务调度流程,一直到给新连接分配了scheduler,都是与以前的版本算法是一致的,只有在进行任务分配的时候,算法才有了细微的调整。

新算法的目的是尽量减小在同一NUMA节点内随机分配scheduler带来的性能影响(原来的算法也不能称为随机,因为是按负载系数进行分配的,但是由于负载系数会不确定,所以暂时将原分配算法定性为:随机~~)

我们知道,在sql server 2008版本以后,引入了Resource Governor(后文简称RG),在2012版本中,微软就将Resource Governor这个特性应用到了任务调度算法中来,这里需要注意的是,如果没有开启RG功能,那么sqlos将会把default RG设置应用到算法中。

PS:如果不知道Resource Governor是什么的同学请参考MSDN:https://msdn.microsoft.com/en-us/library/bb933866(v=sql.100).aspx

如果对RG有了解,就会知道RG是一个对资源进行分配的设置选项,它可以对CPU或内存的最大、最小可用资源进行配置。

每个scheduler也都有自己的目标资源池 ,每个SCHEDULER的资源池大小基本等于RG最大配置/scheduler总数的平均值

scheduler cpu pool=max cpu/scheduler count

图为default的RG设置

假设共有4个可用的scheduler,那么每个sheduler的可用cpu上限大概就是25%
 
必须要注意的一点是,新的调度算法并没有将当前CPU使用率做为一个参考指标,换句话说,有可能一个scheduler已经占用了CPU80%的计算资源,但是在进行任务调度的时候,还是按照100/4=25%进行计算的

OK,下面我们开始说明一下新的算法流程:

当需要给task指派一个scheduler的时候,如果首选scheduler(preferred scheduler)在添加这个task后,不会使得当前scheduler的平均任务资源利用率下降到当前NUMA节点内平均资源利用率的80%以下,则将任务指派给首选scheduler;反之,则将任务分配给同一NUMA节点中有最多可用资源的sheduler上。

如果写成逻辑公式则是这种计算方式:

if  (preferred scheduler pool target/runable task+1)>avg (sum(scheduler pool target/runable task))*0.8

  preferred scheduler task+1

else

  most pool resource scheduler task+1

也许这样说起来并不直观,我们用一些图例和计算说明一下具体流程

依然模拟了这样一个环境:2NUMA,四核,1433端口绑定到NUMA0,使用默认的RG设置(也就是MAX CPU=100%)

我们可以列出下表

全局的平均值则=(5.56+4.55)/2=5.05,那么80%数据值为5.05*0.8=4.04

1.

在sche1发起了一个任务分配的任务,计算公式则如下

scheduler1 avg = 50/(11+1)=4.17

我们发现4.17这个数值要高于全局平均使用率的80%(4.04),那么这个任务还是会分配给首选scheduler,也就是sche1

(这里注意:如果按以前版本负载系数的算法,则是(11+1)/9=1.33,在sche1添加这个任务,任务负载会超出sch0的20%以上,则此任务则会分配给sche0)

2.

上面的表格变为如下:

全局的平均值则=(5.56+4.17)/2=4.86,那么80%数据值为4.86*0.8=3.89

3.

接下来我们再继续在sche1上添加新的任务,计算公式则如下

scheduler1 avg = 50/(12+1)=3.85<3.89

则新的任务会分配到非首选schduler上,也就是sche0上,表格变成

我们可以看出,通过新的算法,并没有对不同的scheduler上的任务造成过大的数量差距,而且减小了在不同scheduler上切换任务的次数

以上就是sql server 2012任务调度算法的一些基本内容

补充

在服务器启动时候,我们可以使用2个trace flag进行调度算法的指定,当然和一般的trace flag一样,如果不是特别需要且经验非常丰富的DBA,不要对这些看似高大上的参数进行调整

-T8008      - 使用2012企业版之前的调度算法,也就是我在第一篇中写到的算法

-T8016       - 强制指派任务到首选scheduler上(基本上等于不进行什么算法判断了)

sql server 2012 数据引擎任务调度算法解析(下)的更多相关文章

  1. sql server 2012 数据引擎任务调度算法解析(上)

    微软在sql server 2012版本之后,引入了新的任务调度算法,这个算法与之前的版本有一些细微的差别.我在这里试着简单描述一下,一些基本概念就不再赘述了,比如NUMA.scheduler.wor ...

  2. SQL Server 2012数据导入SQL Server 2008

    SQL Server 2012可以降级到2008吗?没有找到方法,似乎也不支持.整理了一个变通的方法,把2012的数据和结构导出,然后再导入2008. 在 SQL Server 2012 使用 Sql ...

  3. Azure 云平台用 SQOOP 将 SQL server 2012 数据表导入 HIVE / HBASE

    My name is Farooq and I am with HDinsight support team here at Microsoft. In this blog I will try to ...

  4. SQL Server 2012 - 数据表的操作

     unicode:双字节编码      variable:可变的    character:字符 T-SQL:  Transact Structured Query Language unique:唯 ...

  5. SQL Server 2012 读写分离设置

    SQL Server 2012 读写分离设置 - AlsoIn 时间 2014-07-21 17:38:00  博客园-所有随笔区 原文  http://www.cnblogs.com/also/p/ ...

  6. SQL Server 2012 管理新特性:AlwaysOn 可用性组

    SQL Server 2012 新特性(一)管理新特性:AlwaysOn 一.准备环境 1.准备4台计算机 域控制器DC1,IP地址192.168.1.1 主节点SQL1:IP地址192.168.1. ...

  7. Sql Server 2012 集群配置

    基于Windows Server 2008 R2的WSFC实现SQL Server 2012高可用性组(AlwaysOn Group) 2012年5月 微软新一代数据库产品SQL Server 201 ...

  8. SQL Server 2012 读写分离设置 - AlsoIn

    原文转至:http://www.tuicool.com/articles/a6rmiam/ 引用: http://technet.microsoft.com/zh-cn/library/jj16176 ...

  9. Querying Microsoft SQL Server 2012 读书笔记:查询和管理XML数据 1 -使用FOR XML返回XML结果集

    XML 介绍 <CustomersOrders> <Customer custid="1" companyname="Customer NRZBB&qu ...

随机推荐

  1. Java进击C#——语法之基础

    本章简言 上一章讲到关于项目工程开发常用的知识点,有了前面俩章的介绍之后.本章正式开始介绍关于C#的基础语法.我们都很清楚C#也是面向对象的计算机语言.而且他跟JAVA的相似度高达80%.所以很多语法 ...

  2. pages与页面配置

    全局定义页特定配置设置,如配置文件范围内的页和控件的 ASP.NET 指令.能配置当前Web.config目录下的所有页面的设置. <pages buffer="[True|False ...

  3. python 替换 文件夹下的 文件名称 及 文件内容

    示例效果: 1.替换某文件夹下的 文件夹及子文件夹 的名称 由OldStrDir 变为 NewStrDir: 2.替换某文件夹下的 文件夹及子文件夹 下 所有的文件的名称 由OldStrFile 变为 ...

  4. 从零开始学 Java - Spring MVC 统一异常处理

    看到 Exception 这个单词都心慌 如果有一天你发现好久没有看到Exception这个单词了,那你会不会想念她?我是不会的.她如女孩一样的令人心动又心慌,又或者你已经练功到了孤独求败,等了半辈子 ...

  5. 十一个行为模式之观察者模式(Observer Pattern)

    定义: 定义对象之间一种一对多的关系,当被观察者状态变化时,可以自动地通知观察者并执行相关的业务操作.观察者模式又被称为发布-订阅模式等. 结构图: Subject:抽象主题类,定义了所有被观察类的通 ...

  6. 网站banner无缝轮播

    网站banner无缝轮播 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  7. 【单页应用巨坑之History】细数History带给单页应用的噩梦

    前言 在我们日常的网页浏览中,我们非常喜欢做一个操作:点击浏览器的前进后退在Ajax技术出现后,有些时候前进后退就会给开发者带来困扰,甚至一些开发者试图去干掉History随着Html5的发展,移动端 ...

  8. iOS 事件处理之UIResponder简介

    在用户使用app过程中,会产生各种各样的事件 iOS中的事件可以分为3大类型:触摸事件.加速计事件.远程控制事件 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处 ...

  9. SharePoint 2013 图文开发系列之应用程序页

    在SharePoint中,有两种页面类型,一种是保存在数据库中的页面,我们可以在网站的页面库中看到:还有一种叫做应用程序页,部署在服务器上,Layouts下面的页面,是应用程序页,主要是完成特定功能的 ...

  10. One-Time Project Recognition

    Please indicate the source if you need to repost. After implementing NetSutie for serveral companies ...