你的位置:首页 > 数据库

[数据库]SQL Server并行死锁案例解析

并行执行作为提升查询响应时间,提高用户体验的一种有效手段被大家所熟知,感兴趣的朋友可以看我以前的博客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 NumbersSELECT  (a.Number * 256) + b.Number AS NumberFROM   (    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)

View Code

接下来我们执行如下语句,取30000下最大偶数,此时我将执行并行数maxdop随意调整为奇数,3,5,7我的执行都可以迅速返回结果.

执行代码

set statistics time onselect    maxN=max(num.number)from dbo.numbers as numwhere    num.number<30000   and convert(integer,convert(varchar(max),num.number)) % 2=0option(Maxdop 3,-----5,7querytraceon 8649);

View Code

但当我将并行数调整为偶数时,执行时间居然长达数秒…打开trace profiler跟踪dead lock chain我们发现,当并行数为偶数时出现了死锁.

如图1-1,1-2,1-3

select    maxN=max(num.number)from dbo.numbers as numwhere    num.number<30000   and convert(integer,convert(varchar(max),num.number)) % 2=0option(Maxdop 4,-----2,6querytraceon 8649);

View Code

 

                                    图1-1

韩国旅游多少钱跟团韩国旅游网韩国特价旅游韩国旅游时间韩国旅游跟团如何前往马来西亚仙本那? 保加利亚海滨:邂逅迷人黑海[二] 野性的呼唤 20处中国最原始的美景地 公路之旅 爱尔兰的“野性大西洋之路” 游西藏不容错过的十件藏品 世上最美的河 西藏拉萨河 北京植物园门票_北京植物园门票价格_北京植物园门票多少钱 宁夏旅游——少数民族地区旅行23忌 各种驱蚊偏方防蚊“神器”靠不靠谱 专家帮你辨真伪 行摄秭归芝兰大峡谷 满山香草和野花 摄影家的天堂 寻找信仰的力量 南京现最清新铁路 铁路被绿色植被环绕(图) 厦门自驾游,走哪条路线好? 厦门游玩住在哪里比较方便 厦门三日游,请安排一下详细的行程! 厦门游玩攻略 MAX13087ECPA+ Datasheet MAX13087ECPA+ Datasheet MAX8640ZEXT25+T Datasheet MAX8640ZEXT25+T Datasheet MAX13102EETL+ Datasheet MAX13102EETL+ Datasheet 东莞到1933老场坊旅游 东莞到1933老场坊旅游 东莞到1933老场坊旅游 东莞到2000年奥运村旅游 东莞到2000年奥运村旅游 东莞到2000年奥运村旅游 东莞到2010年上海世博会阿联酋馆旅游 东莞到2010年上海世博会阿联酋馆旅游 东莞到2010年上海世博会阿联酋馆旅游