[翻译]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 ...
随机推荐
- Mysql加锁过程详解(4)-select for update/lock in share mode 对事务并发性影响
Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...
- 深入MySQL复制(一)
本文非常详细地介绍MySQL复制相关的内容,包括基本概念.复制原理.如何配置不同类型的复制(传统复制)等等.在此文章之后,还有几篇文章分别介绍GTID复制.半同步复制.实现MySQL的动静分离,以及M ...
- python包导入细节
包导入格式 导入模块时除了使用模块名进行导入,还可以使用目录名进行导入.例如,在sys.path路径下,有一个dir1/dir2/mod.py模块,那么在任意位置处都可以使用下面这种方式导入这个模块. ...
- NPOI导出EXCEL报_服务器无法在发送 HTTP 标头之后追加标头
虽然发表了2篇关于NPOI导出EXCEL的文章,但是最近再次使用的时候,把以前的代码粘贴过来,居然报了一个错误: “服务器无法在发送 HTTP 标头之后追加标头” 后来也查询了很多其他同学的文章,都没 ...
- [转]分别使用Node.js Express 和 Koa 做简单的登录页
本文转自:https://blog.csdn.net/weixin_38498554/article/details/79204240 刚刚学了Koa2,由于学的不是很深,并没有感受到网上所说的Koa ...
- [转]mysql优化——show processlist命令详解
本文转自:https://blog.csdn.net/sunqingzhong44/article/details/70570728 版权声明:本文为博主原创文章,未经博主允许不得转载. https: ...
- 杭电ACM2000--ASCII码排序
ASCII码排序 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- 【Tomcat】Tomcat相关设计模式分析
门面模式 门面模式在 Tomcat 中有多处使用,在 Request 和 Response 对象封装中.Standard Wrapper 到 ServletConfig 封装中.Application ...
- 【Spring】16、注解事务 @Transactional
概述 事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性.Spring Framework对事务管理提供了一致的抽象,其特点如下: 为不同的事务API提供一致的编程模型, ...
- 快速排序 and 拉格朗日插值查找
private static void QuictSort(int[] zu, int left, int right) { if (left < right) { ; ; ]; while ( ...