https://www.zhihu.com/question/53125711/answer/134461670
https://www.zhihu.com/question/53125711
 
 
SQL Server的thread scheduling(线程调度)是由SQL Server自己来完成的。它分为三个状态,running, suspended, runnable。我画了一个图来解释这三个状态:
<img src="https://pic2.zhimg.com/v2-48b1077d5c913dbb62feb6d70d655779_b.png" data-rawwidth="645" data-rawheight="628" class="origin_image zh-lightbox-thumb" width="645" data-original="https://pic2.zhimg.com/v2-48b1077d5c913dbb62feb6d70d655779_r.png">每一个thread在cpu上执行时候都是有一个quantum(时间片)的,当你的quantum用完了而你的任务还没有结束,这个thread就会自己释放CPU,直接进入runnable队列中排队等待下一次执行,这个直接释放CPU再次等待的过程叫yield。我们知道SQL Server中所有的wait都是有一个类型的,这种自己yield CPU并且等待下一次执行的类型就是sos scheduler yield。如果一个thread不yield,那么它的工作就会一次性地被CPU执行完,而其他thread就没有执行机会,这显然是不好的。

每一个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。

SQL Server的thread scheduling(线程调度)的更多相关文章

  1. SQL Server OS 调度

    --SQL SERVER OS 采用合作模式的线程调度模式,即除非Worker主动放弃CPU,否则SQL OS 不会强制剥夺其CPU,从而减少Context Switch --默认设置下,SQL SE ...

  2. Migrating Oracle on UNIX to SQL Server on Windows

    Appendices Published: April 27, 2005 On This Page Appendix A: SQL Server for Oracle Professionals Ap ...

  3. System Databases in SQL Server

    https://docs.microsoft.com/en-us/sql/relational-databases/databases/system-databases SQL Server incl ...

  4. Scheduler & Task & Worker & Thread & Request & Session & Connection of SQL Server

    MSSQL一直以来被人们认为简单.好学,但等到大家掌握了入门操作,深入理解起来又觉得非常的“拧巴”,尤其是对用惯了Oracle的同学来说,究其根本原因,无非是MSSQL引入和暴露了太多的概念.细节和理 ...

  5. MS SQL错误:SQL Server failed with error code 0xc0000000 to spawn a thread to process a new login or connection. Check the SQL Server error log and the Windows event logs for information about possible related problems

          早晨宁波那边的IT人员打电话告知数据库无法访问了.其实我在早晨也发现Ignite监控下的宁波的数据库服务器出现了异常,但是当时正在检查查看其它服务器发过来的各类邮件,还没等到我去确认具体情 ...

  6. sql server存储引擎启动错误(SQL Server could not spawn FRunCM thread)

    错误信息: 中文版: 服务器无法在 'any' <ipv4> 1433 上侦听.错误: 0x277a.若要继续,请通知您的系统管理员. TDSSNIClient 初始化失败,出现错误 0x ...

  7. 使用WinDbg调试SQL Server——入门

    这篇文章我想探究下SQL Server里完全不同的领域:如果使用WinDbg(来自针对Windows的调试工具)调试SQL Server.在我们进入枯涩细节之前,我想详细解释下为什么选择这样晦涩的话题 ...

  8. sql server 任务调度与CPU

    一. 概述 我们知道在操作系统看来, sql server产品与其它应用程序一样,没有特别对待.但内存,硬盘,cpu又是数据库系统最重要的核心资源,所以在sql server 2005及以后出现了SQ ...

  9. Microsoft SQL Server Trace Flags

    Complete list of Microsoft SQL Server trace flags (585 trace flags) REMEMBER: Be extremely careful w ...

随机推荐

  1. Android仿新浪新闻SlidingMenu界面的实现 .

    先看看原图: 如图所示,这种侧滑效果以另一种方式替代了原先tab导航的那种用户体验方式 给人耳目一新的感觉,现已被广大知名应用所效仿,如新浪新闻,网易新闻,人人网等 那么这种效果该如何实现呢?那就需要 ...

  2. 在 ASP.NET Core 具体使用文档

    https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/hosting?tabs=aspnetcore2x

  3. linux c下输入密码不回显

    今天做一个登录程序,需要屏蔽掉密码,于是自己就在网上找资料,找到了一种和linux终端下输入密码方式相同的方法,不显示在终端,具体代码实现如下. #include<stdio.h> #in ...

  4. 前端网页进度Loading

    loading随处可见,比如一个app经常会有下拉刷新,上拉加载的功能,在刷新和加载的过程中为了让用户感知到 load 的过程,我们会使用一些过渡动画来表达.最常见的比如“转圈圈”,“省略号”等等. ...

  5. day4递归原理及实现

    递归 特定: 递归算法是一种直接或者间接地调用自身算法的过程.在计算机编写程序中,递归算法对解决一大类问题十分有效,它往往是算法的描述简洁而且易于理解. 递归算法解决问题的特点: (1)递归就是在过程 ...

  6. Node JVM

    Yaroslav Gaponov发布到Github的一个开源项目.用纯Node.js写的JVM.具体的实例和编译.运行过程,请直接看Node JVM在GitHub的主页. GitHub的主页:http ...

  7. 三十三 StringIO和BytesIO

    StringIO 很多时候,数据读写不一定是文件,也可以在内存中读写. StringIO顾名思义就是在内存中读写str. 要把str写入StringIO,我们需要先创建一个StringIO,然后,像文 ...

  8. Java(静态)变量、(静态)代码块、构造方法的执行顺序

    Java(静态)变量.(静态)代码块.构造方法的执行顺序 总结 1.父类静态变量和静态代码块(先声明的先执行); 2.子类静态变量和静态代码块(先声明的先执行); 3.父类的变量和代码块(先声明的先执 ...

  9. Java-redis分布式锁 抢购秒杀系统 实现

    一.使用分布式锁要满足的几个条件: 系统是一个分布式系统(关键是分布式,单机的可以使用ReentrantLock或者synchronized代码块来实现) 共享资源(各个系统访问同一个资源,资源的载体 ...

  10. 洛谷P3950 部落冲突 [LCT]

    题目传送门 部落冲突 格式难调,体面就不放了. 分析: julao们应该都看得出来就是个$LCT$板子,战争就$cut$,结束就$link$,询问就$find$.没了... 太久没打$LCT$,然后发 ...