{"id":485,"date":"2012-07-31T06:29:42","date_gmt":"2012-07-31T06:29:42","guid":{"rendered":"\/blogs\/joe\/post\/SQL-Server-2012e28099s-RetrievedFromCache-Attribute.aspx"},"modified":"2013-02-07T15:42:26","modified_gmt":"2013-02-07T23:42:26","slug":"sql-server-2012s-retrievedfromcache-attribute","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/joe\/sql-server-2012s-retrievedfromcache-attribute\/","title":{"rendered":"SQL Server 2012\u2019s RetrievedFromCache Attribute"},"content":{"rendered":"<p>SQL Server 2012 includes a new RetrievedFromCache attribute in the query execution plan.<\/p>\n<p>Let\u2019s say I execute the following query immediately after executing DBCC FREEPROCCACHE:<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\"> \r\nSELECT\u00a0\u00a0\u00a0\u00a0 p.ProductLine,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SUM(f.SalesAmount) AS TotalSalesAmount\r\nFROM &#x5B;dbo].&#x5B;FactInternetSales] AS f\r\nINNER JOIN &#x5B;dbo].&#x5B;DimProduct] AS p ON\r\n\u00a0\u00a0\u00a0\u00a0 f.ProductKey = p.ProductKey\r\nGROUP BY p.ProductLine\r\nORDER BY p.ProductLine;\r\n<\/pre>\n<style type=\"text\/css\"><!--\n.csharpcode, .csharpcode pre { \tfont-size: small; \tcolor: black; \tfont-family: consolas, \"Courier New\", courier, monospace; \tbackground-color: #ffffff; \t\/*white-space: pre;*\/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt  { \tbackground-color: #f4f4f4; \twidth: 100%; \tmargin: 0em; } .csharpcode .lnum { color: #606060; }\n--><\/style>\n<p>What value for RetrievedFromCache would you expect to see?\u00a0 In this example, I saw the following attribute value (with the attribute highlighted and StmtSimple abridged for clarity):<\/p>\n<p>&lt;StmtSimple StatementCompId=&#8221;2&#8243; StatementEstRows=&#8221;5&#8243; StatementId=&#8221;1&#8243; StatementOptmLevel=&#8221;FULL&#8221; StatementSubTreeCost=&#8221;57.0909&#8243;\u00a0 <span style=\"background-color: #ffff00;\">RetrievedFromCache=&#8221;true&#8221;<\/span>&gt;<\/p>\n<p>This value is also \u201ctrue\u201d for scenarios where you use sp_recompile on a module \u2013 as it just means that object will be recompiled on the next run and retrieved from cache.<\/p>\n<p>What if I add a RECOMPILE query hint?<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\"> \r\nSELECT\u00a0\u00a0\u00a0\u00a0 p.ProductLine,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SUM(f.SalesAmount) AS TotalSalesAmount\r\nFROM &#x5B;dbo].&#x5B;FactInternetSales] AS f\r\nINNER JOIN &#x5B;dbo].&#x5B;DimProduct] AS p ON\r\n\u00a0\u00a0\u00a0\u00a0 f.ProductKey = p.ProductKey\r\nGROUP BY p.ProductLine\r\nORDER BY p.ProductLine\r\nOPTION (RECOMPILE);\r\n<\/pre>\n<style type=\"text\/css\"><!--\n.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, \"Courier New\", courier, monospace; background-color: #ffffff; \/*white-space: pre;*\/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }\n--><\/style>\n<p>This time, I saw a \u201cfalse\u201d for RetreivedFromCache:<\/p>\n<p>&lt;StmtSimple StatementCompId=&#8221;1&#8243; StatementEstRows=&#8221;5&#8243; StatementId=&#8221;1&#8243; StatementOptmLevel=&#8221;FULL&#8221; StatementSubTreeCost=&#8221;57.0909&#8243;\u00a0 <span style=\"background-color: #ffff00;\">RetrievedFromCache=&#8221;false&#8221;<\/span>&gt;<\/p>\n<p>And what about scenarios where you have \u201coptimize for ad hoc workloads\u201d enabled for the SQL Server instance?<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\nEXEC sp_configure 'show advanced options',1;\r\n\r\nRECONFIGURE;\r\n\r\nEXEC sp_configure 'optimize for ad hoc workloads',1;\r\n\r\nRECONFIGURE;\r\n<\/pre>\n<style type=\"text\/css\"><!--\n.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, \"Courier New\", courier, monospace; background-color: #ffffff; \/*white-space: pre;*\/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }\n--><\/style>\n<p>I executed DBCC FREEPROCCACHE and execute the following query (which should be \u201cstubbed\u201d given the server option):<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\"> \r\nSELECT\u00a0\u00a0\u00a0\u00a0 p.ProductLine,\r\nSUM(f.SalesAmount) AS TotalSalesAmount\r\nFROM &#x5B;dbo].&#x5B;FactInternetSales] AS f\r\nINNER JOIN &#x5B;dbo].&#x5B;DimProduct] AS p ON\r\nf.ProductKey = p.ProductKey\r\nGROUP BY p.ProductLine\r\nORDER BY p.ProductLine;\r\nGO\r\n<\/pre>\n<style type=\"text\/css\"><!--\n.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, \"Courier New\", courier, monospace; background-color: #ffffff; \/*white-space: pre;*\/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }\n--><\/style>\n<p>Sure enough \u2013 the RetrievedFromCache is False:<\/p>\n<p>&lt;StmtSimple StatementCompId=&#8221;1&#8243; StatementEstRows=&#8221;5&#8243; StatementId=&#8221;1&#8243; StatementOptmLevel=&#8221;FULL&#8221; StatementSubTreeCost=&#8221;57.0909&#8243;\u00a0 <span style=\"background-color: #ffff00;\">RetrievedFromCache=&#8221;false&#8221;<\/span>&gt;<\/p>\n<p>And if I execute the SELECT query a second time without clearing the cache, it turns to \u201ctrue\u201d:<\/p>\n<p>&lt;StmtSimple StatementCompId=&#8221;1&#8243; StatementEstRows=&#8221;5&#8243; StatementId=&#8221;1&#8243; StatementOptmLevel=&#8221;FULL&#8221; StatementSubTreeCost=&#8221;57.0909&#8243;\u00a0 <span style=\"background-color: #ffff00;\">RetrievedFromCache=&#8221;true&#8221;<\/span>&gt;<\/p>\n<p>Now if I disable \u201coptimize for ad hoc workloads\u201d \u2013 what changes?<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\nEXEC sp_configure 'optimize for ad hoc workloads',0; \r\nRECONFIGURE;\r\n\r\nEXEC sp_configure 'show advanced options',0; \r\nRECONFIGURE;\r\n<\/pre>\n<style type=\"text\/css\"><!--\n.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, \"Courier New\", courier, monospace; background-color: #ffffff; \/*white-space: pre;*\/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }\n--><\/style>\n<p>As expected \u2013 after executing DBCC FREEPROCCACHE and executing the SELECT query, I see a RetrievedFromCache value of \u201ctrue\u201d in contrast to \u201cfalse\u201d when optimize for ad hoc workloads is enabled.<\/p>\n<style type=\"text\/css\"><!--\n.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, \"Courier New\", courier, monospace; background-color: #ffffff; \/*white-space: pre;*\/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }\n--><\/style>\n","protected":false},"excerpt":{"rendered":"<p>SQL Server 2012 includes a new RetrievedFromCache attribute in the query execution plan. Let\u2019s say I execute the following query immediately after executing DBCC FREEPROCCACHE: SELECT\u00a0\u00a0\u00a0\u00a0 p.ProductLine, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SUM(f.SalesAmount) AS TotalSalesAmount FROM &#x5B;dbo].&#x5B;FactInternetSales] AS f INNER JOIN &#x5B;dbo].&#x5B;DimProduct] AS p ON \u00a0\u00a0\u00a0\u00a0 f.ProductKey = p.ProductKey GROUP BY p.ProductLine ORDER BY p.ProductLine; What value for RetrievedFromCache [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[22,28],"tags":[],"class_list":["post-485","post","type-post","status-publish","format-standard","hentry","category-execution-plan","category-performance"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.9.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>SQL Server 2012\u2019s RetrievedFromCache Attribute - Joe Sack<\/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\/joe\/sql-server-2012s-retrievedfromcache-attribute\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SQL Server 2012\u2019s RetrievedFromCache Attribute - Joe Sack\" \/>\n<meta property=\"og:description\" content=\"SQL Server 2012 includes a new RetrievedFromCache attribute in the query execution plan. Let\u2019s say I execute the following query immediately after executing DBCC FREEPROCCACHE: SELECT\u00a0\u00a0\u00a0\u00a0 p.ProductLine, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SUM(f.SalesAmount) AS TotalSalesAmount FROM &#x5B;dbo].&#x5B;FactInternetSales] AS f INNER JOIN &#x5B;dbo].&#x5B;DimProduct] AS p ON \u00a0\u00a0\u00a0\u00a0 f.ProductKey = p.ProductKey GROUP BY p.ProductLine ORDER BY p.ProductLine; What value for RetrievedFromCache [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/joe\/sql-server-2012s-retrievedfromcache-attribute\/\" \/>\n<meta property=\"og:site_name\" content=\"Joe Sack\" \/>\n<meta property=\"article:published_time\" content=\"2012-07-31T06:29:42+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2013-02-07T23:42:26+00:00\" \/>\n<meta name=\"author\" content=\"Joseph Sack\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joseph Sack\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/sql-server-2012s-retrievedfromcache-attribute\/\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/sql-server-2012s-retrievedfromcache-attribute\/\",\"name\":\"SQL Server 2012\u2019s RetrievedFromCache Attribute - Joe Sack\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#website\"},\"datePublished\":\"2012-07-31T06:29:42+00:00\",\"dateModified\":\"2013-02-07T23:42:26+00:00\",\"author\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/533eb0113a15fb5a6e8067a49e4ae648\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/sql-server-2012s-retrievedfromcache-attribute\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sqlskills.com\/blogs\/joe\/sql-server-2012s-retrievedfromcache-attribute\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/sql-server-2012s-retrievedfromcache-attribute\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Execution Plan\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/category\/execution-plan\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"SQL Server 2012\u2019s RetrievedFromCache Attribute\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#website\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/\",\"name\":\"Joe Sack\",\"description\":\"SQL Server Performance Tuning, High Availability and Disaster Recovery Blog\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/533eb0113a15fb5a6e8067a49e4ae648\",\"name\":\"Joseph Sack\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a4b39a7719a6bfff1add3ec00527810734579ee114d6d983e8e68f937b77be96?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a4b39a7719a6bfff1add3ec00527810734579ee114d6d983e8e68f937b77be96?s=96&d=mm&r=g\",\"caption\":\"Joseph Sack\"},\"description\":\"Joe Sack is a Principal Consultant with SQLskills. He has worked as a SQL Server professional since 1997 and has supported and developed for SQL Server environments in financial services, IT consulting, manufacturing, retail and the real estate industry. Prior to joining SQLskills he worked at Microsoft as a Premier Field Engineer supporting very large enterprise customer environments. He was responsible for providing deep SQL Server advisory services, training, troubleshooting and ongoing solutions guidance. His areas of expertise include performance tuning, scalability, T-SQL development and high-availability. In 2006 Joe earned the \u201cMicrosoft Certified Master: SQL Server 2005\u201d certification and in 2008 he earned the \u201cMicrosoft Certified Master: SQL Server 2008\u201d certification. In 2009 he took over responsibility for the entire SQL Server Microsoft Certified Master program and held that post until 2011. He was given the SQL Server MVP award in 2013.\",\"sameAs\":[\"http:\/\/3.209.169.194\/blogs\/joe\",\"https:\/\/twitter.com\/https:\/\/twitter.com\/josephsack\"],\"url\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/author\/joe\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"SQL Server 2012\u2019s RetrievedFromCache Attribute - Joe Sack","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\/joe\/sql-server-2012s-retrievedfromcache-attribute\/","og_locale":"en_US","og_type":"article","og_title":"SQL Server 2012\u2019s RetrievedFromCache Attribute - Joe Sack","og_description":"SQL Server 2012 includes a new RetrievedFromCache attribute in the query execution plan. Let\u2019s say I execute the following query immediately after executing DBCC FREEPROCCACHE: SELECT\u00a0\u00a0\u00a0\u00a0 p.ProductLine, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SUM(f.SalesAmount) AS TotalSalesAmount FROM &#x5B;dbo].&#x5B;FactInternetSales] AS f INNER JOIN &#x5B;dbo].&#x5B;DimProduct] AS p ON \u00a0\u00a0\u00a0\u00a0 f.ProductKey = p.ProductKey GROUP BY p.ProductLine ORDER BY p.ProductLine; What value for RetrievedFromCache [&hellip;]","og_url":"https:\/\/www.sqlskills.com\/blogs\/joe\/sql-server-2012s-retrievedfromcache-attribute\/","og_site_name":"Joe Sack","article_published_time":"2012-07-31T06:29:42+00:00","article_modified_time":"2013-02-07T23:42:26+00:00","author":"Joseph Sack","twitter_misc":{"Written by":"Joseph Sack","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/sql-server-2012s-retrievedfromcache-attribute\/","url":"https:\/\/www.sqlskills.com\/blogs\/joe\/sql-server-2012s-retrievedfromcache-attribute\/","name":"SQL Server 2012\u2019s RetrievedFromCache Attribute - Joe Sack","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#website"},"datePublished":"2012-07-31T06:29:42+00:00","dateModified":"2013-02-07T23:42:26+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/533eb0113a15fb5a6e8067a49e4ae648"},"breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/sql-server-2012s-retrievedfromcache-attribute\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/joe\/sql-server-2012s-retrievedfromcache-attribute\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/sql-server-2012s-retrievedfromcache-attribute\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlskills.com\/blogs\/joe\/"},{"@type":"ListItem","position":2,"name":"Execution Plan","item":"https:\/\/www.sqlskills.com\/blogs\/joe\/category\/execution-plan\/"},{"@type":"ListItem","position":3,"name":"SQL Server 2012\u2019s RetrievedFromCache Attribute"}]},{"@type":"WebSite","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#website","url":"https:\/\/www.sqlskills.com\/blogs\/joe\/","name":"Joe Sack","description":"SQL Server Performance Tuning, High Availability and Disaster Recovery Blog","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sqlskills.com\/blogs\/joe\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/533eb0113a15fb5a6e8067a49e4ae648","name":"Joseph Sack","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/a4b39a7719a6bfff1add3ec00527810734579ee114d6d983e8e68f937b77be96?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a4b39a7719a6bfff1add3ec00527810734579ee114d6d983e8e68f937b77be96?s=96&d=mm&r=g","caption":"Joseph Sack"},"description":"Joe Sack is a Principal Consultant with SQLskills. He has worked as a SQL Server professional since 1997 and has supported and developed for SQL Server environments in financial services, IT consulting, manufacturing, retail and the real estate industry. Prior to joining SQLskills he worked at Microsoft as a Premier Field Engineer supporting very large enterprise customer environments. He was responsible for providing deep SQL Server advisory services, training, troubleshooting and ongoing solutions guidance. His areas of expertise include performance tuning, scalability, T-SQL development and high-availability. In 2006 Joe earned the \u201cMicrosoft Certified Master: SQL Server 2005\u201d certification and in 2008 he earned the \u201cMicrosoft Certified Master: SQL Server 2008\u201d certification. In 2009 he took over responsibility for the entire SQL Server Microsoft Certified Master program and held that post until 2011. He was given the SQL Server MVP award in 2013.","sameAs":["http:\/\/3.209.169.194\/blogs\/joe","https:\/\/twitter.com\/https:\/\/twitter.com\/josephsack"],"url":"https:\/\/www.sqlskills.com\/blogs\/joe\/author\/joe\/"}]}},"_links":{"self":[{"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/posts\/485","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/comments?post=485"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/posts\/485\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/media?parent=485"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/categories?post=485"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/tags?post=485"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}