मेरे पास SQL Server 2016 में तीन क्लस्टर किए गए Columnstore Index (CCI) टेबल हैं। ये सभी CCI एक ही पार्टीशन स्कीम में हैं, जो टेनेंट आईडी पर आधारित है। हाल ही में, और असंगत रूप से, मुझे इन तालिकाओं में जुड़ने से सरल चुनिंदा बयानों पर गतिरोध मिल रहे हैं। उदाहरण क्वेरी जो गतिरोध:
SELECT TOP 33 r.tenantid
FROM Table_r r
INNER JOIN Table_cm cm ON r.MyKey=cm.MyKey
INNER JOIN Table_pe pe ON r.MyKey=pe.MyKey
WHERE r.TenantId = 69
AND pe.TenantId = 69
AND cm.TenantId = 69
त्रुटि संदेश:
लेन-देन (प्रोसेस आईडी 56) एक अन्य प्रक्रिया के साथ जेनेरिक प्रतीक्षा योग्य वस्तु संसाधनों पर डेडलॉक किया गया था और इसे डेडलॉक पीड़ित के रूप में चुना गया है। लेन-देन फिर से करें।
सुराग:
- यदि क्वेरी CCI के अलावा किसी अन्य इंडेक्स का उपयोग करता है तो यह गतिरोध नहीं है।
- अगर मैं तीन में से दो टेनेंटिड फिल्टर निकालता हूं तो यह गतिरोध नहीं है।
- यदि मैं शीर्ष 32 का चयन करता हूं या कम करता है तो यह गतिरोध नहीं है।
- अगर मैं विकल्प (MAXDOP 1) जोड़ता हूं तो यह गतिरोध नहीं है।
- मैं अपने तले हुए PROD प्रतिकृति, PROAD READ-ONLY द्वितीयक, और PROD में ही इसे हटा सकता हूं।
- मैं DEV या INT में इस व्यवहार को रद्द नहीं कर सकता।
- यह अभी भी गतिरोध है अगर मैं सभी 3 टेबल जॉइन के साथ (NOLOCK) जोड़ देता हूं
- क्वेरी केवल गतिरोध है। यह गतिरोध तब होगा जब कोई अन्य सक्रिय प्रक्रिया नहीं होगी।
- समानता के बिना क्वेरी योजना गतिरोध नहीं करती है
हमारे PROD संस्करण:
Microsoft SQL Server 2016 (SP2-CU5) (KB4475776) - 13.0.5264.1 (X64) जनवरी 10 2019 18:51:38 कॉपीराइट (c) Microsoft कॉर्पोरेशन एंटरप्राइज़ संस्करण (64-बिट) Windows Server 2012 R2 मानक 6.3 (बिल्ड 9600 पर) :) (हाइपरविजर)
मैं इस क्वेरी पर गतिरोध कैसे रोकूं?