डेडलॉक ग्राफ पर विक्टिमलेस एंट्री क्यों हैं?


11

मैं सीखने की कोशिश कर रहा हूं कि SQL Server 2008 के डेडलॉक ग्राफ का विश्लेषण कैसे किया जाए , और मैं एक खाली <victim-list>नोड के साथ प्रविष्टियों का एक बहुत कुछ पा रहा हूं । मुझे समझ नहीं आ रहा है कि ये प्रविष्टियाँ क्या दर्शाती हैं: अगर कोई पीड़ित नहीं है, तो मैं उस वेट्रेस को कैसे पहचान सकता हूं जो गतिरोध पैदा कर रहा है? इन प्रविष्टियों का क्या मतलब है?

यहाँ मैं देख रहा हूँ प्रविष्टियों का एक त्वरित उदाहरण है:

<deadlock-list>
 <deadlock>
  <victim-list />
  <process-list>
   <process id="processd2b6508" taskpriority="0" logused="10000" waittime="31" schedulerid="63" kpid="9104" status="suspended" spid="69" sbid="0" ecid="184" priority="0" trancount="0" lastbatchstarted="2012-07-30T01:10:45.550" lastbatchcompleted="2012-07-30T01:10:45.550" clientapp=".Net SqlClient Data Provider" hostname="XXXXXXX" hostpid="3648" isolationlevel="read committed (2)" xactid="30461033" currentdb="5" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056">
    <executionStack>
     <frame procname="" line="1" sqlhandle="0x020000002340c50225c17d0eec9bf7c51129348edffd1c70" /> 
     <!--About 2 more frame tags... -->
    </executionStack>
    <inputbuf /> 
   </process>
   <!-- 3 or so more process tags... -->
  </process-list>
  <resource-list>
   <exchangeEvent id="Pipeb005eeba0" WaitType="e_waitPipeNewRow" nodeId="7">
    <owner-list>
     <owner id="processd23fdc8" /> 
    </owner-list>
    <waiter-list>
     <waiter id="processd2b6508" /> 
    </waiter-list>
   </exchangeEvent>
   <!-- 2 more exchangeEvents -->
  </resource-list>
 </deadlock>
</deadlock-list>

** संपादित करें ** जैसा कि अनुरोध किया गया है, यह एक प्रश्न है जिसे किसी प्रश्न की पहचान करने के लिए इसका उपयोग किया जाता है:

select sql_handle as Handle,
    SUBSTRING(st.text, (qs.statement_start_offset/2)+1, 
        ((CASE qs.statement_end_offset
          WHEN -1 THEN DATALENGTH(st.text)
         ELSE qs.statement_end_offset
         END - qs.statement_start_offset)/2) + 1) AS Text

from sys.dm_exec_query_stats as qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
where sql_handle = --0x04000D00E3572A56542E4601CE9E00010100001000000000

से RyanBoyer.net


SQL सर्वर का मेरा संस्करण 10.50.1617.0
Slider345

जवाबों:


9

ExchangeEvent & e_waitPipeNewRow से पता चलता है कि आपने बार्टन डंकन के नाम से भी जाना जाता है , जिसे अनायोजित-अनवील्ड टर्म: "इंट्रा-क्वेरी पैरलल थ्रेड डेडलॉक" कहा है

अधिकांश इंट्रा-क्वेरी समानतावाद गतिरोधों को कीड़े माना जाता है, हालांकि उनमें से कुछ को ठीक करने के लिए जोखिम भरा बग हो सकता है इसलिए एक फिक्स संभव नहीं हो सकता है। यदि आप एक में चलते हैं और आप पहले से ही नवीनतम एसक्यूएल सर्विस पैक पर हैं, तो आपका सबसे अच्छा दांव वर्कअराउंड की जांच करना हो सकता है।

तो, बहुत कुछ आप इसके अलावा नहीं कर सकते हैं:

  • सुनिश्चित करें कि आप नवीनतम सर्विस पैक और संचयी अद्यतन पर हैं।
  • क्वेरी के प्रदर्शन को बेहतर बनाने के लिए अनुक्रमित और / या अन्य अनुकूलन की पहचान करने का प्रयास करें। आप उल्लेख करते हैं कि inputbuf आबाद नहीं है, लेकिन आप ग्राफ़ XML में sqlhandle के माध्यम से खेलने में क्वेरी की पहचान करने में सक्षम हो सकते हैं। यदि आपको कुछ नहीं मिलता है तो ट्रेस चलाने का प्रयास करें और इन गतिरोधों के समय के साथ सहसंबंधित करें।
  • MAXDOPइस क्वेरी के लिए कम करें या MAXDOP(1)एकल-थ्रेडेड निष्पादन को बाध्य करने का प्रयास करें। ध्यान रखें कि आप गतिरोध को ठीक कर सकते हैं लेकिन समानता को सीमित करके प्रदर्शन के मुद्दों का एक अलग सेट पेश करते हैं।
  • Microsoft के साथ एक समर्थन कॉल खोलें। यह संभव है कि ए) उनके पास इस परिदृश्य या बी के लिए एक गैर-सार्वजनिक हॉटफ़िक्स है) क्योंकि इन इंट्रा-क्वेरी गतिरोधों को ऐसे कीड़े के रूप में माना जाता है जो वे ठीक करने के लिए आपके साथ काम करना चाहते हैं।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.