谁在使用我的工作线程?SQL Server 2014-HADR


10

最近,我们在SQL Server 2014 HADR环境中遇到问题,其中一台服务器的工作线程不足。

我们收到消息:

AlwaysOn可用性组的线程池无法启动新的工作线程,因为没有足够的可用工作线程。

启动时出现错误信息

我已经打开了另一个问题,以获得一个(我认为)应该帮助我分析问题的语句(是否可以查看哪个SPID使用哪个调度程序(工作线程)?)。尽管现在有了查询来查找正在使用系统的线程,但我不明白为什么该服务器用完了工作线程。

我们的环境如下:

  • 4 Windows Server 2012 R2
  • SQL Server 2014企业版
  • 24个处理器-> 832个工作线程
  • 256 GB内存
  • 12个可用性组(整体)
  • 642个数据库(整体)

因此,出现问题的服务器具有以下配置:

  • 5个可用性组(3个主要/ 2个辅助)
  • 325个数据库(127个主要/ 198个次要)
  • MAXDOP = 8
  • Cost Threshold for Parallelism = 50
  • 电源计划设置为“高性能”

为了“解决”该问题,我们手动将一个可用性组故障转移到辅助服务器。该服务器的配置现在为:

  • 5个可用性组(2个主要/ 3个辅助)
  • 325个数据库(77个主要数据库/ 248个辅助数据库)

我正在使用以下语句监视可用线程:

declare @max int
select @max = max_workers_count from sys.dm_os_sys_info

select 
    @max as 'TotalThreads',
    sum(active_Workers_count) as 'CurrentThreads',
    @max - sum(active_Workers_count) as 'AvailableThreads',
    sum(runnable_tasks_count) as 'WorkersWaitingForCpu',
    sum(work_queue_count) as 'RequestWaitingForThreads' ,
    sum(current_workers_count) as 'AssociatedWorkers'
from  
    sys.dm_os_Schedulers where status='VISIBLE ONLINE'

通常,服务器大约有250-430个工作线程可用,但是问题开始时,就没有工作线程了。

-119个可用线程

今天,无处不在的工人从327人下降到50人,但只有一分钟,然后又上升到大约400人。

我已经看到了另一个问题(HADR高工作线程使用率),但这对我没有帮助。

我们的系统稳定运行了一年以上,没有任何问题。我们在数据库分布方面没有任何故障转移或其他重大更改。

我们在副本之间使用“同步提交”。根据我的理解,不涉及压缩,请参阅文档中的“ 为可用性调整音调”组

有谁知道正在使用所有工作线程的想法吗?

编辑:在此页面上有很多关于这些问题的信息, http://www.techdevops.com/Article.aspx?CID=24

Answers:


1

社区Wiki答案

可用性组中的数据库数量很多,这就是线程的运行方向。压缩,加密和传输成本涉及很多。尝试关闭压缩,这将使您的线程使用量减少大约三分之一(取决于副本数)。

问题被标记为SQL Server 2014,默认情况下将使用压缩。默认情况下,SQL Server 2016不会使用压缩进行同步。

您可能需要增加实例上的工作线程,或者更好:在多个服务器上平衡最活跃的线程和不活跃的线程。看到相关的Q&A AlwaysON可用性组查询非常慢

您可能还会发现它是无法正确关闭请求的应用程序。这可能会导致很多睡眠会议闲散(这会消耗工人)。

实际使用的线程数取决于数据库的活动程度。您可能有1,000个数据库,如果大多数数据库在95%的时间处于空闲状态,则不会有任何问题。看来您的数据库变得越来越活跃,并且吃了更多的线程。这就是它的长短。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.