[翻译]SQL Server等待事件—THREADPOOL
前言: 本文是对SQLSkills上一篇关于SQL Server中THREADPOOL等待的博客的翻译,本文也不是完全翻译,有些地方适当加入了自己的一些认知。如有翻译不对或不好的地方,敬请指出,大家一起学习进步。尊重原创和翻译劳动成果,转载时请注明出处。谢谢!
英文原文地址:https://www.sqlskills.com/help/waits/threadpool/
翻译原文地址:http://www.cnblogs.com/kerrycode/p/8875781.html
等待事件描述:
这个等待类型出现是因为服务器的线程池(Thread Pool)没有可用的线程,它可能导致登录失败或SQL语句无法正常运行。
(联机丛书描述:“当任务在等待工作线程(worker thread)运行时出现这个等待事件。这可能表明数据库参数max worker threads的值设置过低, 或者批处理执行时间过长, 从而减少了可用于满足其它批处理的工作线程(worker thread)数量。(举个生活当中的例子,当你去饭店吃饭,工作线程好比餐厅的服务员,例如服务员过少或某些顾客占用服务员的时间过长,那么就会出现很多顾客郁闷地长时间等待服务的现象)
Questions/comments on this wait type? Click here to send Paul an email, especially if you have any information to add to this topic.
Added in SQL Server version:
Pre-2005/2005
Removed in SQL Server version:
N/A
扩展事件wait_type的值:
这个等待类型在sys.dm_xe_map_vlaues中对应的扩展事件为SOS_WORKER (感谢乔纳森的博客 Mapping wait types in dm_os_wait_stats to Extended Events)。
sys.dm_xe_map_values中的map_key值在SQL Server 2008和 SQL Server 2008 R2 中为113, 在SQL Server 2012和 2014 RTM中值为117。在 SQL Server 2014 RTM 之后, 您必须检查DMV视图获得它的最新的值, 因为一些map_keyvalues 的值在后续的版本中改变了。
其它信息
SQL Server实例在启动的时候创建了一定数量的工作线程(workder threads),举个例子, 我的笔记本的CPU有8个逻辑处理器,因此SQL Server实例启动的时候创建了576个工作线程。你可以从sys.dm_os_sys_info 这个DMV视图中的max_worker_count列查看你的实例分配了多少工作线程。关于SQL Server会创建多少个工作线程的详细信息,你可以参考文档Configure the max worker threads Server Configuration Option.
当一个查询去执行时,SQL Server会决定需要多少个线程(请见Paul Whtile的博客Parallel Execution Plans – Branches and Threads),并且决定为线程池(thread pool)保留多少个线程。 如果没有足够可用的线程,此时threadpool 等待就会出现,如果没有可用的线程, 连接到SQL Server就会失败。
可能有多种原因导致工作线程发生饥饿现象(Worker thread starvation),包括下面一些情况:
· 一个线程获取了一个锁,然后导致其它线程被阻塞,越来越多的连接出现并被阻塞,最终耗尽了线程池(thread pool)中的线程。
这种情况可以从sys.dm_os_waiting_tasks 这个DMV视图中(使用我的脚本)找出被单个SPID阻塞的记录,并考虑将其杀死。
· 并行查询计划正在被数百个连接执行,耗尽了线程池中线程。
查看CXPACKET等待并标识那些并行执行计划的SQL语句,尽可能减少并行的总量发生。
· 一个查询计划正在被许多连接执行,并且查询时间比平时要长,耗尽了线程池的线程。
查询CXPACKET等待并如何识别偏斜平行度(skewed parallelism)。
还要查找那些长时间运行的查询语句,并调查发生了什么等待以查看是否存在常规性能问题导致线程匮乏,或者那些长时间运行的SQL语句是否有不正确的查询计划。
· SQL Server中的活动会话数等于工作线程数
检查sys.dm_exec_requests视图中的记录数,如果记录数接近工作线程数量, 减少连接数量(例如,应用程序是否没有使用连接池或没有正确关闭)或增加max worker threads的值。请注意,由于空闲连接不消耗工作线程,因此与SQL Server连接的数量可能超过活动(Active)的连接,这可能是完全正常的。
· 对max worker thread参数的不正确配置。
查看max worker worker thread 选项的值并设置为自动调整。
如果由于工作线程不足(worker thread starvation)无法连接到SQL Server去进行故障诊断,请尝试使用专用管理员连接(DAC)。
Known occurrences in SQL Server (list number matches call stack list):
- Waiting for a worker thread to become available
Abbreviated call stacks (list number matches known occurrences list):
- SOS_Scheduler::UpdateWaitTimeStats+30c
WorkDispatcher::DequeueTask+211
SOS_Scheduler::ProcessTasks+1e3
SchedulerManager::WorkerEntryPoint+261
SystemThread::RunWorker+8f
SystemThreadDispatcher::ProcessWorker+3c8
SchedulerManager::ThreadEntryPoint+236
BaseThreadInitThunk+d
RtlUserThreadStart+1d
[翻译]SQL Server等待事件—THREADPOOL的更多相关文章
- SQL Server等待事件—RESOURCE_SEMAPHORE_QUERY_COMPILE
等待事件介绍 关于等待事件RESOURCE_SEMAPHORE_QUERY_COMPILE,官方的介绍如下: Occurs when the number of concurrent query co ...
- SQL Server等待事件新解
资源等待类型 并行:CXPACKET Buffer:PAGEIOLATCH_X 非Buffer:LATCH_X I/O:ASYNC_IO_COMPITION:IO_COMPITION CPU:SOS_ ...
- SQL Server等待事件—PAGEIOLATCH_EX
什么是PAGEIOLATCH_EX等待事件? 下面我们将对PAGEIOLATCH_EX等待事件的相关资料做一个简单的归纳.整理.关于PAGEIOLATCH_EX,官方文档的简单介绍如下: PAGEIO ...
- [转载]sql server 等待类型
下表列出各任务所遇到的等待类型. 等待类型 说明 ASYNC_DISKPOOL_LOCK 当尝试同步并行的线程(执行创建或初始化文件等任务)时出现. ASYNC_IO_COMPLETION 当某任务正 ...
- SQL Server 扩展事件(Extented Events)从入门到进阶(4)——扩展事件引擎——基本概念
本文属于 SQL Server 扩展事件(Extented Events)从入门到进阶 系列 在第一二节中,我们创建了一些简单的.类似典型SQL Trace的扩展事件会话.在此过程中,介绍了很多扩展事 ...
- sql server等待类型
sql server 各种等待类型-转 sql server各个等待类型及解决办法:https://www.sqlskills.com/help/waits/writelog/其他等待类型的描述和解决 ...
- SQL Server 扩展事件(Extented Events)从入门到进阶(1)——从SQL Trace到Extented Events
由于工作需要,决定深入研究SQL Server的扩展事件(Extended Events/xEvents),经过资料搜索,发现国外大牛的系列文章,作为“学习”阶段,我先翻译这系列文章,后续在工作中的心 ...
- SQL Server 扩展事件(Extented Events)从入门到进阶(3)——通过界面操作Extented Event
本文属于 SQL Server扩展事件(Extended Events)从入门到进阶 系列 对于接纳扩展事件,其中一个最大的障碍就是要对XML和XQuery有一定的了解以便分析数据.我们可以使用T-S ...
- SQL Server扩展事件-- 使用system_health默认跟踪会话监控死锁
SQL Server扩展事件(Extended Events)-- 使用system_health默认跟踪会话监控死锁 转自:http://blog.51cto.com/ultrasql/160037 ...
随机推荐
- 全网最详细的一个超级好用的命令行工具【Cmder】的安装之后的一些配置(图文详解)
不多说,直接上干货! 1.修改命令提示符λ为$ 首先,我们看到 进入解压后的cmder的目录,进入vendor,打开init.bat文件. 修改第15行的代码 @prompt $E[;;40m$P$S ...
- Java基础系列--instanceof关键字
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/8492158.html instanceof关键字是在Java类中实现equals方法最常使 ...
- TCP中往返时间的估计与超时
往返时间的估计与超时 TCP采用超时/重传机制来处理报文段的丢失问题.尽管这在概念上面很简单,但是在实际中还是会产生很多微妙的问题.最明显还是超时时间间隔的设置.很显然,这个时间间隔肯定会大于RT ...
- maven安装、配置及创建工程
准备工作 java开发环境(JDK) maven下载地址:http://maven.apache.org/release-notes-all.html 一.安装 安装maven超级简单,总共分三步: ...
- spark集群的简单测试和基础命令的使用
写此篇文章之前,已经搭建好spark集群并测试成功: spark集群搭建文章链接:http://www.cnblogs.com/mmzs/p/8193707.html 一.启动环境 由于每次都要启动, ...
- tomcat编译项目后,classes文件没有相应的改变;
tomcat编译项目后,classes文件没有相应的改变: tomcat不能将项目部署到服务器: 1.首先,在tomcat安装目录webapps中将编译后的整个项目删掉,然后再在eclipse将tom ...
- 个渣渣C语言之数组
---恢复内容开始--- 学c语言就知道数组.指针在c中有着特殊的地位.而且是必须掌握的一项知识,学会它会让你受益无穷. 一.数组 1.数组:室友一系列相同元素构成的.它连续的存储在内存中. 2.数组 ...
- CSS一些样式以及注意
[在这里归纳一些有用,但是不常用而不容易记住的一些CSS属性-(日后慢慢补充)] border-radius:100px; --圆角[比如按钮使用之后由长方形变成类似椭圆] placeholder=& ...
- WebBrowser(IE) 与 JS 相互调用
在开发中我们经常将WebBrowser控件嵌入Winform 程序来浏览网页,既然是网页那么少不了JS.下面就让我们来说说他们两之间的相互调用. 在C#封装的浏览器内核中,Chromium 内核封装有 ...
- .NET页面导出Excel
public static void CreateExcel(DataSet ds) { string filename = DateTime.Now.ToStri ...