SQL Server 实例用完工作线程

Mar*_*man 4 sql-server sharepoint sql-server-2008-r2

我有一个 8 核(576 个最大工作线程)的 SQL Server 2008 R2 SP3 标准版 64 位实例,32 GB RAM(MaxMem = 28000)。它是 SharePoint 安装的数据存储,具有 218 个数据库。

它收到了数十条“SQL Server 失败,错误代码为 0xc0000000,无法生成线程来处理新的登录或连接。” 每天错误,但没有其他错误。我发现 MAXDOP = 0,这对 SharePoint 不利。我逐渐(数周后)将 MAXDOP 降低到 1。当我这样做时,这些错误的频率在大多数日子里都降到了零。但我还是会偶尔看到他们。

sys.dm_os_wait_stats 关于 THREADPOOL 等待是这样说的:

waiting_tasks_count wait_time_ms    max_wait_time_ms    signal_wait_time_ms
26149               474516          4428                9
Run Code Online (Sandbox Code Playgroud)

服务器上次重启时间为 2018 年 3 月 25 日下午 5:55,当前服务器时间为 2018 年 4 月 20 日晚上 10:07。除了在保存 tempdb 文件的驱动器上使用连接和顺序提示以及慢速存储写入之外,sp_Blitz 没有发现任何有趣的东西。

这是在私有云中的虚拟机上。增加 CPU 的数量会非常昂贵,虽然它被大量使用,但 CPU 使用率似乎不是问题。在这种情况下,增加最大工作线程数是否是一个合理的尝试,我应该不理会它并忍受偶尔的 17189 错误,还是有其他选择?

Eri*_*ing 6

增加 MWT 会导致SOS_SCHEDULER_YIELD等待时间增加。不是世界末日,而是把它想象成在老师的课堂上添加一群孩子。突然之间,每个孩子都更难获得关注。

当一个进程用完它的 4ms时间段时,它前面可能会有更多的线程等待进入 CPU。很难说这种权衡是否会导致性能变差。

您可以尝试逐步增加 MWT a。

这是 SQL Server 管理它的方式

坚果

请注意,核心数翻倍并不会使 MWT 翻倍,并且 1 个核心与 4 个核心获得的数字相同?

这就像一个标志,什么的。

等式是:512 + ((logical CPUs - 4) * 16),这意味着在 10 个内核时,您将拥有 608 个线程,而在 12 个内核时,您将拥有 640 个线程。

这些都是相当安全的增量尝试,但如果没有与 Microsoft 的支持电话,我不会考虑这些。

希望这可以帮助!