যদি কোনও প্যারালালিজম এক্সচেঞ্জ ইভেন্টের অচলাবস্থার শিকার হয়, তবে সমস্যা কি?


10

আমরা আমাদের উত্পাদনের পরিবেশে (এসকিউএল সার্ভার ২০১২ এসপি 2 - হ্যাঁ ... আমি জানি ...) এই প্রচুর পরিমাণে আন্তঃ-প্রশ্নের সমান্তরাল থ্রেড ডেডলকগুলি দেখছি, তবে প্রসারিত ইভেন্টের মাধ্যমে ধরা পড়া ডেডলক এক্সএমএলটির দিকে তাকালে, ভুক্তভোগী-তালিকা খালি।

<victim-list />

ডেডলকিংটি 4 টি থ্রেডের মধ্যে উপস্থিত হয়, দুটি সাথে WaitType="e_waitPipeNewRow"দুটি এবং দুটি এর সাথে থাকে WaitType="e_waitPipeGetRow"

 <resource-list>
  <exchangeEvent id="Pipe13904cb620" WaitType="e_waitPipeNewRow" nodeId="19">
   <owner-list>
    <owner id="process4649868" />
   </owner-list>
   <waiter-list>
    <waiter id="process40eb498" />
   </waiter-list>
  </exchangeEvent>
  <exchangeEvent id="Pipe30670d480" WaitType="e_waitPipeNewRow" nodeId="21">
   <owner-list>
    <owner id="process368ecf8" />
   </owner-list>
   <waiter-list>
    <waiter id="process46a0cf8" />
   </waiter-list>
  </exchangeEvent>
  <exchangeEvent id="Pipe13904cb4e0" WaitType="e_waitPipeGetRow" nodeId="19">
   <owner-list>
    <owner id="process40eb498" />
   </owner-list>
   <waiter-list>
    <waiter id="process368ecf8" />
   </waiter-list>
  </exchangeEvent>
  <exchangeEvent id="Pipe4a106e060" WaitType="e_waitPipeGetRow" nodeId="21">
   <owner-list>
    <owner id="process46a0cf8" />
   </owner-list>
   <waiter-list>
    <waiter id="process4649868" />
   </waiter-list>
  </exchangeEvent>
 </resource-list>

তাই:

  1. ভিকটিম তালিকা খালি
  2. ক্যোয়ারী চালিত অ্যাপ্লিকেশনটি ত্রুটি করে না এবং কোয়েরিটি সম্পূর্ণ করে
  3. আমরা যতদূর দেখতে পাচ্ছি, গ্রাফটি ক্যাপচার করা ব্যতীত কোনও সুস্পষ্ট সমস্যা নেই

অতএব, গোলমাল বাদে এই কি উদ্বিগ্ন হওয়ার কিছু?

সম্পাদনা: পলের উত্তরের জন্য ধন্যবাদ, আমি দেখতে পাচ্ছি যে সমস্যাটি সম্ভবত ঘটে এবং টেম্পডিবি স্পিলের সাহায্যে এটি সমাধান হয়ে যায়। এখানে চিত্র বর্ণনা লিখুন

উত্তর:


11

কোনও অবদানের গ্রাফ যখন কোনও ইন্টার-কোয়েরি সমান্তরাল অচলাবস্থা সমাধান করা হয় তখন ডেডলক গ্রাফটি এভাবে দেখলে আমি অবাক হব না (সুতরাং পারফরম্যান্স বাদে কোনও শিকার নেই)।

আপনি এই তত্ত্বটি এক্সচেঞ্জ স্পিল ক্যাপচার করে এবং ডেডলকের সাথে তাদের মেলে (বা না) দিয়ে নিশ্চিত করতে পারেন।

অচলাবস্থার সমাধানের জন্য টেম্পডবিতে এক্সচেঞ্জ বাফার লেখার পক্ষে আদর্শ নয়। আদেশ কার্যকরকরণ ক্রিয়াকলাপের ক্রিয়াকলাপগুলি সরিয়ে দেওয়ার জন্য দেখুন (যেমন একটি সমান্তরাল মার্জ জোড়কে খাওয়ানো অর্ডার-সংরক্ষণের এক্সচেঞ্জ) merge যদি না এটি লক্ষণীয় পারফরম্যান্সের সমস্যা সৃষ্টি না করে এবং আপনার অন্যান্য বিষয়গুলির উদ্বেগের বিষয় রয়েছে।

আগ্রহের বাইরে, এই সমস্যাটি কি উচ্চ ভাঙন / পুরানো পরিসংখ্যান দ্বারা আরও বাড়িয়ে তোলা হতে পারে?

খণ্ডন, না। পুরানো পরিসংখ্যান: কোন নির্দিষ্ট অর্থে আমি ভাবতে পারি না, না। অবশ্যই অপ্রকাশিত পরিসংখ্যান সাধারণত খুব ভাল একটি জিনিস সাধারণত।

এখানে মূল বিষয়টি হ'ল সমান্তরালতা সবচেয়ে ভাল কাজ করে যখন থ্রেডগুলির মধ্যে যতটা সম্ভব নির্ভরতা থাকে; সংরক্ষিত ক্রম বদলে দুষ্টু নির্ভরতা প্রবর্তন করে। জিনিসগুলি সহজেই আচ্ছন্ন হতে পারে এবং লগজাম পরিষ্কার করার একমাত্র উপায় হ'ল টেম্পডবিতে এক্সচেঞ্জগুলিতে রাখা বেশ কয়েকটি সারি ছড়িয়ে দেওয়া


