Sql 增加由“返回的行”;选择top";突然使查询速度慢得令人难以置信
在手动取消之前,已运行约2分钟的负载突然变为90分钟的运行 这是一个简单的阴影查询:Sql 增加由“返回的行”;选择top";突然使查询速度慢得令人难以置信,sql,sql-server,performance,Sql,Sql Server,Performance,在手动取消之前,已运行约2分钟的负载突然变为90分钟的运行 这是一个简单的阴影查询: select fields into shadow_table from table where date = '8/23/2011' date上有一个非聚集索引 如果我将查询更改为select Top300000只需2秒钟即可完成 Top400000只需3分钟即可运行 Top500000我等得很无聊,所以取消了 我们的服务器团队在运行时显示了大量的自阻塞 有人能提出可能的瓶颈问题吗?遵循经验证的方法来识
select fields
into shadow_table
from table
where date = '8/23/2011'
date
上有一个非聚集索引
如果我将查询更改为select
只需2秒钟即可完成Top300000
只需3分钟即可运行Top400000
我等得很无聊,所以取消了Top500000
CXPACKET
处停止,也不要用“自阻塞”作为解释
select w.last_wait_type,
wt.wait_type,
wt.resource_description,
wt.blocking_session_id,
t.pending_io_count,
r.*
from sys.dm_os_tasks t
left join sys.dm_os_waiting_tasks wt on wt.waiting_task_address = t.task_address
join sys.dm_os_workers w on t.worker_address = w.worker_address
join sys.dm_exec_requests r on t.session_id = r.session_id
where r.session_id = <queryspid>;
选择w.last\u wait\u类型,
wt.wait_类型,
wt.resource_说明,
wt.blocking_session_id,
t、 待统计,
r、 *
从sys.dm_os_tasks t
左连接sys.dm_os_waiting_tasks wt on wt.waiting_task_address=t.task_address
加入sys.dm_os_workers w on t.worker_address=w.worker_address
在t.session\u id=r.session\u id上加入sys.dm\u exec\u请求r
其中r.session_id=;
过时的统计数据。
自阻塞只在并行时发生,超长并行运行(与标准相比)通常意味着过时的统计数据。这也可能是数据基数的变化
第1步应该在源表上运行一个带有FULLSCAN的
更新统计信息。如果它看起来是一个存档查询,那么在运行时不会更新记录,您可以完全关闭阻塞。其他需要完整性但使用您的记录的查询不会受到影响-它们管理自己的锁定。还要确保您的字段是非聚集索引include的一部分。如果不这样做,则必须使用RID查找返回表以获取该数据
create nonclustered index ix_whatever on YourTable (date)
include (field1, field2, ...)
你能解释一下“自阻塞”是什么意思吗?它以spid 51的形式运行,并报告被spid 51阻塞。它是等待型的数据包吗?这不是一个块,您需要按照槽,看看子任务,看看他们在做什么。请参阅我更新的帖子。我们避免在大多数表上覆盖索引,因为性能是可以接受的。当它正常运行时,2分钟的加载时间就可以了。@JNK你是个救生员。