{"id":1697,"date":"2009-05-27T10:32:19","date_gmt":"2009-05-27T14:32:19","guid":{"rendered":"http:\/\/3.209.169.194\/blogs\/jonathan\/?p=1697"},"modified":"2013-02-13T11:59:47","modified_gmt":"2013-02-13T16:59:47","slug":"multi-victim-deadlocks","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/multi-victim-deadlocks\/","title":{"rendered":"Extended Events xml_deadlock_report and Multi-Victim Deadlocks"},"content":{"rendered":"<p>At the beginning of the year, I wrote an article titled <a href=\"http:\/\/www.sqlservercentral.com\/articles\/deadlocks\/65658\/\" target=\"_blank\">Retrieving Deadlock Graphs with SQL Server 2008 Extended Events<\/a> that detailed how to use the default system_health session to retrieve deadlock graphs from SQL Server 2008 without having to use SQL Profiler, SQL Trace or enabling a Trace flag on the SQL Server.\u00a0 In writing that article I happened upon a bug that is covered in the article with a work around in the Deadlock XML that is output by the Extended Events Engine.\u00a0 That bug was filed with Microsoft and is covered in the following connect feedback:<\/p>\n<p><a title=\"https:\/\/connect.microsoft.com\/SQLServer\/feedback\/ViewFeedback.aspx?FeedbackID=404168&amp;wa=wsignin1.0\" href=\"https:\/\/connect.microsoft.com\/SQLServer\/feedback\/ViewFeedback.aspx?FeedbackID=404168&amp;wa=wsignin1.0\">https:\/\/connect.microsoft.com\/SQLServer\/feedback\/ViewFeedback.aspx?FeedbackID=404168&amp;wa=wsignin1.0<\/a><\/p>\n<p>When I first encountered the bug, I traded emails with Jerome Halmans, one of the developers for Extended Events, who confirmed the bug, and helped me validate the workaround to generate valid XML.\u00a0 During this exchange it was brought up that the Deadlock Monitor in SQL Server was reworked to add support for Multi-Victim Deadlocks, and the new XML output in Extended Events can be used to identify such a monster.<\/p>\n<p>This sparked my interests and I tried for a few days tirelessly to actually create a multi-victim deadlock to no avail.\u00a0 I was warned that they can be difficult to actually produce, but it is possible to do.\u00a0 I eventually gave up trying a few days later, due mostly to the fact that I was going to be gone for two months, but it was something in my list of things to figure out.<\/p>\n<p>Fast forward to last week when I got an email from Yuxi Bai, a member of the SQL Development team who actually worked on the Deadlock Monitor.\u00a0 He had read my article on SQL Server Central and noted that there was a discrepancy in the explanation of the bug in the XML when compared to the actual work around that corrects the bug.\u00a0 The explanation of the defect in the article is over simplified, and was written based on my first findings when looking at the bug.\u00a0 It is actually slightly more complex than the article makes out, which I figured out before the article was published and I changed the code for the workaround so that it correctly generated a deadlock graph.\u00a0 A small difference in wording makes the article correct, and I have submitted a correction to the article.<\/p>\n<p>Since I had his attention anyway, I decided to ask again about creating a Multi-Victim Deadlock, and this time I got the missing hint that I needed to actually trigger one.\u00a0 Set one SPID to a higher Deadlock Priority than the other two, and voila, I was able to trigger a multi-victim deadlock.\u00a0 All was cool, and I thought I was set to write a neat article about the new Deadlock XML, only to find that the XML from my workaround was now once again invalid.\u00a0 It took a few minutes to figure out, but an invalid end tag is generated when multiple victims exist in the new output.\u00a0 So I shot an email back to Yuxi to get validation, and to determine if a new connect item needed to be submitted.\u00a0 Since it falls within the scope of the existing feedback, invalid XML in the Deadlock Event for Extended Events, which has not been released as fixed in a Cumulative Update or Service Pack, it was filed as a part of the existing connect item and will be fixed in the same release.<\/p>\n<p>So what exactly does a multi-victim deadlock look like?\u00a0 Using the attached scripts in the following order, a multi-victim deadlock can be triggered in SQL Server 2008:<\/p>\n<ol>\n<li>Run the setup script<\/li>\n<li>Run Transaction 1 to the &#8212; Stop Here tag.<\/li>\n<li>Run Transaction 3 to the &#8212; Stop Here tag.<\/li>\n<li>Run Transaction 2 to the &#8212; Stop Here tag.<\/li>\n<li>Run the remainder of Transaction 1.<\/li>\n<li>Run the remainder of Transaction 3<\/li>\n<li>Run the remainder of Transaction 2.\u00a0\u00a0 Deadlock should be triggered and rollback Transactions 1 and 3.<\/li>\n<\/ol>\n<p>The deadlock graph will look as follows if you use the work around code from the SQL Server Central Article, excluding the outer CAST as xml of the deadlock graphs which will raise an exception:<\/p>\n<pre class=\"brush: xml; gutter: false; title: ; notranslate\" title=\"\">\r\n&lt;deadlock-list&gt;\r\n  &lt;deadlock&gt;\r\n    &lt;victim-list&gt;\r\n        &lt;victimProcess id=&quot;processb1b390&quot;&gt;\r\n        &lt;victimProcess id=&quot;process5ac6718&quot;\/&gt;\r\n      &lt;\/victim-list&gt;\r\n    &lt;process-list&gt;\r\n      &lt;process id=&quot;processb1b390&quot; taskpriority=&quot;5&quot; logused=&quot;0&quot; waitresource=&quot;OBJECT: 2:37575172:0 &quot; waittime=&quot;8810&quot; \r\n ownerId=&quot;1467&quot; transactionname=&quot;user_transaction&quot; lasttranstarted=&quot;2009-05-26T23:31:06.170&quot; XDES=&quot;0x57f1b30&quot; \r\n lockMode=&quot;IX&quot; schedulerid=&quot;1&quot; kpid=&quot;60524&quot; status=&quot;suspended&quot; spid=&quot;54&quot; sbid=&quot;0&quot; ecid=&quot;0&quot; priority=&quot;-5&quot; \r\n trancount=&quot;2&quot; lastbatchstarted=&quot;2009-05-26T23:31:35.467&quot; lastbatchcompleted=&quot;2009-05-26T23:31:06.170&quot; \r\n clientapp=&quot;Microsoft SQL Server Management Studio - Query&quot; hostname=&quot;LT-JKEHAYIAS&quot; hostpid=&quot;2724&quot; \r\n loginname=&quot;OUTBACKNT\\JKehayias&quot; isolationlevel=&quot;read committed (2)&quot; xactid=&quot;1467&quot; currentdb=&quot;2&quot; \r\n lockTimeout=&quot;4294967295&quot; clientoption1=&quot;671090784&quot; clientoption2=&quot;390200&quot;&gt;\r\n        &lt;executionStack&gt;\r\n          &lt;frame procname=&quot;&quot; line=&quot;3&quot; stmtstart=&quot;38&quot; sqlhandle=&quot;0x020000006f183c102e5e14b67437dc81884f5c2bc608d7d1&quot;&gt; \r\n\t&lt;\/frame&gt;\r\n        &lt;\/executionStack&gt;\r\n        &lt;inputbuf&gt;  -- X LOCK ON R2 UPDATE r2 SET rowid = rowid +1 FROM r2 WITH (XLOCK, HOLDLOCK)      &lt;\/inputbuf&gt;\r\n      &lt;\/process&gt;\r\n      &lt;process id=&quot;process5ac6718&quot; taskpriority=&quot;5&quot; logused=&quot;0&quot; waitresource=&quot;OBJECT: 2:53575229:0 &quot; waittime=&quot;13580&quot; \r\n ownerId=&quot;1500&quot; transactionname=&quot;user_transaction&quot; lasttranstarted=&quot;2009-05-26T23:31:13.840&quot; XDES=&quot;0x677c280&quot; \r\n lockMode=&quot;IX&quot; schedulerid=&quot;1&quot; kpid=&quot;61076&quot; status=&quot;suspended&quot; spid=&quot;55&quot; sbid=&quot;0&quot; ecid=&quot;0&quot; priority=&quot;-5&quot; \r\n trancount=&quot;2&quot; lastbatchstarted=&quot;2009-05-26T23:31:30.700&quot; lastbatchcompleted=&quot;2009-05-26T23:31:13.840&quot; \r\n clientapp=&quot;Microsoft SQL Server Management Studio - Query&quot; hostname=&quot;LT-JKEHAYIAS&quot; hostpid=&quot;2724&quot; \r\n loginname=&quot;OUTBACKNT\\JKehayias&quot; isolationlevel=&quot;read committed (2)&quot; xactid=&quot;1500&quot; currentdb=&quot;2&quot; \r\n lockTimeout=&quot;4294967295&quot; clientoption1=&quot;671090784&quot; clientoption2=&quot;390200&quot;&gt;\r\n        &lt;executionStack&gt;\r\n          &lt;frame procname=&quot;&quot; line=&quot;2&quot; stmtstart=&quot;34&quot; sqlhandle=&quot;0x02000000f52a3407c874ca4873bf6b08bffe3c14823c1f39&quot;&gt;        &lt;\/frame&gt;\r\n        &lt;\/executionStack&gt;\r\n        &lt;inputbuf&gt; -- X LOCK ON R3 UPDATE r3 SET rowid = rowid +1 FROM r3 WITH (XLOCK, HOLDLOCK)      \r\n &lt;\/inputbuf&gt;\r\n      &lt;\/process&gt;\r\n      &lt;process id=&quot;process5ac61c0&quot; taskpriority=&quot;-5&quot; logused=&quot;284&quot; waitresource=&quot;OBJECT: 2:21575115:0 &quot; waittime=&quot;2691&quot; \r\n ownerId=&quot;1531&quot; transactionname=&quot;user_transaction&quot; lasttranstarted=&quot;2009-05-26T23:31:24.153&quot; XDES=&quot;0x677dbe0&quot; \r\n lockMode=&quot;IX&quot; schedulerid=&quot;1&quot; kpid=&quot;3460&quot; status=&quot;suspended&quot; spid=&quot;56&quot; sbid=&quot;0&quot; ecid=&quot;0&quot; priority=&quot;5&quot; \r\n trancount=&quot;2&quot; lastbatchstarted=&quot;2009-05-26T23:31:41.577&quot; lastbatchcompleted=&quot;2009-05-26T23:31:24.153&quot; \r\n clientapp=&quot;Microsoft SQL Server Management Studio - Query&quot; hostname=&quot;LT-JKEHAYIAS&quot; hostpid=&quot;2724&quot; \r\n loginname=&quot;OUTBACKNT\\JKehayias&quot; isolationlevel=&quot;read committed (2)&quot; xactid=&quot;1531&quot; currentdb=&quot;2&quot; \r\n lockTimeout=&quot;4294967295&quot; clientoption1=&quot;671090784&quot; clientoption2=&quot;390200&quot;&gt;\r\n        &lt;executionStack&gt;\r\n          &lt;frame procname=&quot;&quot; line=&quot;2&quot; stmtstart=&quot;34&quot; sqlhandle=&quot;0x020000007107001868d80e0fb28607c5ab8111e7495ccb44&quot;&gt;        &lt;\/frame&gt;\r\n        &lt;\/executionStack&gt;\r\n        &lt;inputbuf&gt; -- X LOCK ON R3 UPDATE r1 SET rowid = rowid +1 FROM r1 WITH (XLOCK, HOLDLOCK) \r\n &lt;\/inputbuf&gt;\r\n      &lt;\/process&gt;\r\n    &lt;\/process-list&gt;\r\n    &lt;resource-list&gt;\r\n      &lt;objectlock lockPartition=&quot;0&quot; objid=&quot;37575172&quot; subresource=&quot;FULL&quot; dbid=&quot;2&quot; objectname=&quot;&quot; id=&quot;lock48b7300&quot; mode=&quot;X&quot; \r\n associatedObjectId=&quot;37575172&quot;&gt;\r\n        &lt;owner-list&gt;\r\n          &lt;owner id=&quot;process5ac61c0&quot; mode=&quot;X&quot;\/&gt;\r\n        &lt;\/owner-list&gt;\r\n        &lt;waiter-list&gt;\r\n          &lt;waiter id=&quot;processb1b390&quot; mode=&quot;IX&quot; requestType=&quot;wait&quot;\/&gt;\r\n        &lt;\/waiter-list&gt;\r\n      &lt;\/objectlock&gt;\r\n      &lt;objectlock lockPartition=&quot;0&quot; objid=&quot;53575229&quot; subresource=&quot;FULL&quot; dbid=&quot;2&quot; objectname=&quot;&quot; id=&quot;lock48b6440&quot; mode=&quot;X&quot; \r\n associatedObjectId=&quot;53575229&quot;&gt;\r\n        &lt;owner-list&gt;\r\n          &lt;owner id=&quot;process5ac61c0&quot; mode=&quot;X&quot;\/&gt;\r\n        &lt;\/owner-list&gt;\r\n        &lt;waiter-list&gt;\r\n          &lt;waiter id=&quot;process5ac6718&quot; mode=&quot;IX&quot; requestType=&quot;wait&quot;\/&gt;\r\n        &lt;\/waiter-list&gt;\r\n      &lt;\/objectlock&gt;\r\n      &lt;objectlock lockPartition=&quot;0&quot; objid=&quot;21575115&quot; subresource=&quot;FULL&quot; dbid=&quot;2&quot; objectname=&quot;&quot; id=&quot;lock48b6d00&quot; mode=&quot;S&quot; \r\n associatedObjectId=&quot;21575115&quot;&gt;\r\n        &lt;owner-list&gt;\r\n          &lt;owner id=&quot;process5ac6718&quot; mode=&quot;S&quot;\/&gt;\r\n          &lt;owner id=&quot;processb1b390&quot; mode=&quot;S&quot;\/&gt;\r\n        &lt;\/owner-list&gt;\r\n        &lt;waiter-list&gt;\r\n          &lt;waiter id=&quot;process5ac61c0&quot; mode=&quot;IX&quot; requestType=&quot;wait&quot;\/&gt;\r\n        &lt;\/waiter-list&gt;\r\n      &lt;\/objectlock&gt;\r\n    &lt;\/resource-list&gt;\r\n  &lt;\/deadlock&gt;\r\n&lt;\/deadlock-list&gt;\r\n<\/pre>\n<p>Note that the first victim is missing the closing back slash for the XML node:<\/p>\n<pre class=\"brush: xml; gutter: false; title: ; notranslate\" title=\"\">\r\n&lt;victimProcess id=\u201dprocessb1b390\u2033&gt; \r\n<\/pre>\n<p>it should actually be:<\/p>\n<pre class=\"brush: xml; gutter: false; title: ; notranslate\" title=\"\">\r\n&lt;victimProcess id=\u201dprocessb1b390\u2033\/&gt; \r\n<\/pre>\n<p>This should be fixed in a coming update\/service pack for SQL Server 2008.\u00a0 Now what is really important here is that the only place you can get a multi-victim deadlock graph is Extended Events.\u00a0 If you run a profiler trace or enable trace flag 1222 on the server, you will get two single deadlock graphs, and it is up to you to correlate that the two deadlocks are actually one deadlock.\u00a0 The same thing occurs in SQL Server 2005.<\/p>\n<p>While writing this blog post, I happened to notice another difference between the two deadlock graphs.\u00a0 If you look at the &lt;executionStack&gt; in the Extended Events Deadlock graph, the &lt;frame&gt; information is only partially populated when compared to a Deadlock graph from SQL Server profiler.\u00a0 I sent this back to Jerome and Yuxi as a potential additional problem and learned that this was intentionally missing from the deadlock graph and with good reason.\u00a0 To retrieve this information requires that additional locks be taken inside the Database Engine which can delay publishing of the Event.\u00a0 The information is also readily available by querying sys.dm_exec_text() or sys.fn_get_sql() with the provided sqlhandle in the &lt;frame&gt; attributes.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>At the beginning of the year, I wrote an article titled Retrieving Deadlock Graphs with SQL Server 2008 Extended Events that detailed how to use the default system_health session to retrieve deadlock graphs from SQL Server 2008 without having to use SQL Profiler, SQL Trace or enabling a Trace flag on the SQL Server.\u00a0 In [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20,23,1],"tags":[],"class_list":["post-1697","post","type-post","status-publish","format-standard","hentry","category-deadlock","category-extended-events","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Extended Events xml_deadlock_report and Multi-Victim Deadlocks - Jonathan Kehayias<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.sqlskills.com\/blogs\/jonathan\/multi-victim-deadlocks\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Extended Events xml_deadlock_report and Multi-Victim Deadlocks - Jonathan Kehayias\" \/>\n<meta property=\"og:description\" content=\"At the beginning of the year, I wrote an article titled Retrieving Deadlock Graphs with SQL Server 2008 Extended Events that detailed how to use the default system_health session to retrieve deadlock graphs from SQL Server 2008 without having to use SQL Profiler, SQL Trace or enabling a Trace flag on the SQL Server.\u00a0 In [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/jonathan\/multi-victim-deadlocks\/\" \/>\n<meta property=\"og:site_name\" content=\"Jonathan Kehayias\" \/>\n<meta property=\"article:published_time\" content=\"2009-05-27T14:32:19+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2013-02-13T16:59:47+00:00\" \/>\n<meta name=\"author\" content=\"Jonathan Kehayias\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jonathan Kehayias\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/multi-victim-deadlocks\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/multi-victim-deadlocks\\\/\"},\"author\":{\"name\":\"Jonathan Kehayias\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#\\\/schema\\\/person\\\/01c10d94f3648654ef706d5e6305f69c\"},\"headline\":\"Extended Events xml_deadlock_report and Multi-Victim Deadlocks\",\"datePublished\":\"2009-05-27T14:32:19+00:00\",\"dateModified\":\"2013-02-13T16:59:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/multi-victim-deadlocks\\\/\"},\"wordCount\":1784,\"commentCount\":7,\"articleSection\":[\"Deadlock\",\"Extended Events\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/multi-victim-deadlocks\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/multi-victim-deadlocks\\\/\",\"url\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/multi-victim-deadlocks\\\/\",\"name\":\"Extended Events xml_deadlock_report and Multi-Victim Deadlocks - Jonathan Kehayias\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#website\"},\"datePublished\":\"2009-05-27T14:32:19+00:00\",\"dateModified\":\"2013-02-13T16:59:47+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#\\\/schema\\\/person\\\/01c10d94f3648654ef706d5e6305f69c\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/multi-victim-deadlocks\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/multi-victim-deadlocks\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/multi-victim-deadlocks\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Deadlock\",\"item\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/category\\\/deadlock\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Extended Events xml_deadlock_report and Multi-Victim Deadlocks\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#website\",\"url\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/\",\"name\":\"Jonathan Kehayias - The Rambling DBA\",\"description\":\"The Rambling DBA\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#\\\/schema\\\/person\\\/01c10d94f3648654ef706d5e6305f69c\",\"name\":\"Jonathan Kehayias\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g\",\"caption\":\"Jonathan Kehayias\"},\"sameAs\":[\"http:\\\/\\\/3.209.169.194\\\/blogs\\\/jonathan\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Extended Events xml_deadlock_report and Multi-Victim Deadlocks - Jonathan Kehayias","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/multi-victim-deadlocks\/","og_locale":"en_US","og_type":"article","og_title":"Extended Events xml_deadlock_report and Multi-Victim Deadlocks - Jonathan Kehayias","og_description":"At the beginning of the year, I wrote an article titled Retrieving Deadlock Graphs with SQL Server 2008 Extended Events that detailed how to use the default system_health session to retrieve deadlock graphs from SQL Server 2008 without having to use SQL Profiler, SQL Trace or enabling a Trace flag on the SQL Server.\u00a0 In [&hellip;]","og_url":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/multi-victim-deadlocks\/","og_site_name":"Jonathan Kehayias","article_published_time":"2009-05-27T14:32:19+00:00","article_modified_time":"2013-02-13T16:59:47+00:00","author":"Jonathan Kehayias","twitter_misc":{"Written by":"Jonathan Kehayias","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/multi-victim-deadlocks\/#article","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/multi-victim-deadlocks\/"},"author":{"name":"Jonathan Kehayias","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#\/schema\/person\/01c10d94f3648654ef706d5e6305f69c"},"headline":"Extended Events xml_deadlock_report and Multi-Victim Deadlocks","datePublished":"2009-05-27T14:32:19+00:00","dateModified":"2013-02-13T16:59:47+00:00","mainEntityOfPage":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/multi-victim-deadlocks\/"},"wordCount":1784,"commentCount":7,"articleSection":["Deadlock","Extended Events"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.sqlskills.com\/blogs\/jonathan\/multi-victim-deadlocks\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/multi-victim-deadlocks\/","url":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/multi-victim-deadlocks\/","name":"Extended Events xml_deadlock_report and Multi-Victim Deadlocks - Jonathan Kehayias","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#website"},"datePublished":"2009-05-27T14:32:19+00:00","dateModified":"2013-02-13T16:59:47+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#\/schema\/person\/01c10d94f3648654ef706d5e6305f69c"},"breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/multi-victim-deadlocks\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/jonathan\/multi-victim-deadlocks\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/multi-victim-deadlocks\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/"},{"@type":"ListItem","position":2,"name":"Deadlock","item":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/category\/deadlock\/"},{"@type":"ListItem","position":3,"name":"Extended Events xml_deadlock_report and Multi-Victim Deadlocks"}]},{"@type":"WebSite","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#website","url":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/","name":"Jonathan Kehayias - The Rambling DBA","description":"The Rambling DBA","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#\/schema\/person\/01c10d94f3648654ef706d5e6305f69c","name":"Jonathan Kehayias","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g","caption":"Jonathan Kehayias"},"sameAs":["http:\/\/3.209.169.194\/blogs\/jonathan"]}]}},"_links":{"self":[{"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/posts\/1697","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/comments?post=1697"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/posts\/1697\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/media?parent=1697"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/categories?post=1697"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/tags?post=1697"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}