我们正在尝试了解 SQL 服务器突然自行重启的问题 -
它是一个 SQL server 2012 SP4 -GDR 应用,启用了 40 个 CPU 的 HT,因此总共有 80 个逻辑处理器-
MAXDOP=8 , CTOP 5
从我们发现的错误日志中
/**********************/
BEGIN 堆栈转储
非屈服调度程序 /**********************/
仅在重新启动 SQL 时出现错误消息。也没有像检查那样创建迷你转储。
是的,当时我们有很多查询正在运行。前 3 名等待是:-
1.TranLogIO
2.CXPACKET
3.PAGELATCH SH
然而,我们也注意到SOS WORKER
从系统健康 XE 收集的等待调用,我相信这不过是THREADPOOL
. 因此,我进一步分析了该系统运行状况中的查询处理详细信息,并发现在未产生调度程序错误时记录了以下错误
19:46
maxworkers
- 2944workers created
789oldest pending taskwait time
0 待定任务 419:51
maxworkers
- 2944workers created
982oldest pending taskwait time
256987 待定任务 165在 19:51,我们开始看到重启发生了。
问题是如果上述计算中仍有近 2000 个工作人员可用,为什么会有线程池等待。另外,当查询有这么多调度程序可供运行并完成对在 CXPACKETS 上等待的一堆查询的请求时,为什么那些待处理的任务计数为 165?
编辑:更新我的问题以等待 XE
SOS_MEMORY_TOPLEVELBLOCKALLOCATOR
当我阅读上面的信息时,请在这里等待https://www.sqlskills.com/help/waits/sos_memory_toplevelblockallocator/
根据博客,在 SP3 CU 中有一个修复,但使用 TF T8075:我目前使用的是 SP4-GDR 最新补丁,是否仍需要应用 TF,尽管我没有看到Failed allocate pages: FAIL_PAGE_ALLOCATION 513
错误日志中的任何消息
不确定它是否有帮助-我看到总服务器内存不时下降一个演出,然后匹配到目标服务器内存,即 = 最大服务器内存 (750GB)
大多数时候总=目标=最大服务器内存。滴水只是演出而已,并不多
内存信息 = 总内存:880 GB 最大内存:750GB 最小服务器内存:130 GB 它是一个 2 节点 Windows 集群,没有共享其他 SQL 实例。资源调控器未启用
谢谢
我首先要说分析 MS 人员或了解它的人中转储的最佳人选。我只想从您发布的日志中指出一些基础知识
请看那个
taskwait time 256987
和pending task 165
。这意味着调度程序已挂起,并且有 165 个任务正在等待它获取调度程序并运行。在这种情况下,MS SQL Server 无法摆脱这个挂起的调度程序场景并等待了一段时间,但它再次决定最好重新启动自己以摆脱这个挂起的调度程序场景,因此它重新启动。现在,它挂起的原因超出了我的能力范围,您发布的信息无法说明。另请注意,为线程分配了一个调度程序,它应该在该调度程序上运行,这就是为什么有这么多线程在这个挂起的调度程序上等待。