并行执行作为提升查询响应时间,提高用户体验的一种有效手段被大家所熟知,感兴趣的朋友可以看我以前的博客SQL Server优化技巧之SQL Server中的"MapReduce", SQL Server优化器特性-位图过滤(Bitmap),然而正如我一直强调的,任何事物均有利弊,重点在于抉择.近日有朋友问我关于在今年7月份SQL Saturday中分享的并行执行中关于并行死锁的内容,这里我就详细解释下我举的实例中的并行死锁.
并行死锁我们可以理解为SQL Server的”BUG”,即按照并行方式执行时遭遇特定异常使得执行无法继续.官方给的解决方式大多很简单,改为串行就可以了.但其中还是有值得我们深究的地方以便我们更好的利用并行.
注:由于案例涉及的并行知识点较多,缺乏相关知识的同学可以先预览一下我当时分享的PPT,如果有不清楚的地方也可以私信我. Inside Parallel Query
闲篇到此,上实例
生成测试数据
CREATE TABLE Numbers ( Number INT NOT NULL, CONSTRAINT PK_Numbers PRIMARY KEY CLUSTERED (Number) WITH FILLFACTOR = 100 ) INSERT INTO Numbers SELECT (a.Number * 256) + b.Number AS Number FROM ( SELECT number FROM master..spt_values WHERE type = 'P' AND number <= 255 ) a (Number), ( SELECT number FROM master..spt_values WHERE type = 'P' AND number <= 255 ) b (Number)