进来不断的进行数据的清除和整理,结果一个过程花费了48个小时还没有结果。按照我们任务的规模,通常可以在几个小时内完成。
考察了内存 CPU负载都不高。问题究竟在哪里呢?
决定考察下动态管理视图,首先看了sys.dm_od_tasks。
使用sessionid做过滤,看到了9个task,检查了下文档明白了,因为机器上有8个CPU,外加一个协调的task。
在这个视图里,还看到所有的task都处于suspended状态,显然所有任务都被阻塞了。
那么她们都在等待什么呢?
于是我查了下sys.dm_os_waiting_tasks视图。它可以告诉我所有等待中的task在干什么。还是以session_id为filter。
看到协调进程的等待类型是PAGEIOLATCH_EX,资源描述是16:1:8094245,说在等着给某个page加锁,并把它独到内存中。
而其他的8个task均被该task所阻塞。
联系我们的sql是在做update操作,到此,我们已经清楚了,协调进程首先给页面加锁,读取到内存中,其他的工作task才能进行update操作。因此所有的花费均在update之上。
看来我们需要检查下是否需要这样的update了。