{"id":1808,"date":"2013-06-14T11:00:28","date_gmt":"2013-06-14T15:00:28","guid":{"rendered":"http:\/\/3.209.169.194\/blogs\/jonathan\/?p=1808"},"modified":"2017-09-25T22:23:24","modified_gmt":"2017-09-26T02:23:24","slug":"the-accidental-dba-day-14-of-30-index-maintenance","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/the-accidental-dba-day-14-of-30-index-maintenance\/","title":{"rendered":"The Accidental DBA (Day 14 of 30): Index Maintenance"},"content":{"rendered":"<p><em>This month the SQLskills team is presenting a series of blog posts aimed at helping Accidental\/Junior DBAs &#8216;keep the SQL Server lights on&#8217;. It&#8217;s a little taster to let you know what we cover in our\u00a0<a href=\"https:\/\/www.sqlskills.com\/sql-server-training\/ie0\/?utm_source=accidentaldba&amp;utm_medium=blogs&amp;utm_campaign=training\" target=\"_blank\" rel=\"noopener noreferrer\">Immersion Event for The Accidental\/Junior DBA<\/a>, which we present\u00a0<a href=\"https:\/\/www.sqlskills.com\/sql-server-training\/immersion-events-schedule\/?utm_source=accidentaldba&amp;utm_medium=blogs&amp;utm_campaign=training\" target=\"_blank\" rel=\"noopener noreferrer\">several times each year<\/a>. You can find all the other posts in this series at\u00a0<a href=\"https:\/\/www.SQLskills.com\/help\/accidental-dba\/?utm_source=accidentaldba&amp;utm_medium=blogs&amp;utm_campaign=training\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/www.SQLskills.com\/help\/AccidentalDBA<\/a>. Enjoy!<\/em><\/p>\n<p>Like a high performance sports car, SQL Server databases require routine maintenance to maintain their best performance. Unless a database is read-only, one of the most common maintenance tasks that is required periodically is rebuilding or reorganizing the indexes\u00a0in the database to remove fragmentation. Index fragmentation generally is categorized as one of the following two problems:<\/p>\n<ul>\n<li>Logical scan fragmentation &#8211; physical page ordering not matching the index key order, due to page splits occurring during <em>INSERT\/UPDATE<\/em> operations. This affects the performance of range scan operations and results in an increased number of smaller block I\/O operations, reading as little as a single 8-KB page at a time.<\/li>\n<li>Low page density &#8211;\u00a0individual pages within the index have large amounts of free space due to page splits during <em>INSERT\/UPDATE<\/em> operations or <em>DELETE<\/em> operations removing data from the table.<\/li>\n<\/ul>\n<p>There are many ways to deal with index fragmentation that can be automated in SQL Server.\u00a0 Probably the most common method implemented by Accidental DBAs is the use of the built in Database Maintenance Plans in SQL Server using a plan built through the Maintenance Plan Wizard. However, other options exist that are better, using custom T-SQL scripts that do less work by first analyzing the index fragmentation and page density levels before determining the best option for reducing the fragmentation with the least amount of work.<\/p>\n<h2>Database Maintenance Plans<\/h2>\n<p>Database Maintenance Plans exist in SQL Server to simplify the tasks required for general maintenance of the databases within an instance, and are generally very easy to configure.\u00a0 However, using the Maintenance Plan Wizard can lead to redundant tasks for index maintenance, and the tasks are executed against all of the indexes, regardless of whether fragmentation exists or not.\u00a0 Common Maintenance Plans that I&#8217;ve seen when consulting have a Reorganize Index Task that is immediately followed by a Rebuild Index Task in the same schedule, since this is what the default options for the wizard will allow you to configure unless changes are made. While something is better than nothing, this unfortunately also performs double the work by first reorganizing the indexes, which removes the fragmentation but may not be the most efficient method of doing so,\u00a0and then rebuilding the index, which creates a copy of the index that does not contain fragmentation before dropping the original page allocations for the index.<\/p>\n<p>The Reorganize Index Task is best suited for indexes with low fragmentation levels whereas the Rebuild Index Task is best suited for indexes with high fragmentation.\u00a0 However, the problem with both of these maintenance plan tasks is that neither of them actually check the fragmentation level before running the <em>ALTER INDEX<\/em> operation against the indexes.\u00a0 If the task is configured to run for All Databases, which is very common for most maintenance plan usage, then the task will reorganize or rebuild all of the indexes in all of the databases, even if the indexes are not actually fragmented.\u00a0 For the rebuild task, this can result in high I\/O activity and transaction log generation that could be avoided through analysis-based index maintenance using T-SQL scripts.<\/p>\n<h2>Custom Scripts<\/h2>\n<p>The preferred method of performing index maintenance with the least amount of overhead involves first analyzing the index fragmentation levels and then deciding whether it is more efficient to reorganize the index using <em>ALTER INDEX &#8230;\u00a0REORGANIZE<\/em>, or to rebuild the index using <em>ALTER INDEX &#8230; REBUILD<\/em>.\u00a0 The index fragmentation level can be found using the <em>sys.dm_db_index_physical_stats<\/em> function in SQL Server, and the <a title=\"Where do the Books Online index fragmentation thresholds come from?\" href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/where-do-the-books-online-index-fragmentation-thresholds-come-from\/\" target=\"_blank\" rel=\"noopener noreferrer\">general recommendations <\/a>in the Books Online are:<\/p>\n<ul>\n<li>If an index has less than 1,000 pages, don&#8217;t bother removing fragmentation<\/li>\n<li>If the index has:\n<ul>\n<li>less than 10% logical fragmentation, don&#8217;t do anything<\/li>\n<li>between 10% and 30% logical fragmentation, reorganize it (using <em>ALTER INDEX \u2026 REORGANIZE<\/em>)<\/li>\n<li>more than 30% logical fragmentation, rebuild it (using <em>ALTER INDEX \u2026 REBUILD<\/em>)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Since this type of index maintenance requires custom coding it\u00a0is not\u00a0quite as easy to implement as the built in\u00a0Maintenance Plans, it might seem like more work than it&#8217;s worth.\u00a0 However, there are a number of freely available scripts that are easy to deploy that automate all of this for you, and can even be faster to implement than manually building a Maintenance Plan using the Maintenance Plan Wizard.<\/p>\n<p>In a recent survey by Paul,\u00a0<a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/easy-automation-of-sql-server-database-maintenance\/\" target=\"_blank\" rel=\"noopener noreferrer\">Easy automation of SQL Server database maintenance<\/a>, more than 40% of the almost 500 respondents use some or all of <a href=\"https:\/\/ola.hallengren.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Ola Hallengren\u2019s Maintenance Solution<\/a>, and I always recommend these scripts to clients as a way to save them consulting time.\u00a0 Ola provides an easy-to-deploy alternative to Database Maintenance Plans in a single script that creates all the customized stored procedures and SQL Agent jobs for index maintenance, statistics updates, consistency checks, and even database backups that follow recommended best practices for SQL Server.\u00a0 I replaced my own scripts as a DBA\u00a0close to five\u00a0years ago with Ola&#8217;s scripts when they were first available and have been using them for SQL Server maintenance tasks ever since.\u00a0 Paul&#8217;s blog post also points out other popular scripts from SQL Server MVPs <a href=\"http:\/\/sqlfool.com\/2011\/06\/index-defrag-script-v4-1\/\" target=\"_blank\" rel=\"noopener noreferrer\">Michelle Ufford<\/a> and <a href=\"http:\/\/weblogs.sqlteam.com\/tarad\/archive\/2009\/11\/03\/DefragmentingRebuilding-Indexes-in-SQL-Server-2005-and-2008Again.aspx\" target=\"_blank\" rel=\"noopener noreferrer\">Tara Kizer<\/a>\u00a0as other options specifically for index maintenance.<\/p>\n<h2>Summary<\/h2>\n<p>Proper index maintenance is critical task for maintaining the performance of SQL Server databases, and while there are multiple options for automating this common task, custom scripts provide the best method of minimizing the work to be done by performing the most efficient operation based on the actual fragmentation that exists.<\/p>\n<p>Our online training (Pluralsight) courses that can help you with this topic:<\/p>\n<ul>\n<li><a href=\"http:\/\/www.pluralsight.com\/courses\/sqlserver-index-fragmentation-internals-analysis-solutions\" target=\"_blank\" rel=\"noopener noreferrer\">SQL Server: Index Fragmentation Internals, Analysis, and Solutions<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>This month the SQLskills team is presenting a series of blog posts aimed at helping Accidental\/Junior DBAs &#8216;keep the SQL Server lights on&#8217;. It&#8217;s a little taster to let you know what we cover in our\u00a0Immersion Event for The Accidental\/Junior DBA, which we present\u00a0several times each year. You can find all the other posts 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":[19],"tags":[],"class_list":["post-1808","post","type-post","status-publish","format-standard","hentry","category-database-administration"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>The Accidental DBA (Day 14 of 30): Index Maintenance - 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\/the-accidental-dba-day-14-of-30-index-maintenance\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The Accidental DBA (Day 14 of 30): Index Maintenance - Jonathan Kehayias\" \/>\n<meta property=\"og:description\" content=\"This month the SQLskills team is presenting a series of blog posts aimed at helping Accidental\/Junior DBAs &#8216;keep the SQL Server lights on&#8217;. It&#8217;s a little taster to let you know what we cover in our\u00a0Immersion Event for The Accidental\/Junior DBA, which we present\u00a0several times each year. You can find all the other posts in [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/jonathan\/the-accidental-dba-day-14-of-30-index-maintenance\/\" \/>\n<meta property=\"og:site_name\" content=\"Jonathan Kehayias\" \/>\n<meta property=\"article:published_time\" content=\"2013-06-14T15:00:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-09-26T02:23:24+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=\"5 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\\\/the-accidental-dba-day-14-of-30-index-maintenance\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/the-accidental-dba-day-14-of-30-index-maintenance\\\/\"},\"author\":{\"name\":\"Jonathan Kehayias\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#\\\/schema\\\/person\\\/01c10d94f3648654ef706d5e6305f69c\"},\"headline\":\"The Accidental DBA (Day 14 of 30): Index Maintenance\",\"datePublished\":\"2013-06-14T15:00:28+00:00\",\"dateModified\":\"2017-09-26T02:23:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/the-accidental-dba-day-14-of-30-index-maintenance\\\/\"},\"wordCount\":1008,\"commentCount\":7,\"articleSection\":[\"Database Administration\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/the-accidental-dba-day-14-of-30-index-maintenance\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/the-accidental-dba-day-14-of-30-index-maintenance\\\/\",\"url\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/the-accidental-dba-day-14-of-30-index-maintenance\\\/\",\"name\":\"The Accidental DBA (Day 14 of 30): Index Maintenance - Jonathan Kehayias\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#website\"},\"datePublished\":\"2013-06-14T15:00:28+00:00\",\"dateModified\":\"2017-09-26T02:23:24+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#\\\/schema\\\/person\\\/01c10d94f3648654ef706d5e6305f69c\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/the-accidental-dba-day-14-of-30-index-maintenance\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/the-accidental-dba-day-14-of-30-index-maintenance\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/the-accidental-dba-day-14-of-30-index-maintenance\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Database Administration\",\"item\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/category\\\/database-administration\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"The Accidental DBA (Day 14 of 30): Index Maintenance\"}]},{\"@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":"The Accidental DBA (Day 14 of 30): Index Maintenance - 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\/the-accidental-dba-day-14-of-30-index-maintenance\/","og_locale":"en_US","og_type":"article","og_title":"The Accidental DBA (Day 14 of 30): Index Maintenance - Jonathan Kehayias","og_description":"This month the SQLskills team is presenting a series of blog posts aimed at helping Accidental\/Junior DBAs &#8216;keep the SQL Server lights on&#8217;. It&#8217;s a little taster to let you know what we cover in our\u00a0Immersion Event for The Accidental\/Junior DBA, which we present\u00a0several times each year. You can find all the other posts in [&hellip;]","og_url":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/the-accidental-dba-day-14-of-30-index-maintenance\/","og_site_name":"Jonathan Kehayias","article_published_time":"2013-06-14T15:00:28+00:00","article_modified_time":"2017-09-26T02:23:24+00:00","author":"Jonathan Kehayias","twitter_misc":{"Written by":"Jonathan Kehayias","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/the-accidental-dba-day-14-of-30-index-maintenance\/#article","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/the-accidental-dba-day-14-of-30-index-maintenance\/"},"author":{"name":"Jonathan Kehayias","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#\/schema\/person\/01c10d94f3648654ef706d5e6305f69c"},"headline":"The Accidental DBA (Day 14 of 30): Index Maintenance","datePublished":"2013-06-14T15:00:28+00:00","dateModified":"2017-09-26T02:23:24+00:00","mainEntityOfPage":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/the-accidental-dba-day-14-of-30-index-maintenance\/"},"wordCount":1008,"commentCount":7,"articleSection":["Database Administration"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.sqlskills.com\/blogs\/jonathan\/the-accidental-dba-day-14-of-30-index-maintenance\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/the-accidental-dba-day-14-of-30-index-maintenance\/","url":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/the-accidental-dba-day-14-of-30-index-maintenance\/","name":"The Accidental DBA (Day 14 of 30): Index Maintenance - Jonathan Kehayias","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#website"},"datePublished":"2013-06-14T15:00:28+00:00","dateModified":"2017-09-26T02:23:24+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#\/schema\/person\/01c10d94f3648654ef706d5e6305f69c"},"breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/the-accidental-dba-day-14-of-30-index-maintenance\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/jonathan\/the-accidental-dba-day-14-of-30-index-maintenance\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/the-accidental-dba-day-14-of-30-index-maintenance\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/"},{"@type":"ListItem","position":2,"name":"Database Administration","item":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/category\/database-administration\/"},{"@type":"ListItem","position":3,"name":"The Accidental DBA (Day 14 of 30): Index Maintenance"}]},{"@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\/1808","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=1808"}],"version-history":[{"count":1,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/posts\/1808\/revisions"}],"predecessor-version":[{"id":2114,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/posts\/1808\/revisions\/2114"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/media?parent=1808"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/categories?post=1808"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/tags?post=1808"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}