-1

এই অ-সমালোচনামূলক, "স্পিল রিলিজিং উইল সিলিং" ডেডলকগুলি আরও গুরুত্বপূর্ণ ডেডলকগুলি থেকে আলাদা করতে, কিছু অনুসন্ধান শব্দার্থবিজ্ঞান এক্সডিএল কাঠামোর ক্ষেত্রে প্রয়োগ করা যেতে পারে।

উদাহরণ আউটপুট

নিম্নলিখিত এসপি বাক্সটির বাইরে কাজ করবে না কারণ এটি ufn_ExtractSubstringsByPattern () এর উপর নির্ভর করে তবে সেই পদ্ধতিটি এমন কোনও কিছু দিয়ে প্রতিস্থাপন করা যেতে পারে যা সরাসরি স্বতন্ত্র গণনা ফিরিয়ে দেয়।

ALTER view [Common].[DeadLockRecentHistoryView]
as
/*---------------------------------------------------------------------------------------------------------------------
    Purpose:  List history of recent deadlock events

    Warning:  The XML processing may hit a recursion limit (100), suggest using "option (maxrecursion 10000)".

    Xdl File:
        The SSMS deadlock file format .XDL format (xml) has changed with later versions of SQL Server.  This version tested with 2012.

    Ring Buffer issues:
        https://connect.microsoft.com/SQLServer/feedback/details/754115/xevents-system-health-does-not-catch-all-deadlocks
        https://www.sqlskills.com/blogs/jonathan/why-i-hate-the-ring_buffer-target-in-extended-events/

    Links:
        http://www.sqlskills.com/blogs/jonathan/multi-victim-deadlocks/
        https://www.sqlskills.com/blogs/jonathan/graphically-viewing-extended-events-deadlock-graphs/
        http://www.mssqltips.com/sqlservertip/1234/capturing-sql-server-deadlock-information-in-xml-format/
        http://blogs.msdn.com/b/sqldatabasetalk/archive/2013/05/01/tracking-down-deadlocks-in-sql-database.aspx
        http://dba.stackexchange.com/questions/10644/deadlock-error-isnt-returning-the-deadlock-sql/10646#10646        

    Modified    By           Description
    ----------  -----------  ------------------------------------------------------------------------------------------
    2014.10.29  crokusek     From Internet, http://stackoverflow.com/questions/19817951
    2015.05.05  crokusek     Improve so that the output is consumable by SSMS 2012 as "Open .xdl file"                             
    2015.05.22  crokusek     Remove special character for the cast to Xml (like '&')
    2017.08.03  crokusek     Abandon ring-buffer approach and use event log files.  Filter out internal deadlocks.
    2018.07.16  crokusek     Added field(s) like ProbablyHandledBySpill to help identify non-critical deadlocks.
  ---------------------------------------------------------------------------------------------------------------------*/
with XmlDeadlockReports as
(
  select convert(xml, event_data) as EventData         
    from sys.fn_xe_file_target_read_file(N'system_health*.xel', NULL, NULL, NULL)      
   where substring(event_data, 1, 50) like '%"xml_deadlock_report"%'       
)
select top 10000
       EventData.value('(event/@timestamp)[1]', 'datetime2(7)') as CreatedUtc,
       --(select TimePst from Common.ufn_ConvertUtcToPst(EventData.value('(event/@timestamp)[1]', 'datetime2(7)'))) as CreatedPst,
       DistinctSpidCount,       
       HasExchangeEvent,
       IsVictimless,                  
       --
       -- If the deadlock contains Exchange Events and lists no victims, it probably occurred
       -- during execution of a single query that contained parallellism but got stuck due to 
       -- ordering issues.   /dba/197779
       -- 
       -- These will not raise an exception to the caller and will complete by spilling to tempdb
       -- however they may run much slower than they would without the spill(s).
       --
       convert(bit, iif(DistinctSpidCount = 1 and HasExchangeEvent = 1 and IsVictimless = 1, 1, 0)) as ProbablyHandledBySpill,
       len(et.XdlFileText) as LenXdlFile,
       eddl.XdlFile as XdlFile
  from XmlDeadlockReports
 cross apply 
     ( 
       select eventData.query('event/data/value/deadlock') as XdlFile 
     ) eddl
 cross apply 
     ( 
        select convert(nvarchar(max), eddl.XdlFile) as XdlFileText 
     ) as et
 cross apply 
     (
       select count(distinct Match) as DistinctSpidCount
         from common.ufn_ExtractSubstringsByPattern(et.XdlFileText, 'spid="%%"')
     ) spids
 cross apply
     (
       select convert(bit, iif(charindex('<exchangeEvent', et.XdlFileText) > 0, 1, 0)) as HasExchangeEvent,
              --
              convert(bit, iif(     charindex('<victim-list>', et.XdlFileText) = 0
                                and charindex('<victim-list/>', et.XdlFileText) > 0, 1, 0)) as IsVictimless
     ) as flags        
 order by CreatedUtc desc
GO
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.