SQL Parallelism死锁

时间:2017-02-18 21:49:42

标签: sql sql-server parallel-processing

直到昨天,我们一直在我们的生产sql上运行最大程度的paralellism 1(paralellism off)的SQL server 2016。这个prod sql不是报告sql或类似的东西。这个sql为网站提供了大量的操作。

我们在1个Numa节点中有16个虚拟处理器。 (只有一个,没有划分)所以,我们将prod sql maxdop从1改为16,并且paralellism的成本是50。

由于我们更改了此设置,因此我们在sql错误日志中遇到了并列故障死锁。其中一个是这样的;

2017-02-17 23:10:22.83 spid4s      PAGE: 6:1:12942122             CleanCnt:2     
Mode:IX Flags: 0x3
2017-02-17 23:10:22.83 spid4s       Grant List 1:
2017-02-17 23:10:22.83 spid4s         Owner:0x000000C8CBCF5840 Mode: IX            
Flg:0x40 Ref:0 Life:02000000 SPID:169 ECID:0 XactLockInfo: 0x000000C417DD64F8
2017-02-17 23:10:22.83 spid4s         SPID: 169 ECID: 0 Statement Type:     
UPDATE Line #: 1
2017-02-17 23:10:22.83 spid4s         Input Buf: Language Event: UPDATE op         
SET op.InvoiceDate = CAST(ud.InvoiceDate AS DATETIME)
FROM TROrderProduct op
    INNER JOIN AX_UpdateInvoiceDatesIds ud ON op.PKOrderProductId =     
ud.OrderProductID
WHERE ud.InvoiceDate BETWEEN GETDATE()-10and GETDATE()-1

--------------------    

2017-02-17 23:10:22.83 spid4s      PAGE: 6:1:14092111             CleanCnt:2             
Mode:X Flags: 0x3
2017-02-17 23:10:22.83 spid4s       Grant List 3:
2017-02-17 23:10:22.83 spid4s         Owner:0x000000CFBC765140 Mode: X            

Flg:0x40 Ref:0 Life:02000000 SPID:108 ECID:0 XactLockInfo: 0x000000CF14380440
2017-02-17 23:10:22.83 spid4s         SPID: 108 ECID: 0 Statement Type:     
ALTER INDEX Line #: 1
2017-02-17 23:10:22.83 spid4s         Input Buf: Language Event: 
DECLARE @return_value int

EXEC    @return_value = [dbo].[IndexOptimize]
        @Databases = N'CapuaDB', @UpdateStatistics = N'ALL', @LogToTable =     N'Y', @MaxDOP=1

SELECT  'Return Value' = @return_value

您认为我们不应该将此设置更改为16吗?如果是这样,这个的正确价值是什么?我非常研究这个主题并决定这样做16因为我们在同一个numa节点有16个CPU。但无论如何,我们每天都遇到这种僵局问题。

任何想法都会受到赞赏。

感谢。

0 个答案:

没有答案