SQL Server的thread scheduling(线程调度)
每一个thread在cpu上执行时候都是有一个quantum(时间片)的,当你的quantum用完了而你的任务还没有结束,这个thread就会自己释放CPU,直接进入runnable队列中排队等待下一次执行,这个直接释放CPU再次等待的过程叫yield。我们知道SQL Server中所有的wait都是有一个类型的,这种自己yield CPU并且等待下一次执行的类型就是sos scheduler yield。如果一个thread不yield,那么它的工作就会一次性地被CPU执行完,而其他thread就没有执行机会,这显然是不好的。
明白了什么是sos scheduler yield,我们来看看什么导致了scheduler yield。我们已经知道scheduler yield是说一个thread在CPU上疯狂执行直到把自己的这一次的quantum都用完了,也就是说这个thread在执行的过程中需要的所有的resource都是available的,不然它就会进入suspended状态。那么我们想想什么操作会有这样的表现呢?对了就是table scan或者index scan!当一个很大的scan操作需要访问的所有page都在内存并且也不存在page latch无法获得的问题时,这个thread就尽情地scan这些page,但是由于page太多了,quantum用完了都还没有scan完,所以只有忍痛yield CPU等待下一次执行机会。这就是最常见的sos scheduler yield的原因。当然还有其他原因,比如确实是你的CPU不够强大,已经成为系统的瓶颈。但是根据楼主的描述,以前都好着呢,所以这种情况的可能性不大。
建议检查你的stored procedure,看看有没有big scan,是不是需要创建index来speed up the query。
最新文章
- Linq中查询List组合相同值数量大于1
- js九宫格的碰撞检测
- Ubuntu下输入su - [root]后提示“su:认证失败”
- Machine Learning for hackers读书笔记(七)优化:密码破译
- Android 工程目录结构简介
- check_area
- fake it till you become it
- Castle扩展Ibatis.Net
- Learning to Rank简介
- auto_prepend_file与auto_append_file使用方法
- python+selenium 环境搭建以及元素定位
- JS时间的获取及格式
- 小米手机跨域问题,返回resphone:undefined,status 0
- Python控制台颜色
- HTML基础篇
- rabbit基本原理 转
- BNF
- scrapy-logging
- 【python原理解析】gc原理初步解析
- scrapy 动态IP、随机UA、验证码
热门文章
- 【会装】kylin的安装(填坑)和简单使用
- FPGA 17最佳论文导读 ESE: Efficient Speech Recognition Engine with Compressed LSTM on FPGA
- 强大到无与伦比的Graphviz
- angular.js 验证码注册登录
- spring boot 使用不同的profile来加载不同的配置文件
- 【51nod】1309 Value of all Permutations
- MySQL常用知识
- 洛谷P1486 [NOI2004]郁闷的出纳员 [STL,平衡树]
- k8s安装遇到的问题及处理方法
- axio post 请求后端接收不到参数的解决办法