天高地厚

随笔 - 268, 文章 - 0, 评论 - 13, 阅读 - 18万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

等待类型的分类

Posted on   天高地厚-GNU  阅读(278)  评论(0编辑  收藏  举报

既然我们要用内部的等待统计信息来分析问题,那么首先就要得知道:到底有哪些等待类型。

在SQL Server中,等待类型有很多,为了便于使用和管理,这些等待类型又是被进行了分类的,所以,下面,我们就来看看等待类型的分类。

说出来可能有点吓人:在SQL Server内部,可以跟踪大约400多个等待类型。如此众多的等待类型,可以让我们感受到:发生等待的原因真是太多了,如果靠我们自己“小米+步枪”的方式去分析,会花费多少精力。

 

尽管有如此众多的等待,其实我们常常用到的,或者我们关注的等待就只有很少的一部分,如那些与资源争夺相关的等待:CPU,I/O,内存等。下面,我们就介绍我们常常使用的四大等待类型的分类:

 

资源等待(Resource waits):这类型的等待发生的场景是这样的:当某个工作线程要去访问谋一份资源的时候,但是此时,这个资源被其他线程占用。在这种等待分类中,我们常常看到的典型的,如锁,闩锁,和网络。

 

信号等待(Signal waits)某个工作线程在等待CPU可用所花费的时间。在SQL Server中,如果某个工作线程运行所需要的资源全部已经准备好了,此时,它就要被运行,但是CPU每次只能运行一个线程,那么,那些已经就绪的工作线程就会被放在称之为runnable的队列中,等待CPU时钟的到来,然后被运行。此时,可以知道,如果这类的等待时间多长,那么就说明CPU有压力,因为要被运行的线程不缺任何的资源,就差被CPU去执行了。

 

队列等待(Queue waits):这种分类的等待发生的场景是这样的:一个工作线程很闲,等待有任务教给它。那么,这里就有一点要说明的就是:在数据库中,有个工作线程池,我们的向数据库发送的每个请求,都是交给工作线程,然后这些线程去运行的。举个例子,你要去图书馆借书,在图书馆中有很多的图书管理员,这些管理员我们就称之为“工作线程”。当我们发起一个借书的请求之后,这个请求就被交给图书管理员,然后由他们去找书。如果图书馆总是没有人借书,或者借的人很少,那么这些管理员就闲置。这种类型的等待常常与系统的背后任何相关,可以用来分析死锁等情况。

 

外部等待(External waits):很好理解,当SQL Server工作线程要等待外部某个事件事件的发生然后才去运行,在事件发生之前就要等待,如采用linked server查询,需要等到结果过了之后才能继续进行。

 

 

编辑推荐:
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
阅读排行:
· 开发的设计和重构,为开发效率服务
· 从零开始开发一个 MCP Server!
· Ai满嘴顺口溜,想考研?浪费我几个小时
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
点击右上角即可分享
微信分享提示