{"id":571,"date":"2010-01-19T10:19:00","date_gmt":"2010-01-19T10:19:00","guid":{"rendered":"\/blogs\/jonathan\/post\/Tuning-e28098cost-threshold-for-parallelisme28099-from-the-Plan-Cache.aspx"},"modified":"2017-04-13T13:06:04","modified_gmt":"2017-04-13T17:06:04","slug":"tuning-cost-threshold-for-parallelism-from-the-plan-cache","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/tuning-cost-threshold-for-parallelism-from-the-plan-cache\/","title":{"rendered":"Tuning \u2018cost threshold for parallelism\u2019 from the Plan Cache"},"content":{"rendered":"<p>A good while ago I was asked if it was possible to consistently produce a parallel plan by Tom LaRock(<a href=\"https:\/\/thomaslarock.com\/\">blog<\/a>\/<a href=\"https:\/\/twitter.com\/sqlrockstar\">twitter<\/a>), and I recalled from reading Grant Fritchey\u2019s(<a href=\"http:\/\/www.scarydba.com\/\">blog<\/a>\/<a href=\"https:\/\/mobile.twitter.com\/gfritchey\">twitter<\/a>) book on <a href=\"https:\/\/www.amazon.com\/Server-Execution-Plans-Grant-Fritchey\/dp\/1906434026\/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1263876047&amp;sr=8-1\">Execution Plans<\/a> that it was possible to do this by adjusting the \u2018cost threshold for parallelism\u2019 sp_configure option from the default of five to a value of one which will make even simple queries run in parallel if you have multiple logical processors.&#160; <\/p>\n<p>This got me think about this option and wondering if the default is still applicable in today\u2019s servers and database environments.&#160; If you think about when the default values for SQL Server were actually created, it was a long time ago and in today\u2019s large commodity hardware servers some of them aren\u2019t the best for SQL any longer.&#160; For example, most people migrating from an x86 SQL Server to a x64 server learn really quick that you have to set Max Server Memory on a 64 bit server, something that you could get away with not setting on older x86 hardware even though it was still a recommended practice.&#160; <\/p>\n<p>Max Degree of Parallelism is another hot one these days with newer Xeon Quad Core and Nahelem six core processors and reduced server costs, it is easy to slam sixteen or twenty-four cores into a relatively cheap server that has 64-128GB of RAM, a configuration that only a few years ago was specialty hardware that was cost prohibitive for most shops.&#160; These kinds of servers have quickly become the answer to performance problems that aren\u2019t necessarily hardware related but instead poor design.&#160; What you get is a person with no idea how SQL Server works, with a really powerful server that is full of performance problems because it is trying to run with the default settings which aren\u2019t appropriate for this size of hardware.<\/p>\n<p>In Bob Ward\u2019s session on wait stats at PASS, one thing he said a couple of times is that the answer to CXPACKET waits, isn\u2019t to reduce the \u2018max degree of parallelism\u2019 sp_configure option for the hole server.&#160; I have to admit that I am guilty of recommending this solution hundreds of times before PASS and in most cases I continue to recommend this solution to people who have ho idea what they are doing&#160; because: <\/p>\n<blockquote>\n<p>A.&#160; Most seem to be to lazy to read the referenced whitepapers provided to them for troubleshooting.      <br \/>B.&#160; They have no idea what they are doing.       <br \/>C.&#160; They want a quick fix that gets their manager off their back.<\/p>\n<\/blockquote>\n<p>One thing that Tom\u2019s question lead me to thinking about was whether or not adjusting the \u2018cost threshold for parallelism\u2019 up from five to a number that still allows large queries that don\u2019t execute frequently to work with parallelism, while minimizing the number of smaller queries that execute more frequently from running in parallel.&#160; To help with determining where this option might be set, I wrote a query to search the plan cache for existing parallel plans and see the cost associations to current plans that executed parallel.<\/p>\n<blockquote>\n<div class=\"csharpcode\">\n<pre class=\"alt\"><span class=\"kwrd\">SET<\/span> <span class=\"kwrd\">TRANSACTION<\/span> <span class=\"kwrd\">ISOLATION<\/span> <span class=\"kwrd\">LEVEL<\/span> <span class=\"kwrd\">READ<\/span> UNCOMMITTED; <\/pre>\n<pre><span class=\"kwrd\">WITH<\/span> XMLNAMESPACES   <\/pre>\n<pre class=\"alt\">(<span class=\"kwrd\">DEFAULT<\/span> <span class=\"str\">'http:\/\/schemas.microsoft.com\/sqlserver\/2004\/07\/showplan'<\/span>)  <\/pre>\n<pre><span class=\"kwrd\">SELECT<\/span>  <\/pre>\n<pre class=\"alt\">&#160;&#160;&#160;&#160; query_plan <span class=\"kwrd\">AS<\/span> CompleteQueryPlan, <\/pre>\n<pre>     n.<span class=\"kwrd\">value<\/span>(<span class=\"str\">'(@StatementText)[1]'<\/span>, <span class=\"str\">'VARCHAR(4000)'<\/span>) <span class=\"kwrd\">AS<\/span> StatementText, <\/pre>\n<pre class=\"alt\">&#160;&#160;&#160;&#160; n.<span class=\"kwrd\">value<\/span>(<span class=\"str\">'(@StatementOptmLevel)[1]'<\/span>, <span class=\"str\">'VARCHAR(25)'<\/span>) <span class=\"kwrd\">AS<\/span> StatementOptimizationLevel, <\/pre>\n<pre>     n.<span class=\"kwrd\">value<\/span>(<span class=\"str\">'(@StatementSubTreeCost)[1]'<\/span>, <span class=\"str\">'VARCHAR(128)'<\/span>) <span class=\"kwrd\">AS<\/span> StatementSubTreeCost, <\/pre>\n<pre class=\"alt\">&#160;&#160;&#160;&#160; n.query(<span class=\"str\">'.'<\/span>) <span class=\"kwrd\">AS<\/span> ParallelSubTreeXML,  <\/pre>\n<pre>     ecp.usecounts, <\/pre>\n<pre class=\"alt\">&#160;&#160;&#160;&#160; ecp.size_in_bytes <\/pre>\n<pre><span class=\"kwrd\">FROM<\/span> sys.dm_exec_cached_plans <span class=\"kwrd\">AS<\/span> ecp <\/pre>\n<pre class=\"alt\"><span class=\"kwrd\">CROSS<\/span> APPLY sys.dm_exec_query_plan(plan_handle) <span class=\"kwrd\">AS<\/span> eqp <\/pre>\n<pre><span class=\"kwrd\">CROSS<\/span> APPLY query_plan.nodes(<span class=\"str\">'\/ShowPlanXML\/BatchSequence\/Batch\/Statements\/StmtSimple'<\/span>) <span class=\"kwrd\">AS<\/span> qn(n) <\/pre>\n<pre class=\"alt\"><span class=\"kwrd\">WHERE<\/span>  n.query(<span class=\"str\">'.'<\/span>).exist(<span class=\"str\">'\/\/RelOp[@PhysicalOp=&quot;Parallelism&quot;]'<\/span>) = 1 <\/pre>\n<\/p><\/div>\n<style type=\"text\/css\">\n.csharpcode, .csharpcode pre\n{\n\tfont-size: small;\n\tcolor: black;\n\tfont-family: consolas, \"Courier New\", courier, monospace;\n\tbackground-color: #ffffff;\n\t\/*white-space: pre;*\/\n}\n.csharpcode pre { margin: 0em; }\n.csharpcode .rem { color: #008000; }\n.csharpcode .kwrd { color: #0000ff; }\n.csharpcode .str { color: #006080; }\n.csharpcode .op { color: #0000c0; }\n.csharpcode .preproc { color: #cc6633; }\n.csharpcode .asp { background-color: #ffff00; }\n.csharpcode .html { color: #800000; }\n.csharpcode .attr { color: #ff0000; }\n.csharpcode .alt \n{\n\tbackground-color: #f4f4f4;\n\twidth: 100%;\n\tmargin: 0em;\n}\n.csharpcode .lnum { color: #606060; }<\/style>\n<\/blockquote>\n<p>I look at the high use count plans, and see if there is a missing index associated with those queries that is driving the cost up.&#160; If I can tune the high execution queries to reduce their cost, I have a win either way.&#160; However, if you run this query, you will note that there are some really high cost queries that you may not get below the five value.&#160; If you can fix the high use plans to reduce their cost, and then increase the \u2018cost threshold for parallelism\u2019 based on the cost of your larger queries that may benefit from parallelism, having a couple of low use count plans that use parallelism doesn&#8217;t have as much of an impact to the server overall, at least based on my own personal experiences. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>A good while ago I was asked if it was possible to consistently produce a parallel plan by Tom LaRock(blog\/twitter), and I recalled from reading Grant Fritchey\u2019s(blog\/twitter) book on Execution Plans that it was possible to do this by adjusting the \u2018cost threshold for parallelism\u2019 sp_configure option from the default of five to a value [&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,31],"tags":[],"class_list":["post-571","post","type-post","status-publish","format-standard","hentry","category-database-administration","category-plan-cache"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Tuning \u2018cost threshold for parallelism\u2019 from the Plan Cache - 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\/tuning-cost-threshold-for-parallelism-from-the-plan-cache\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tuning \u2018cost threshold for parallelism\u2019 from the Plan Cache - Jonathan Kehayias\" \/>\n<meta property=\"og:description\" content=\"A good while ago I was asked if it was possible to consistently produce a parallel plan by Tom LaRock(blog\/twitter), and I recalled from reading Grant Fritchey\u2019s(blog\/twitter) book on Execution Plans that it was possible to do this by adjusting the \u2018cost threshold for parallelism\u2019 sp_configure option from the default of five to a value [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/jonathan\/tuning-cost-threshold-for-parallelism-from-the-plan-cache\/\" \/>\n<meta property=\"og:site_name\" content=\"Jonathan Kehayias\" \/>\n<meta property=\"article:published_time\" content=\"2010-01-19T10:19:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-04-13T17:06:04+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=\"4 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\\\/tuning-cost-threshold-for-parallelism-from-the-plan-cache\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/tuning-cost-threshold-for-parallelism-from-the-plan-cache\\\/\"},\"author\":{\"name\":\"Jonathan Kehayias\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#\\\/schema\\\/person\\\/01c10d94f3648654ef706d5e6305f69c\"},\"headline\":\"Tuning \u2018cost threshold for parallelism\u2019 from the Plan Cache\",\"datePublished\":\"2010-01-19T10:19:00+00:00\",\"dateModified\":\"2017-04-13T17:06:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/tuning-cost-threshold-for-parallelism-from-the-plan-cache\\\/\"},\"wordCount\":667,\"commentCount\":13,\"articleSection\":[\"Database Administration\",\"Plan Cache\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/tuning-cost-threshold-for-parallelism-from-the-plan-cache\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/tuning-cost-threshold-for-parallelism-from-the-plan-cache\\\/\",\"url\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/tuning-cost-threshold-for-parallelism-from-the-plan-cache\\\/\",\"name\":\"Tuning \u2018cost threshold for parallelism\u2019 from the Plan Cache - Jonathan Kehayias\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#website\"},\"datePublished\":\"2010-01-19T10:19:00+00:00\",\"dateModified\":\"2017-04-13T17:06:04+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#\\\/schema\\\/person\\\/01c10d94f3648654ef706d5e6305f69c\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/tuning-cost-threshold-for-parallelism-from-the-plan-cache\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/tuning-cost-threshold-for-parallelism-from-the-plan-cache\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/tuning-cost-threshold-for-parallelism-from-the-plan-cache\\\/#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\":\"Tuning \u2018cost threshold for parallelism\u2019 from the Plan Cache\"}]},{\"@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":"Tuning \u2018cost threshold for parallelism\u2019 from the Plan Cache - 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\/tuning-cost-threshold-for-parallelism-from-the-plan-cache\/","og_locale":"en_US","og_type":"article","og_title":"Tuning \u2018cost threshold for parallelism\u2019 from the Plan Cache - Jonathan Kehayias","og_description":"A good while ago I was asked if it was possible to consistently produce a parallel plan by Tom LaRock(blog\/twitter), and I recalled from reading Grant Fritchey\u2019s(blog\/twitter) book on Execution Plans that it was possible to do this by adjusting the \u2018cost threshold for parallelism\u2019 sp_configure option from the default of five to a value [&hellip;]","og_url":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/tuning-cost-threshold-for-parallelism-from-the-plan-cache\/","og_site_name":"Jonathan Kehayias","article_published_time":"2010-01-19T10:19:00+00:00","article_modified_time":"2017-04-13T17:06:04+00:00","author":"Jonathan Kehayias","twitter_misc":{"Written by":"Jonathan Kehayias","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/tuning-cost-threshold-for-parallelism-from-the-plan-cache\/#article","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/tuning-cost-threshold-for-parallelism-from-the-plan-cache\/"},"author":{"name":"Jonathan Kehayias","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#\/schema\/person\/01c10d94f3648654ef706d5e6305f69c"},"headline":"Tuning \u2018cost threshold for parallelism\u2019 from the Plan Cache","datePublished":"2010-01-19T10:19:00+00:00","dateModified":"2017-04-13T17:06:04+00:00","mainEntityOfPage":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/tuning-cost-threshold-for-parallelism-from-the-plan-cache\/"},"wordCount":667,"commentCount":13,"articleSection":["Database Administration","Plan Cache"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.sqlskills.com\/blogs\/jonathan\/tuning-cost-threshold-for-parallelism-from-the-plan-cache\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/tuning-cost-threshold-for-parallelism-from-the-plan-cache\/","url":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/tuning-cost-threshold-for-parallelism-from-the-plan-cache\/","name":"Tuning \u2018cost threshold for parallelism\u2019 from the Plan Cache - Jonathan Kehayias","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#website"},"datePublished":"2010-01-19T10:19:00+00:00","dateModified":"2017-04-13T17:06:04+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#\/schema\/person\/01c10d94f3648654ef706d5e6305f69c"},"breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/tuning-cost-threshold-for-parallelism-from-the-plan-cache\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/jonathan\/tuning-cost-threshold-for-parallelism-from-the-plan-cache\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/tuning-cost-threshold-for-parallelism-from-the-plan-cache\/#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":"Tuning \u2018cost threshold for parallelism\u2019 from the Plan Cache"}]},{"@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\/571","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=571"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/posts\/571\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/media?parent=571"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/categories?post=571"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/tags?post=571"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}