我们有一个ETL的工作,不时挂断电话。
在这种情况下,我查看了sp_who2并没有阻塞,这是系统上唯一活动的查询。
这是从sysprocesses转储:
spid kpid blocked waittype waittime lastwaittype waitresource dbid uid cpu physical_io memusage login_time last_batch ecid open_tran status cmd 61 6276 0 0x00BB 3659611 CXPACKET 5 9 184826204 114737 2 35:53.8 35:53.8 0 2 suspended INSERT 61 6540 0 0x0000 0 SOS_SCHEDULER_YIELD 5 9 3503094 513 0 35:53.8 35:53.8 2 0 runnable INSERT 61 360 0 0x0000 0 SOS_SCHEDULER_YIELD 5 9 3377297 420 0 35:53.8 35:53.8 4 0 runnable INSERT 61 4348 0 0x0000 0 SOS_SCHEDULER_YIELD 5 9 3446657 515 0 35:53.8 35:53.8 3 0 runnable INSERT 61 5532 0 0x0000 0 SOS_SCHEDULER_YIELD 5 9 3094360 443 0 35:53.8 35:53.8 5 0 runnable INSERT
我怀疑查询是并行的,并阻止自己,因为所有的活动发生在同一个spid。 但是我对如何进一步排除故障感到茫然。
对这里发生的事情有任何想法? 或者我可以采取什么其他步骤来解决这个问题,如果它再次发生?
块types00BB是CXPACKET,这意味着数据库正在等待另一个线程完成。 其他4个线程正在运行,因为它们没有显示waittype。 显示最后一个等待types的SOS_SCHEDULER_YIELD表示SQL Server正在解除调度该线程,因为它还有其他要做的事情,这些事情更容易完成,因此它首先处理它们。
您需要调整查询,因为您可能有某种需要解决的索引问题。