在我们的生产服务器上,由于某种原因,在特定的时间内,线程计数会反复到某一点,虽然CPU利用率是正常的(30-50%),但查询开始运行缓慢我们这么多更多阻止声明。
我不知道在哪里查看它,基本上当我们的网站正常运行时,线程数约为150个线程,但在一天中的特定时间(1:30到2:30),它会出现270 threads.There没有额外的sql事务继续,一切正常,但线程计数增长,sql开始表现得非常慢。
重新启动SQL服务后,线程计数立即恢复正常,我们的网站再运行24小时。
我们使用的是SQL Server 2005,它是24核心机器。
任何想法?
答案 0 :(得分:5)
阻止语句窃取工作者(sys.dm_os_workers
),这样服务器就会产生更多的工作来处理传入的任务。在24核心处,默认情况下您将有700 max worker threads
个开箱即用。因此,看到270'线程'不是问题,完全在正常的功能参数范围内。你真正的问题必须是阻止,你必须相应地调查它:谁阻止谁和为什么。我敢打赌,你有一个在1:30到2:30之间运行的工作,它锁定了数据库的大部分(可能是一个删除工作?),你的查询阻塞了锁定的行。你必须调查,找到根本原因,并采取相应的行动。重新启动不是解决方案,也不是指责不相关的组件(线程计数)。使用Activity Monitor,使用Who Is Active,遵循Waits and Queues方法的有条理方法。有很多方法可以识别真正的问题。由于线程计数,SQL Server 永远不会显得慢。它只是doesn't work like that。
答案 1 :(得分:1)
您可以使用MAXDOP查询提示来控制并行度。有关详细信息,请查看此文章:
答案 2 :(得分:0)
感谢您的宝贵意见,是的,没有什么是sql的行为,我们的网站基于Ektron CMS负责,Ektron CMS的功能之一(即PageBuilder),虽然对这段内容进行操作非常严重,但我们的网站有大约1000万用户,而且可能因为这会阻止表格,SQL Server会疯狂并且响应不好。
我们终于消除了这个问题。