{"id":689,"date":"2010-05-11T14:25:00","date_gmt":"2010-05-11T14:25:00","guid":{"rendered":"\/blogs\/paul\/post\/Why-LOB-data-make-shrink-run-slooooowly-(T-SQL-Tuesday-006).aspx"},"modified":"2026-03-11T14:38:58","modified_gmt":"2026-03-11T21:38:58","slug":"why-lob-data-makes-shrink-run-slooooowly-t-sql-tuesday-006","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/paul\/why-lob-data-makes-shrink-run-slooooowly-t-sql-tuesday-006\/","title":{"rendered":"Why LOB data makes shrink run slooooowly (T-SQL Tuesday #006)"},"content":{"rendered":"<p>[Edit March 2026: Everything in this post applies to all versions of SQL Server still.]<\/p>\n<p><span style=\"font-family: verdana, geneva;\"><span style=\"font-size: small;\">This blog post is part of the monthly T-SQL Tuesday series that fellow-MVP Adam Machanic (<\/span><\/span><a href=\"https:\/\/twitter.com\/adammachanic\"><span style=\"font-family: verdana, geneva; font-size: small;\">twitter<\/span><\/a><span style=\"font-family: verdana, geneva; font-size: small;\">|<\/span><a href=\"http:\/\/sqlblog.com\/blogs\/adam_machanic\/default.aspx\"><span style=\"font-family: verdana, geneva; font-size: small;\">blog<\/span><\/a><span style=\"font-family: verdana, geneva; font-size: small;\">) organizes. This month&#8217;s T-SQL Tuesday is being run by\u00a0Michael Coles\u00a0(<\/span><a href=\"https:\/\/twitter.com\/Sergeant_SQL\"><span style=\"font-family: verdana, geneva; font-size: small;\">twitter<\/span><\/a><span style=\"font-family: verdana, geneva; font-size: small;\">|<\/span><a href=\"http:\/\/sqlblog.com\/blogs\/michael_coles\/default.aspx\"><span style=\"font-family: verdana, geneva; font-size: small;\">blog<\/span><\/a><span style=\"font-family: verdana, geneva; font-size: small;\">) and is on the subject of reporting &#8211; see <\/span><a href=\"http:\/\/sqlblog.com\/blogs\/michael_coles\/archive\/2010\/05\/03\/t-sql-tuesday-006-what-about-blob.aspx\"><span style=\"font-family: verdana, geneva; font-size: small;\">this blog post<\/span><\/a><span style=\"font-family: verdana, geneva; font-size: small;\"> for details.<\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">The theme of this month&#8217;s T-SQL Tuesday is LOB data so I&#8217;m going to stretch things a little and explain why LOB data makes shrink performance really suck (that&#8217;s a technical term :-)<\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">You all know that I really don&#8217;t like data file shrinking (although it can sometimes be absolutely necessary. See these posts for my soap-box diatribes:<\/span><\/p>\n<ul>\n<li>\n<div><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/a-sql-server-dba-myth-a-day-930-data-file-shrink-does-not-affect-performance\/\"><span style=\"font-family: verdana, geneva; font-size: small;\">A SQL Server DBA myth a day: (9\/30) data file shrink does not affect performance<\/span><\/a><\/div>\n<\/li>\n<li>\n<div><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/why-you-should-not-shrink-your-data-files\/\"><span style=\"font-family: verdana, geneva; font-size: small;\">Why you should not shrink your data files<\/span><\/a><\/div>\n<\/li>\n<\/ul>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">The way that data file shrink works is that it picks up pages from the end of the data file and tries to move them as far towards the beginning of the data file as it can. As part of doing this, it has to fix up any structures that page is part of.<\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">For example, if the page is part of an index, there will be other pages in the index that have physical links to the page being moved &#8211; these linkages have to be fixed up. The left- and right-hand neighboring pages in the same level of the index are easy to fix, as the page being moved points to them.<\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">However, the page in the next level up towards the root page in the index is more tricky, as there&#8217;s no back-link pointing up to it &#8211; a scan of the next level in the index is required to find the page that points down to the page being moved. This should be pretty fast as the index levels get much smaller pretty quickly as you move up towards the root page (the magnitude change in size depends on the fanout of the index &#8211; I explain this in the post <\/span><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/inside-sys-dm_db_index_physical_stats\/\"><span style=\"font-family: verdana, geneva; font-size: small;\">Inside sys.dm_db_index_physical_stats<\/span><\/a><span style=\"font-family: verdana, geneva; font-size: small;\">).<\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\"><span style=\"text-decoration: underline;\">Important point:<\/span> Whenever a page is being moved and there&#8217;s some portion of a structure on the page that doesn&#8217;t have a backlink to what is pointing to it, <span style=\"text-decoration: underline;\">a scan is involved<\/span>.<\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">LOB values can be stored in-row or off-row (i.e. as part of the data or index record, or in a tree of text records on different pages altogether). Legacy LOB types (<span style=\"font-family: 'courier new', courier;\">text<\/span>, <span style=\"font-family: 'courier new', courier;\">ntext<\/span>, <span style=\"font-family: 'courier new', courier;\">image<\/span>) are stored off-row by default. New LOB types (<span style=\"font-family: 'courier new', courier;\">varchar(max)<\/span>, <span style=\"font-family: 'courier new', courier;\">nvarchar(max)<\/span>, <span style=\"font-family: 'courier new', courier;\">XML<\/span>, <span style=\"font-family: 'courier new', courier;\">varbinary(max)<\/span>) are stored in-row by default, up to a maximum size of 8000 bytes as long as there is space in the record.<\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">When a LOB value is stored off-row, there is a complex pointer stored in the data or index row (called a blob root) that contains a pointer to the physical location of the top of the tree of text records that make up the LOB value, the size of the first record being pointed at, and a timestamp (not a time, a timestamp data-type value). The text record being pointed to also contains the same timestamp.<\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">Let&#8217;s take a look:<\/span><\/p>\n<blockquote><p><span style=\"font-family: 'courier new', courier; font-size: small;\">CREATE TABLE TextTest (c1 INT, c2 TEXT);<\/span><\/p>\n<p>GO<\/p>\n<p>INSERT INTO TextTest VALUES (1, &#8216;a&#8217;);<\/p>\n<p>GO<\/p><\/blockquote>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">Now figure out the first page in the table using <span style=\"font-family: 'courier new', courier;\">DBCC IND<\/span> or my <\/span><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/inside-the-storage-engine-sp_allocationmetadata-putting-undocumented-system-catalog-views-to-work\/\"><span style=\"font-family: 'courier new', courier; font-size: small;\">sp_AllocationMetadata<\/span><\/a><span style=\"font-family: verdana, geneva; font-size: small;\"> script, or whatever, and run <span style=\"font-family: 'courier new', courier;\">DBCC PAGE<\/span> on it:<\/span><\/p>\n<blockquote><p><span style=\"font-family: 'courier new', courier; font-size: small;\">DBCC TRACEON (3604);<\/span><\/p>\n<p>DBCC PAGE (TestDB, 1, 737, 3);<\/p>\n<p>GO<\/p>\n<p><span style=\"font-family: 'courier new', courier; font-size: small;\">&lt;snip&gt;<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier; font-size: small;\">Slot 0 Column 0 Offset 0x4 Length 4<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier; font-size: small;\">c1 = 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier; font-size: small;\">c2 = [Textpointer] Slot 0 Column 1 Offset 0xf Length 16<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier; font-size: small;\">TextTimeStamp = <strong>131137536<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 RowId = (1:152:0) <\/span><\/p><\/blockquote>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">If we follow the pointer to page <span style=\"font-family: 'courier new', courier;\">(1:152)<\/span> and run <span style=\"font-family: 'courier new', courier;\">DBCC PAGE<\/span> on it, we see:<\/span><\/p>\n<blockquote><p><span style=\"font-family: 'courier new', courier; font-size: small;\">DBCC TRACEON (3604);<\/span><\/p>\n<p>DBCC PAGE (foo, 1, 152, 3);<\/p>\n<p>GO<\/p>\n<p><span style=\"font-family: 'courier new', courier; font-size: small;\">&lt;snip&gt;<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier; font-size: small;\">Blob row at: Page (1:152) Slot 0 Length: 84 Type: 0 (SMALL_ROOT)<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier; font-size: small;\">Small Blob Id: <strong>131137536<\/strong> Size:1<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier; font-size: small;\">6855C074:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 61\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 a<\/span><\/p><\/blockquote>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">Notice that the two numbers in bold match. Notice also that there&#8217;s no backlink from the off-row LOB value back to the &#8216;owning&#8217; data record.<\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">When a text page is moved by data file shrink, a table scan must be performed for each LOB value to find the &#8216;owning&#8217; data record so the pointer can be updated. (If the LOB value is from an <span style=\"font-family: 'courier new', courier;\">INCLUDE<\/span>d column in a nonclustered index, then a similar scan must be performed of the nonclustered index. If the LOB value is lower down in the text tree for a &gt;8000 byte LOB value, all text pages for that table or index must be scanned.)<\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">Very slow. Very, very slow.<\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">There&#8217;s a similar issue if <span style=\"font-family: 'courier new', courier;\">DBCC CHECKDB<\/span> finds an orphaned text record &#8211; it can&#8217;t tell who is supposed to own it so it has to go back and rescan all tables in its current batch to figure it out &#8211; which can make <span style=\"font-family: 'courier new', courier;\">DBCC CHECKDB<\/span> take a lot longer than usual too.<\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">During SQL Server 2005 development when the new LOB types were implemented, I pushed for a backlink to alleviate these problems, but the engineering effort wasn&#8217;t worth it. So we&#8217;re stuck with it.<\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">Yet one more reason that shrink is nasty!<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>[Edit March 2026: Everything in this post applies to all versions of SQL Server still.] This blog post is part of the monthly T-SQL Tuesday series that fellow-MVP Adam Machanic (twitter|blog) organizes. This month&#8217;s T-SQL Tuesday is being run by\u00a0Michael Coles\u00a0(twitter|blog) and is on the subject of reporting &#8211; see this blog post for details. [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[56,81],"tags":[],"class_list":["post-689","post","type-post","status-publish","format-standard","hentry","category-lob-data","category-shrink"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Why LOB data makes shrink run slooooowly (T-SQL Tuesday #006) - Paul S. Randal<\/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\/paul\/why-lob-data-makes-shrink-run-slooooowly-t-sql-tuesday-006\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Why LOB data makes shrink run slooooowly (T-SQL Tuesday #006) - Paul S. Randal\" \/>\n<meta property=\"og:description\" content=\"[Edit March 2026: Everything in this post applies to all versions of SQL Server still.] This blog post is part of the monthly T-SQL Tuesday series that fellow-MVP Adam Machanic (twitter|blog) organizes. This month&#8217;s T-SQL Tuesday is being run by\u00a0Michael Coles\u00a0(twitter|blog) and is on the subject of reporting &#8211; see this blog post for details. [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/paul\/why-lob-data-makes-shrink-run-slooooowly-t-sql-tuesday-006\/\" \/>\n<meta property=\"og:site_name\" content=\"Paul S. Randal\" \/>\n<meta property=\"article:published_time\" content=\"2010-05-11T14:25:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-11T21:38:58+00:00\" \/>\n<meta name=\"author\" content=\"Paul Randal\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Paul Randal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/why-lob-data-makes-shrink-run-slooooowly-t-sql-tuesday-006\/\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/why-lob-data-makes-shrink-run-slooooowly-t-sql-tuesday-006\/\",\"name\":\"Why LOB data makes shrink run slooooowly (T-SQL Tuesday #006) - Paul S. Randal\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/#website\"},\"datePublished\":\"2010-05-11T14:25:00+00:00\",\"dateModified\":\"2026-03-11T21:38:58+00:00\",\"author\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/ffcec826c18782e1e0adf173826a7fce\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/why-lob-data-makes-shrink-run-slooooowly-t-sql-tuesday-006\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sqlskills.com\/blogs\/paul\/why-lob-data-makes-shrink-run-slooooowly-t-sql-tuesday-006\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/why-lob-data-makes-shrink-run-slooooowly-t-sql-tuesday-006\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Why LOB data makes shrink run slooooowly (T-SQL Tuesday #006)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/#website\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/\",\"name\":\"Paul S. Randal\",\"description\":\"In Recovery...\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/?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\/paul\/#\/schema\/person\/ffcec826c18782e1e0adf173826a7fce\",\"name\":\"Paul Randal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0b6a266bba2f088f2551ef529293001bd73bf026bc1908b9866728c062beeeb6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0b6a266bba2f088f2551ef529293001bd73bf026bc1908b9866728c062beeeb6?s=96&d=mm&r=g\",\"caption\":\"Paul Randal\"},\"sameAs\":[\"http:\/\/3.209.169.194\/blogs\/paul\"],\"url\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/author\/paul\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Why LOB data makes shrink run slooooowly (T-SQL Tuesday #006) - Paul S. Randal","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\/paul\/why-lob-data-makes-shrink-run-slooooowly-t-sql-tuesday-006\/","og_locale":"en_US","og_type":"article","og_title":"Why LOB data makes shrink run slooooowly (T-SQL Tuesday #006) - Paul S. Randal","og_description":"[Edit March 2026: Everything in this post applies to all versions of SQL Server still.] This blog post is part of the monthly T-SQL Tuesday series that fellow-MVP Adam Machanic (twitter|blog) organizes. This month&#8217;s T-SQL Tuesday is being run by\u00a0Michael Coles\u00a0(twitter|blog) and is on the subject of reporting &#8211; see this blog post for details. [&hellip;]","og_url":"https:\/\/www.sqlskills.com\/blogs\/paul\/why-lob-data-makes-shrink-run-slooooowly-t-sql-tuesday-006\/","og_site_name":"Paul S. Randal","article_published_time":"2010-05-11T14:25:00+00:00","article_modified_time":"2026-03-11T21:38:58+00:00","author":"Paul Randal","twitter_misc":{"Written by":"Paul Randal","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/why-lob-data-makes-shrink-run-slooooowly-t-sql-tuesday-006\/","url":"https:\/\/www.sqlskills.com\/blogs\/paul\/why-lob-data-makes-shrink-run-slooooowly-t-sql-tuesday-006\/","name":"Why LOB data makes shrink run slooooowly (T-SQL Tuesday #006) - Paul S. Randal","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/#website"},"datePublished":"2010-05-11T14:25:00+00:00","dateModified":"2026-03-11T21:38:58+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/ffcec826c18782e1e0adf173826a7fce"},"breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/why-lob-data-makes-shrink-run-slooooowly-t-sql-tuesday-006\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/paul\/why-lob-data-makes-shrink-run-slooooowly-t-sql-tuesday-006\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/why-lob-data-makes-shrink-run-slooooowly-t-sql-tuesday-006\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlskills.com\/blogs\/paul\/"},{"@type":"ListItem","position":2,"name":"Why LOB data makes shrink run slooooowly (T-SQL Tuesday #006)"}]},{"@type":"WebSite","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/#website","url":"https:\/\/www.sqlskills.com\/blogs\/paul\/","name":"Paul S. Randal","description":"In Recovery...","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sqlskills.com\/blogs\/paul\/?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\/paul\/#\/schema\/person\/ffcec826c18782e1e0adf173826a7fce","name":"Paul Randal","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0b6a266bba2f088f2551ef529293001bd73bf026bc1908b9866728c062beeeb6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0b6a266bba2f088f2551ef529293001bd73bf026bc1908b9866728c062beeeb6?s=96&d=mm&r=g","caption":"Paul Randal"},"sameAs":["http:\/\/3.209.169.194\/blogs\/paul"],"url":"https:\/\/www.sqlskills.com\/blogs\/paul\/author\/paul\/"}]}},"_links":{"self":[{"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/posts\/689","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/comments?post=689"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/posts\/689\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/media?parent=689"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/categories?post=689"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/tags?post=689"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}