SQL Server 2012中Task是如何调度的?

news/2024/7/24 11:21:42 标签: 数据库
SQL Server 2012中Task是如何调度的?
SQL Server 2012中Task是如何调度的?[原文来自:How It Works: SQL Server 2012 Database Engine Task Scheduling]
     从SQL Server 7.0以来调度算法并没有很大的改变。
算法概述:
     调度从分配NUMA节点开始,使用循环分配的方式,当一下链接来了,先分配给Node1,然后分配给Node2,然后在Node1
     分配了NUMA节点之后,在分配调度器,根据Load factor来做调度,Load factor可以简单的认为是分配给调度器的任务数量
     task分配是根据Load factor,如果首先的调度器比其他调度器多了120%,那么选择其他调度器,否则现在首选调度器
 
SQL Server 2012调度算法只在企业版上做了修改
     新的连接分配:新的连接是用环形循环分配,和前面提到的一样。所有的sql server 2012 产品都是这样分配连接的,然后查询目标节点把连接分配给负荷最小的调度器,然后这个调度器变为这个连接的首选调度器。
     
 
     新的连接并没有首选调度器,所以需要再分配的节点内给连接分配一个调度器,负荷最小的调度器被选中,如图的例子现在了Node1的sched2.
 
SQL Server 2012之前和非企业版
     这个比较简单,当task被请求,使用首选调度器,继续上面的例子如图:是sched2,当load factor是其他调度器120%以上的时候就需要重新选中调度器。
     
 
SQL Server 2012企业版
     在企业版中,对load factor的算法进行了改进。
     每个调度器,都有一个以cpu为目标的,资源池,并是有load factor对能力进行跟踪。并不是Load factor一样120%,而是通过每个资源池的平均cpu
     
调度还是以首选调度器开始,如果调度之后,并没有比同节点内的所有调度器平均少80%,那么可以调度,否则做调度平衡,选择可用资源最多的调度器。
     调度的例子(笔者认为例子有些错误,所以做了修改):

SchedulerRG Pool TargetPool Runnable TasksAvg Pool/Task 
150105 
25086.25Currently Best Target – More resources to provide for tasks in the same pool
 
 
假设sched1 可以为每个task提供5,那么sched2可以提供6.25
当前平均是 (5+6.25)/2 = 5.625
 
当有一个任务要被分配,首选是sched1那么如果被分配,可提供 50/11 = 4.545 > 5.625*0.8 = 4.5008所以可以分配

SchedulerRG Pool TargetPool Runnable TasksAvg Pool/Task 
150114.545  Not below 80th percentile
25086.25 
 
当前平均= 5.3977 (6.25 + 4.5454/2) 
然后又有一个新的要分配,首选还是sched1,50/12 =  4.1666 < (4.545+6.25)/2*0.8 =  4.3181所以需要做调整,选择自愿最多的一个调度器

SchedulerRG Pool TargetPool Runnable TasksAvg Pool/Task 
150114.5454 
25095.55 Added task
 
当前平均值  5.047 (5.55 + 4.5454 / 2)
 
相关Trace Flag
     -T8008 强制调度,不管scheduler提示,总是调度给最小的负荷(使用最小load factor或者资源池)
     -T8016 忽略负载均衡,总是调度给首选调度器
posted on 2013-08-26 16:12 Fanr_Zh 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/Amaranthus/p/3282846.html


http://www.niftyadmin.cn/n/1512038.html

相关文章

Scrapy爬虫框架-自定义中间件

Scrapy爬虫框架-自定义中间件 ​ Scrapy中内置了多个中间件&#xff0c;不过在多数情况下开发者都会选择创建一个属于自己的中间件&#xff0c;这样既可以满足自己的开发需求&#xff0c;还可以节省很多开发时间。在实现自定义中间件时需要重写部分方法&#xff0c;因为Scrapy引…

使用uni.navigateTo()传递对象

1.跳转页面 detail(item){let obj JSON.stringify(item)uni.navigateTo({url:articleDetail?objencodeURIComponent(obj)})},2.接收页面 在data中定义obj{} onLoad(options) {this.objJSON.parse(decodeURIComponent(options.obj))console.log(this.obj);},

Scrapy爬虫框架-通过Cookies模拟自动登录

Scrapy爬虫框架-通过Cookies模拟自动登录 ​ 熟练使用Cookies在编写爬虫程序时是非常重要的&#xff0c;Cookies代表用户的信息&#xff0c;如果需要爬取登录后网页的信息&#xff0c;就可以将Cookies信息保存&#xff0c;然后在第二次获取登录后的信息时就不需要再次登录了&am…

第一节 MongoDB介绍及下载与安装

引言 MongoDB是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系数据库的。他支持的数据结构非常松散&#xff0c;是类似json的bjson格式&#xff0c;因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询…

调接口传递JSON数组

1.在获取数到的数据中添加三个属性 this.api.orderListStatus ({order_id:id}).then(res>{this.datalist res.order_detailthis.goods_info res.order_detail.goods_detailres.order_detail.goods_detail.map(item>{item[comment]item[imgList][]item[remnant] 0})}).…

GitHub上最火的40个iOS开源项目

1. AFNetworking 在众多iOS开源项目中&#xff0c;AFNetworking可以称得上是最受开发者欢迎的库项目。AFNetworking是一个轻量级的iOS、Mac OS X网络通信类库&#xff0c;现在是GitHub上第三大Objective-C库。它建立在NSURLConnection、NSOperation等类库的基础上&#xff0c;让…

Python编程-关于面向对象的一些思考

Python编程-关于面向对象的一些思考 • 将相关的东西放在一起。如果一个函数操作一个全局变量&#xff0c;最好将他们作为一个类的属性和方法。 • 不要让对象之间过于亲密。方法应该只关心其所属实例的属性&#xff0c;对于其他实例的状态&#xff0c;由它们自己管理。 • 慎…

uni中将小程序页面分享给好友和朋友圈

1.小程序原生自带分享到朋友圈 onShareAppMessage: function () {console.log(转发); },1.1button分享按钮 <button class"invitebtn" open-type"share">立即邀请</button>1.2点击button按钮分享获取邀请码 onShareAppMessage: async funct…