ডেডলক সনাক্তকরণের জন্য এসকিউএল প্রসারিত ইভেন্টস সেশন


12

<inputbuf>ডেডলক এক্সটেন্ডেড ইভেন্টস সেশনের দ্বারা বন্দী ডেডলক এক্সএমএলে উপাদানটির আকার বাড়ানোর কোনও উপায় আছে কি ?

আমরা অ্যাপ্লিকেশন কোডটিতে ইস্যুটি নির্দিষ্ট করতে সহায়তা করতে সম্পূর্ণ কোয়েরি দেখতে চাই।

এটি 1024 অক্ষর +/- এর মধ্যে সীমাবদ্ধ বলে মনে হচ্ছে। এটা কি বাড়ানো যায়?

নমুনা এক্সএমএল জন্য নীচে দেখুন। আপনি দেখতে পারেন যে <inputbuf>উপাদানটির ক্যোয়ারী পাঠ্যটি নির্বাচিত তালিকার মাঝখানে কাটা হয়েছে:

<deadlock>
 <victim-list>
  <victimProcess id="processc9c0829848" />
 </victim-list>
 <process-list>
  <process id="processc9c0829848" taskpriority="0" logused="0" waitresource="PAGE: 5:1:40600276 " waittime="696" ownerId="255115931225" transactionname="SELECT" lasttranstarted="2019-04-24T09:29:25.950" XDES="0xc8dfa8da40" lockMode="S" schedulerid="13" kpid="8480" status="suspended" spid="245" sbid="2" ecid="0" priority="0" trancount="0" lastbatchstarted="2019-04-24T09:29:25.950" lastbatchcompleted="2019-04-24T09:29:25.950" lastattention="1900-01-01T00:00:00.950" clientapp="EntityFramework" hostname="MSR-PRD-BDB02" hostpid="43440" loginname="IUSR_BuildDB" isolationlevel="read committed (2)" xactid="255115931225" currentdb="5" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056">
   <executionStack>
    <frame procname="adhoc" line="1" stmtstart="66" stmtend="7378" sqlhandle="0x02000000638e8b1acc45f82c476cd42914e32866e87c4fd60000000000000000000000000000000000000000">
unknown    </frame>
    <frame procname="unknown" line="1" sqlhandle="0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000">
unknown    </frame>
   </executionStack>
   <inputbuf>
(@p__linq__0 int,@p__linq__1 int)SELECT 
[Project1].[CachedBuildStateId] AS [CachedBuildStateId], 
[Project1].[BuildVersionId1] AS [BuildVersionID], 
[Project1].[ProjectID] AS [ProjectID], 
[Project1].[VersionName] AS [VersionName], 
[Project1].[PlatformID] AS [PlatformID], 
[Project1].[VersionPath] AS [VersionPath], 
[Project1].[RegionID] AS [RegionID], 
[Project1].[TestStatusID] AS [TestStatusID], 
[Project1].[TestResult] AS [TestResult], 
[Project1].[TestReportPath] AS [TestReportPath], 
[Project1].[TypeID] AS [TypeID], 
[Project1].[Size] AS [Size], 
[Project1].[VersionDate] AS [VersionDate], 
[Project1].[Approved] AS [Approved], 
[Project1].[Archived] AS [Archived], 
[Project1].[CLData] AS [CLData], 
[Project1].[CLCode] AS [CLCode], 
[Project1].[CLSound] AS [CLSound], 
[Project1].[XDKSDKVersion] AS [XDKSDKVersion], 
[Project1].[Comments] AS [Comments], 
[Project1].[DateAdded] AS [DateAdded], 
[Project1].[DateModified] AS [DateModified], 
[Project1].[CacheLocally] AS [CacheLocally],   </inputbuf>
  </process>
  <process id="processc9bf5cf468" taskpriority="0" logused="436" waitresource="PAGE: 5:1:3752363 " waittime="724" ownerId="255115931408" transactionname="user_transaction" lasttranstarted="2019-04-24T09:29:25.973" XDES="0xcf6b186408" lockMode="IX" schedulerid="25" kpid="11228" status="suspended" spid="209" sbid="2" ecid="0" priority="0" trancount="2" lastbatchstarted="2019-04-24T09:29:25.973" lastbatchcompleted="2019-04-24T09:29:25.970" lastattention="1900-01-01T00:00:00.970" clientapp="EntityFramework" hostname="MSR-PRD-BDB04" hostpid="6248" loginname="IUSR_BuildDB" isolationlevel="read committed (2)" xactid="255115931408" currentdb="5" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056">
   <executionStack>
    <frame procname="adhoc" line="1" stmtstart="78" stmtend="408" sqlhandle="0x020000009438fe362ae846385f4e36448d4eac52a5f052e10000000000000000000000000000000000000000">
unknown    </frame>
    <frame procname="unknown" line="1" sqlhandle="0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000">
unknown    </frame>
   </executionStack>
   <inputbuf>
