เหตุใดจึงมีรายการที่ตกเป็นเหยื่อบนกราฟการหยุดชะงัก


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>

** แก้ไข ** ตามที่ร้องขอนี่คือแบบสอบถามที่ใช้เพื่อระบุแบบสอบถามโดยเป็น sqlhandle:

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 Server รุ่นของฉันคือ 10.50.1617.0
Slider345

คำตอบ:


9

ExchangeEvent & e_waitPipeNewRow แนะนำให้คุณได้ทำงานในสิ่งที่บาร์ตดันแคนหมายเกินไปเป็นระยะ Annoyingly-เทอะทะ "ภายในแบบสอบถามชะงักงันขนานกระทู้"

การชะงักงันแบบขนานภายในแบบสอบถามส่วนใหญ่ถือว่าเป็นข้อบกพร่องแม้ว่าบางรายการอาจเป็นข้อบกพร่องที่มีความเสี่ยงในการแก้ไขดังนั้นการแก้ไขอาจไม่สามารถทำได้ หากคุณพบปัญหาหนึ่งและคุณมีอยู่แล้วใน SQL Service Pack ล่าสุดทางออกที่ดีที่สุดของคุณอาจเป็นการตรวจสอบวิธีแก้ไขปัญหา

ดังนั้นไม่มากที่คุณสามารถทำได้นอกเหนือจาก:

  • ให้แน่ใจว่าคุณใช้ Service Pack รุ่นล่าสุดและอัปเดตสะสม
  • พยายามระบุดัชนีและ / หรือการเพิ่มประสิทธิภาพอื่น ๆ เพื่อปรับปรุงประสิทธิภาพของแบบสอบถาม คุณพูดถึงว่า inputbuf ไม่ได้บรรจุ แต่คุณสามารถระบุแบบสอบถามในการเล่นผ่าน sqlhandle ในกราฟ XML หากคุณไม่ได้อะไรจากการลองใช้การติดตามและสัมพันธ์กับเวลาที่การหยุดชะงักเหล่านี้เกิดขึ้น
  • ลดMAXDOPการสืบค้นนี้หรือพยายามMAXDOP(1)บังคับให้ดำเนินการแบบเธรดเดียว โปรดทราบว่าคุณอาจแก้ไขปัญหาการหยุดชะงัก แต่แนะนำชุดของปัญหาประสิทธิภาพที่แตกต่างกันโดยการ จำกัด การขนาน
  • เปิดการโทรสนับสนุนด้วย Microsoft เป็นไปได้ว่า a) พวกเขามีโปรแกรมแก้ไขด่วนที่ไม่ใช่แบบสาธารณะสำหรับสถานการณ์นี้หรือ b) เนื่องจากการหยุดชะงักภายในแบบสอบถามเหล่านี้ถือเป็นข้อบกพร่องที่พวกเขาอาจต้องการทำงานร่วมกับคุณเพื่อค้นหาการแก้ไข
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.