{"id":736,"date":"2015-12-31T12:26:13","date_gmt":"2015-12-31T20:26:13","guid":{"rendered":"http:\/\/3.209.169.194\/blogs\/erin\/?p=736"},"modified":"2017-04-13T09:19:30","modified_gmt":"2017-04-13T16:19:30","slug":"capture-blocking-information-with-extended-events-and-the-blocked-process-report","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/erin\/capture-blocking-information-with-extended-events-and-the-blocked-process-report\/","title":{"rendered":"Capture Blocking Information with Extended Events and the Blocked Process Report"},"content":{"rendered":"<p>I am a big fan of <a href=\"https:\/\/mobile.twitter.com\/adammachanic\">Adam Machanic&#8217;s<\/a> <a href=\"http:\/\/sqlblog.com\/files\/folders\/beta\/entry42453.aspx\" class=\"broken_link\">WhoIsActive script<\/a>, and when customers have issues with performance, it&#8217;s one of the first tools I recommend because it&#8217;s so simple to use and provides great information.\u00a0 Very often it helps with quickly determining an issue, but sometimes there&#8217;s a need to capture more information, particularly when locking and blocking is part of the issue.\u00a0 Adam&#8217;s script has an option to include blocking information, for example including the [blocking_session_id] column in the output and using @find_block_leaders = 1as an parameter.\u00a0 But sometimes you need more information, like the blocked process report.\u00a0 I&#8217;ve found one of the easiest ways to get that in SQL Server 2012 and higher is Extended Events.\u00a0 If you&#8217;re running SQL Server 2005 and higher, you can use <a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/relational-databases\/service-broker\/event-notifications\">Event Notifications<\/a> to capture the blocked process report.\u00a0 This option is nice because you are notified when the problem occurs.\u00a0 For those of you using SQL Server 2008R2 and below, you also have the option of capturing the blocked process report event through a server-side <a href=\"https:\/\/technet.microsoft.com\/en-us\/library\/ms191006%28v=sql.105%29.aspx\">Trace<\/a>.\u00a0 But if you&#8217;re on SQL Server 2012 and higher, you can use <a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/relational-databases\/extended-events\/extended-events\">Extended Events<\/a> and the blocked process report.\u00a0 <em>Note: the blocked_process_report event does not exist in SQL Server 2008 or SQL Server 2008R2, which is why Trace is the method there.<\/em>\u00a0 The drawback to Extended Events is that you don&#8217;t get a notification that blocking occurred, but for those who are not as comfortable with Event Notifications &#8211; for whatever reason &#8211; Extended Events is a very simple alternative.<\/p>\n<p><strong>The Setup<\/strong><\/p>\n<p>In order to capture a blocked process report, you must have the blocked process threshold system configuration option enabled.\u00a0 A good starting value is 15, which is the threshold in seconds at which the report is generated.\u00a0 To set this value, run the following code:<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\nEXECUTE sp_configure 'show advanced options', 1;\r\nGO\r\nRECONFIGURE;\r\nGO\r\nEXECUTE sp_configure 'blocked process threshold', 15;\r\nGO\r\nRECONFIGURE;\r\nGO\r\nEXECUTE sp_configure 'show advanced options', 0;\r\nGO\r\nRECONFIGURE;\r\nGO\r\n<\/pre>\n<p>The following code will create the event session and then start it.\u00a0 Note that you can create the event session and just have it defined in your system without running it.\u00a0 Then, if you start to have blocking you can set the blocked process threshold and start the event session.<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\n\/*\r\ncheck to see if the event session exists\r\n*\/\r\nIF EXISTS ( SELECT\u00a0 1\r\nFROM\u00a0\u00a0\u00a0 sys.server_event_sessions\r\nWHERE\u00a0\u00a0 name = 'Capture_BlockedProcessReport' )\r\nDROP EVENT SESSION &#x5B;Capture_BlockedProcessReport] ON SERVER;\r\nGO\r\n\r\n\/*\r\ncreate the event session\r\nedit the filename entry if C:\\temp is not appropriate\r\n*\/\r\nCREATE EVENT SESSION &#x5B;Capture_BlockedProcessReport]\r\nON SERVER\r\nADD EVENT sqlserver.blocked_process_report\r\nADD TARGET package0.event_file(\r\nSET filename=N'C:\\Temp\\Capture_BlockedProcessReport.xel'\r\n)\r\nWITH (MAX_MEMORY=8192 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,\r\nMAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,\r\nTRACK_CAUSALITY=OFF,STARTUP_STATE=OFF);\r\nGO\r\n\r\n\/*\r\nstart the event session\r\n*\/\r\nALTER EVENT SESSION &#x5B;Capture_BlockedProcessReport]\r\nON SERVER\r\nSTATE = START;\r\nGO\r\n<\/pre>\n<p><strong>Capturing Data<br \/>\n<\/strong><\/p>\n<p>Once the event session is started, then you just wait until the blocking occurs.\u00a0 The following code can be used to generate an example in your test\/dev environment:<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\n\/*\r\ncreate a table and insert\r\none row without committing\r\n*\/\r\nUSE &#x5B;tempdb];\r\nGO\r\n\r\nCREATE TABLE &#x5B;BlockingTest] (\r\n&#x5B;ID] INT IDENTITY(1,1) PRIMARY KEY,\r\n&#x5B;INFO] VARCHAR(10)\r\n);\r\nGO\r\n\r\nBEGIN TRANSACTION\r\nINSERT INTO &#x5B;BlockingTest] (&#x5B;INFO]) VALUES ('SQLskills');\r\nGO\r\n\r\n\/*\r\nrun the following statement in a different window\r\n*\/\r\nUSE &#x5B;tempdb];\r\nGO\r\nSELECT *\r\nFROM &#x5B;BlockingTest];\r\n\r\nGO\r\n<\/pre>\n<p>After about 15 seconds, run the following code back in the original window:<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\n\/*\r\nclean up (run in original window)\r\n*\/\r\nUSE &#x5B;tempdb];\r\nGO\r\nCOMMIT;\r\nGO\r\nDROP TABLE &#x5B;BlockingTest];\r\nGO\r\n<\/pre>\n<p>You can then stop the event session, and either leave it there until you need it again, or drop it entirely:<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\n\/*\r\nstop the event session\r\n*\/\r\nALTER EVENT SESSION &#x5B;Capture_BlockedProcessReport]\r\nON SERVER\r\nSTATE = STOP;\r\nGO\r\n\r\n\/*\r\ndrop the event session\r\n*\/\r\nDROP EVENT SESSION &#x5B;Capture_BlockedProcessReport]\r\nON SERVER;\r\nGO\r\n<\/pre>\n<p><strong>Viewing the Report<\/strong><\/p>\n<p>To view the output from extended events you can open the .xel file in Management Studio or query the data using the sys.fn_xe_file_target_read_file function. I typically prefer the UI, but there&#8217;s currently no great way to copy the blocking report text and view it in the format you&#8217;re used to.\u00a0 But if you use the function to read and parse the XML from the file, you can&#8230;<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\nSELECT\r\n\u00a0\u00a0 \u00a0event_data.value('(event\/@name)&#x5B;1]', 'varchar(50)') AS event_name,\r\n\u00a0\u00a0 \u00a0event_data.query('(event\/data&#x5B;@name=&quot;blocked_process&quot;]\/value\/blocked-process-report)&#x5B;1]') as &#x5B;blocked_process_report]\r\nFROM\r\n(\r\n\u00a0\u00a0 \u00a0SELECT CAST(event_data AS XML) AS event_data\r\n\u00a0\u00a0 \u00a0FROM sys.fn_xe_file_target_read_file('C:\\Temp\\Capture_BlockedProcessReport*.xel', NULL, NULL, NULL)\r\n) AS sub;\r\nGO\r\n<\/pre>\n<p>Depending on how long you let the blocking continue, you may have captured more than one event and therefore have multiple reports in the output:<\/p>\n<figure id=\"attachment_739\" aria-describedby=\"caption-attachment-739\" style=\"width: 1024px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-content\/uploads\/2015\/12\/bpreport.jpg\"><img fetchpriority=\"high\" decoding=\"async\" class=\"size-large wp-image-739\" src=\"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-content\/uploads\/2015\/12\/bpreport-1024x330.jpg\" alt=\"Retrieving the blocked process report\" width=\"1024\" height=\"330\" srcset=\"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-content\/uploads\/2015\/12\/bpreport-1024x330.jpg 1024w, https:\/\/www.sqlskills.com\/blogs\/erin\/wp-content\/uploads\/2015\/12\/bpreport-300x97.jpg 300w, https:\/\/www.sqlskills.com\/blogs\/erin\/wp-content\/uploads\/2015\/12\/bpreport-900x290.jpg 900w, https:\/\/www.sqlskills.com\/blogs\/erin\/wp-content\/uploads\/2015\/12\/bpreport.jpg 1252w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption id=\"caption-attachment-739\" class=\"wp-caption-text\">Retrieving the blocked process report<\/figcaption><\/figure>\n<p>&nbsp;<\/p>\n<p>You can click on the output for any row to see the blocked process in XML format, and then work through the blocking:<\/p>\n<figure id=\"attachment_740\" aria-describedby=\"caption-attachment-740\" style=\"width: 1024px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-content\/uploads\/2015\/12\/xmloutput.jpg\"><img decoding=\"async\" class=\"size-large wp-image-740\" src=\"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-content\/uploads\/2015\/12\/xmloutput-1024x441.jpg\" alt=\"The blocked process report\" width=\"1024\" height=\"441\" srcset=\"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-content\/uploads\/2015\/12\/xmloutput-1024x441.jpg 1024w, https:\/\/www.sqlskills.com\/blogs\/erin\/wp-content\/uploads\/2015\/12\/xmloutput-300x129.jpg 300w, https:\/\/www.sqlskills.com\/blogs\/erin\/wp-content\/uploads\/2015\/12\/xmloutput-900x387.jpg 900w, https:\/\/www.sqlskills.com\/blogs\/erin\/wp-content\/uploads\/2015\/12\/xmloutput.jpg 1415w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption id=\"caption-attachment-740\" class=\"wp-caption-text\">The blocked process report<\/figcaption><\/figure>\n<p>[Huge thanks to Jonathan for help with the XML.\u00a0 I don&#8217;t think XML and I will ever be friends.\u00a0 Geez.]<\/p>\n<p><strong>Summary<\/strong><\/p>\n<p>If you&#8217;re in need of the blocked process report and running SQL Server 2012, you now have another option for getting that information.\u00a0 If you&#8217;re still new to extended events, check out the first two stairways in my XE series on SQLServerCentral<\/p>\n<ul>\n<li><a href=\"http:\/\/www.sqlservercentral.com\/articles\/Stairway+Series\/134869\/\">Stairway to SQL Server Extended Events Level 1: From SQL Trace to Extended Events<\/a><\/li>\n<li><a href=\"http:\/\/www.sqlservercentral.com\/articles\/Stairway+Series\/134877\/\">Stairway to SQL Server Extended Events Level 2: Creating Basic Event Sessions in the U<\/a><\/li>\n<\/ul>\n<p>Happy New Year!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I am a big fan of Adam Machanic&#8217;s WhoIsActive script, and when customers have issues with performance, it&#8217;s one of the first tools I recommend because it&#8217;s so simple to use and provides great information.\u00a0 Very often it helps with quickly determining an issue, but sometimes there&#8217;s a need to capture more information, particularly when [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[37],"tags":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.9.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Capture Blocking Information with Extended Events and the Blocked Process Report - Erin Stellato<\/title>\n<meta name=\"description\" content=\"One method for capturing the blocking information is to use Extended Events and the blocked process report, rather than Trace or Event Notifications.\" \/>\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\/erin\/capture-blocking-information-with-extended-events-and-the-blocked-process-report\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Capture Blocking Information with Extended Events and the Blocked Process Report - Erin Stellato\" \/>\n<meta property=\"og:description\" content=\"One method for capturing the blocking information is to use Extended Events and the blocked process report, rather than Trace or Event Notifications.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/erin\/capture-blocking-information-with-extended-events-and-the-blocked-process-report\/\" \/>\n<meta property=\"og:site_name\" content=\"Erin Stellato\" \/>\n<meta property=\"article:published_time\" content=\"2015-12-31T20:26:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-04-13T16:19:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-content\/uploads\/2015\/12\/bpreport-1024x330.jpg\" \/>\n<meta name=\"author\" content=\"Erin Stellato\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Erin Stellato\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/erin\/capture-blocking-information-with-extended-events-and-the-blocked-process-report\/\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/erin\/capture-blocking-information-with-extended-events-and-the-blocked-process-report\/\",\"name\":\"Capture Blocking Information with Extended Events and the Blocked Process Report - Erin Stellato\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/erin\/#website\"},\"datePublished\":\"2015-12-31T20:26:13+00:00\",\"dateModified\":\"2017-04-13T16:19:30+00:00\",\"author\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/erin\/#\/schema\/person\/76170223ffffa1df03fd9be5b66cb158\"},\"description\":\"One method for capturing the blocking information is to use Extended Events and the blocked process report, rather than Trace or Event Notifications.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/erin\/capture-blocking-information-with-extended-events-and-the-blocked-process-report\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sqlskills.com\/blogs\/erin\/capture-blocking-information-with-extended-events-and-the-blocked-process-report\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/erin\/capture-blocking-information-with-extended-events-and-the-blocked-process-report\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/erin\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Capture Blocking Information with Extended Events and the Blocked Process Report\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/erin\/#website\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/erin\/\",\"name\":\"Erin Stellato\",\"description\":\"The SQL Sequel\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.sqlskills.com\/blogs\/erin\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/erin\/#\/schema\/person\/76170223ffffa1df03fd9be5b66cb158\",\"name\":\"Erin Stellato\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/erin\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0c8b485bd54ea26b57e99f79b525f409?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0c8b485bd54ea26b57e99f79b525f409?s=96&d=mm&r=g\",\"caption\":\"Erin Stellato\"},\"sameAs\":[\"http:\/\/3.209.169.194\/blogs\/erin\"],\"url\":\"https:\/\/www.sqlskills.com\/blogs\/erin\/author\/erin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Capture Blocking Information with Extended Events and the Blocked Process Report - Erin Stellato","description":"One method for capturing the blocking information is to use Extended Events and the blocked process report, rather than Trace or Event Notifications.","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\/erin\/capture-blocking-information-with-extended-events-and-the-blocked-process-report\/","og_locale":"en_US","og_type":"article","og_title":"Capture Blocking Information with Extended Events and the Blocked Process Report - Erin Stellato","og_description":"One method for capturing the blocking information is to use Extended Events and the blocked process report, rather than Trace or Event Notifications.","og_url":"https:\/\/www.sqlskills.com\/blogs\/erin\/capture-blocking-information-with-extended-events-and-the-blocked-process-report\/","og_site_name":"Erin Stellato","article_published_time":"2015-12-31T20:26:13+00:00","article_modified_time":"2017-04-13T16:19:30+00:00","og_image":[{"url":"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-content\/uploads\/2015\/12\/bpreport-1024x330.jpg"}],"author":"Erin Stellato","twitter_misc":{"Written by":"Erin Stellato","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/erin\/capture-blocking-information-with-extended-events-and-the-blocked-process-report\/","url":"https:\/\/www.sqlskills.com\/blogs\/erin\/capture-blocking-information-with-extended-events-and-the-blocked-process-report\/","name":"Capture Blocking Information with Extended Events and the Blocked Process Report - Erin Stellato","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/erin\/#website"},"datePublished":"2015-12-31T20:26:13+00:00","dateModified":"2017-04-13T16:19:30+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/erin\/#\/schema\/person\/76170223ffffa1df03fd9be5b66cb158"},"description":"One method for capturing the blocking information is to use Extended Events and the blocked process report, rather than Trace or Event Notifications.","breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/erin\/capture-blocking-information-with-extended-events-and-the-blocked-process-report\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/erin\/capture-blocking-information-with-extended-events-and-the-blocked-process-report\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/erin\/capture-blocking-information-with-extended-events-and-the-blocked-process-report\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlskills.com\/blogs\/erin\/"},{"@type":"ListItem","position":2,"name":"Capture Blocking Information with Extended Events and the Blocked Process Report"}]},{"@type":"WebSite","@id":"https:\/\/www.sqlskills.com\/blogs\/erin\/#website","url":"https:\/\/www.sqlskills.com\/blogs\/erin\/","name":"Erin Stellato","description":"The SQL Sequel","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sqlskills.com\/blogs\/erin\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.sqlskills.com\/blogs\/erin\/#\/schema\/person\/76170223ffffa1df03fd9be5b66cb158","name":"Erin Stellato","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqlskills.com\/blogs\/erin\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0c8b485bd54ea26b57e99f79b525f409?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0c8b485bd54ea26b57e99f79b525f409?s=96&d=mm&r=g","caption":"Erin Stellato"},"sameAs":["http:\/\/3.209.169.194\/blogs\/erin"],"url":"https:\/\/www.sqlskills.com\/blogs\/erin\/author\/erin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-json\/wp\/v2\/posts\/736"}],"collection":[{"href":"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-json\/wp\/v2\/comments?post=736"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-json\/wp\/v2\/posts\/736\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-json\/wp\/v2\/media?parent=736"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-json\/wp\/v2\/categories?post=736"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-json\/wp\/v2\/tags?post=736"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}