2
返回固定行数后查询暂停
我有一个视图,它可以快速(几秒钟)运行多达41条记录(例如TOP 41),但要花44分钟或更长的时间才能显示44条或更多条记录,如果使用TOP 42或运行,则结果会中等TOP 43。具体来说,它将在几秒钟内返回前39条记录,然后暂停近三分钟,然后返回其余记录。查询TOP 44或时,此模式相同TOP 100。 该视图最初是从基本视图派生的,仅在底部代码中添加了一个过滤器,即最后一个过滤器。如果我从基础链接子视图,或者用嵌入的基础代码编写子视图,似乎没有什么区别。基本视图仅在几秒钟内返回100条记录。我想我可以使子视图的运行速度与基础视图一样快,而不是慢50倍。有人看到过这种行为吗?关于原因或解决方案的任何猜测? 在我测试了所涉及的查询后的最后几个小时,这种行为一直是一致的,尽管在事情开始变慢之前返回的行数略有起伏。这不是新事物。我现在正在查看它,因为总运行时间是可以接受的(<2分钟),但是至少在几个月以来,我已经在相关的日志文件中看到这种暂停。 封锁 我从未见过查询被阻塞,即使数据库上没有其他活动(经sp_WhoIsActive验证),问题仍然存在。基本视图包括所有NOLOCK内容,这是值得的。 查询 这是子视图的简化版本,为简单起见,基本视图都已内联。它仍然显示出运行时间的跳跃,大约有40条记录。 SELECT TOP 100 PERCENT Map.SalesforceAccountID AS Id, CAST(C.CustomerID AS NVARCHAR(255)) AS Name, CASE WHEN C.StreetAddress = 'Unknown' THEN '' ELSE C.StreetAddress END AS BillingStreet, CASE WHEN C.City = 'Unknown' THEN '' ELSE SUBSTRING(C.City, 1, 40) END AS BillingCity, …