(@0 int,@1 datetime,@2 datetime,@3 int)update [dbo].[CachedBuildState]
set [CachingStatusId] = @0, [StartTimeUtc] = @1, [LastUpdateTimeUtc] = @2, [MessageDetails] = null
where ([CachedBuildStateId] = @3)
   </inputbuf>
  </process>
 </process-list>
 <resource-list>
  <pagelock fileid="1" pageid="40600276" dbid="5" subresource="FULL" objectname="BuildDB.dbo.CachedBuildState" id="lockcda4d62280" mode="IX" associatedObjectId="72057594075283456">
   <owner-list>
    <owner id="processc9bf5cf468" mode="IX" />
   </owner-list>
   <waiter-list>
    <waiter id="processc9c0829848" mode="S" requestType="wait" />
   </waiter-list>
  </pagelock>
  <pagelock fileid="1" pageid="3752363" dbid="5" subresource="FULL" objectname="BuildDB.dbo.CachedBuildState" id="lockd70db08700" mode="S" associatedObjectId="72057594075283456">
   <owner-list>
    <owner id="processc9c0829848" mode="S" />
   </owner-list>
   <waiter-list>
    <waiter id="processc9bf5cf468" mode="IX" requestType="wait" />
   </waiter-list>
  </pagelock>
 </resource-list>
</deadlock>

উত্তর:


2

আপনার sqlhandleপ্রতিটি ফ্রেমের জন্য একটি রয়েছে যাতে আপনি sys.dm_exec_sql_textফাংশনটি ব্যবহার করে সম্পূর্ণ ক্যোয়ারী পেতে সক্ষম হন :

SELECT text
FROM sys.dm_exec_sql_text(sql_handle)

sys.dm_exec_sql_text

উদাহরণস্বরূপ, sys.dm_exec_query_statsএক্সএমএলের প্রতিবেদনে স্টেটমেন্ট_অফসেট, স্টেটমেন্ট_অ্যান্ড_অফসেট, এসকিএল_হ্যান্ডেলের পরিবর্তে কিছু স্টেটমেন্টস (স্টেমস্টার্ট, স্ট্যাম্যান্ড, স্ক্ল্যান্ডহান্ডেল) এর পাঠ্য প্রাপ্তি

SELECT TOP (100)
    CASE   
        WHEN s.[statement_start_offset] > 0 THEN  
            --The start of the active command is not at the beginning of the full command text 
            CASE s.[statement_end_offset]  
               WHEN -1 THEN  
                  --The end of the full command is also the end of the active statement 
                  SUBSTRING(t.TEXT, (s.[statement_start_offset]/2) + 1, 2147483647) 
               ELSE   
                  --The end of the active statement is not at the end of the full command 
                  SUBSTRING(t.TEXT, (s.[statement_start_offset]/2) + 1, (s.[statement_end_offset] - s.[statement_start_offset])/2+1)   
            END  
        ELSE  
            --1st part of full command is running 
            CASE s.[statement_end_offset]  
               WHEN -1 THEN  
                  --The end of the full command is also the end of the active statement 
                  RTRIM(LTRIM(t.[text]))  
               ELSE  
                  --The end of the active statement is not at the end of the full command 
                  LEFT(t.TEXT, (s.[statement_end_offset]/2) +1)  
            END  
        END AS [executing statement]
FROM sys.dm_exec_query_stats s 
    CROSS APPLY sys.dm_exec_sql_text(s.[sql_handle]) t

UPD

@ জন আইজব্রেনারের যুক্তিসঙ্গত মন্তব্যের জন্য ধন্যবাদ আমার লক্ষ্য করা উচিত যে কোয়েরি ক্যাশে পরিষ্কার না হওয়া পর্যন্ত ডিএমভি থেকে প্রাপ্ত তথ্যগুলি আসল হবে। সুতরাং আপনি যদি ক্যাশে পরিষ্কারের পরে সেই তথ্যটি ব্যবহার করার প্রত্যাশা করেন (উদাহরণস্বরূপ আপনার সার্ভার পুনরায় চালু করার পরে), ইভেন্টটি হওয়ার পরে আপনাকে কিছু স্থায়ী টেবিলের মধ্যে সেই ডেটা সংরক্ষণ করতে হবে।


হ্যাঁ আমি ইতিমধ্যে এটি করছিলাম তবে আশা করছি যে ত্রিমাত্রিক ওয়া সেটিংটি এটি বর্ধিত ইভেন্ট সেশনের সংজ্ঞাতে বাড়িয়ে তুলতে পারে। আমি যদি অচলাবস্থার প্রতিবেদনটি ছড়িয়ে দিতে পারি এবং ডেভিলোপ্পারদের এটির দিকে ফিরে তাকানোর জন্য উত্সাহিত historicalতিহাসিক উদ্দেশ্যে সমস্ত কিছু একটি টেবিলের ভিতরে স্থাপন করা যায় কিনা তা দেখার চেষ্টা করা হবে। দুর্ভাগ্যক্রমে তারা এই অ্যাপ্লিকেশনটির জন্য সত্তা কাঠামো ব্যবহার করছে। একবার আমার সমাধান পোস্ট হয়ে যাবে
স্নেফফি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.