{"id":20816,"date":"2017-09-28T10:00:33","date_gmt":"2017-09-28T17:00:33","guid":{"rendered":"https:\/\/blogs.technet.microsoft.com\/dataplatforminsider\/?p=20816"},"modified":"2024-01-22T22:51:03","modified_gmt":"2024-01-23T06:51:03","slug":"enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017","status":"publish","type":"post","link":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/","title":{"rendered":"Enhancing query performance with Adaptive Query Processing in SQL Server 2017"},"content":{"rendered":"<p><em>This post was authored by Joe Sack, Principal Program Manager, Data Systems Group, Microsoft<\/em><\/p>\n<p>SQL Server 2017 and Azure SQL Database introduce a new generation of query processing improvements that will adapt optimization strategies to your application workload\u2019s runtime conditions. For this first version of this <a target=\"_blank\" href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/relational-databases\/performance\/adaptive-query-processing\" rel=\"noopener\">adaptive query processing<\/a> feature family, we have three new improvements: <a target=\"_blank\" href=\"https:\/\/blogs.msdn.microsoft.com\/sqlserverstorageengine\/2017\/04\/19\/introducing-batch-mode-adaptive-joins\/\" rel=\"noopener\">batch mode adaptive joins<\/a>, <a target=\"_blank\" href=\"https:\/\/blogs.msdn.microsoft.com\/sqlserverstorageengine\/2016\/11\/29\/introducing-batch-mode-adaptive-memory-grant-feedback\/\" rel=\"noopener\">batch mode memory grant feedback<\/a>, and<a href=\"https:\/\/blogs.msdn.microsoft.com\/sqlserverstorageengine\/2017\/04\/19\/introducing-interleaved-execution-for-multi-statement-table-valued-functions\/\"> interleaved execution for multi-statement table<\/a> valued functions.<\/p>\n<p><a href=\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2017\/09\/aqp-500x199.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-mediumlarge wp-image-20825\" src=\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2017\/09\/aqp-500x199.png\" srcset=\"\" alt=\"\" width=\"500\" height=\"199\" \/><\/a><\/p>\n<h2>Legacy optimization behavior<\/h2>\n<p>During optimization, the cardinality estimation process is responsible for estimating the number of rows processed at each step in an execution plan. Cardinality estimation uses a combination of statistical techniques and assumptions and when estimates are accurate (enough), we make informed decisions around\u00a0the\u00a0order of operations and physical algorithm selection.<\/p>\n<p>When estimates are <em>inaccurate<\/em>, the query optimizer may make poor decisions regarding algorithm selection and order of operations. The cost of incorrect estimates can result in:<\/p>\n<ul>\n<li>Slow query response time due to inefficient plans<\/li>\n<li>Excessive resource utilization (CPU, Memory, IO)<\/li>\n<li>Spills to disk due to insufficient memory grant requests<\/li>\n<li>Reduced throughput and concurrency due to excessive memory grant sizes<\/li>\n<\/ul>\n<p>There are several reasons why incorrect cardinality estimates occur, from missing or stale statistics to inadequate statistics sample rates, bad parameter sniffing scenarios or cases where SQL Server does not have visibility to cardinality estimates and must make fixed-estimate guesses (e.g. multi-statement table valued functions, table variables, XQuery references).<\/p>\n<p>Prior to SQL Server 2017, if we make poor assumptions due to bad cardinality estimates, we do not change our query plan execution strategy during execution.<\/p>\n<h2>Adapting to your workloads<\/h2>\n<p>The new adaptive query processing feature family in SQL Server 2017 and Azure SQL Database introduces three new techniques for adapting to your application workload characteristics.<\/p>\n<h3>Batch Mode Adaptive Joins<\/h3>\n<p>The query optimizer has three physical operator options for processing a join operation: nested loop, merge, and hash match. Which algorithm is appropriate or necessary, is highly dependent on the cardinality estimates of the join inputs. If we have inaccurate input cardinality estimates, this can result in the selection of an inappropriate join algorithm.<\/p>\n<p>The new <strong>batch mode adaptive join<\/strong> feature enables the choice of a hash join or nested loop join method to be deferred until <em>after<\/em> the first input has been scanned. The adaptive join operator defines a threshold that is used to decide when to switch to a nested loop plan. Your plan can then dynamically switch to a better join strategy during execution using a single cached plan.<\/p>\n<p><a href=\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2017\/09\/batch-mode-adaptive-join.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-20826\" src=\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2017\/09\/batch-mode-adaptive-join.png\" srcset=\"\" alt=\"\" width=\"342\" height=\"255\" \/><\/a><\/p>\n<h3>Batch Mode Memory Grant Feedback<\/h3>\n<p>A query\u2019s execution plan in SQL Server includes the minimum required memory needed for execution and the ideal memory grant size to have all rows fit in memory. When memory grant sizes are inadequate or excessive, performance suffers. Excessive grants result in wasted memory and reduced concurrency. Insufficient memory grants cause expensive spills to disk.<\/p>\n<p>Addressing repeating workloads, batch mode memory grant feedback recalculates the actual memory required for a query and then updates the grant value for the cached plan. When an identical query statement is executed, the query uses the revised memory grant size, reducing excessive memory grants that impact concurrency and fixing underestimated memory grants that cause expensive spills to disk.<\/p>\n<p>Inadequate grant scenario:<\/p>\n<p><a href=\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2017\/09\/InadequateGrantScenario-500x174.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-mediumlarge wp-image-20865\" src=\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2017\/09\/InadequateGrantScenario-500x174.png\" srcset=\"\" alt=\"\" width=\"500\" height=\"174\" \/><\/a><\/p>\n<p>Excessive grant scenario:<\/p>\n<p><a href=\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2017\/09\/excessive-scenario-500x169.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-mediumlarge wp-image-20837\" src=\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2017\/09\/excessive-scenario-500x169.png\" srcset=\"\" alt=\"\" width=\"500\" height=\"169\" \/><\/a><\/p>\n<h3>Interleaved execution for multi-statement table valued functions<\/h3>\n<p>Interleaved execution for multi-statement table valued functions (MSTVFs) changes the unidirectional boundary between the optimization and execution phases for a single-query execution and enables plans to adapt based on the revised cardinality estimates. During optimization, if we encounter a candidate for interleaved execution, which for SQL Server 2017 is currently multi-statement table valued functions (MSTVFs), we will pause optimization, execute the applicable subtree, capture accurate cardinality estimates, and then resume optimization for downstream operations.<\/p>\n<p>MSTVFs have a fixed cardinality guess of \u201c100\u201d in SQL Server 2014 and SQL Server 2016, and an estimate of \u201c1\u201d for earlier versions.<\/p>\n<p><a href=\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2017\/09\/pre-2017.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-20845\" src=\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2017\/09\/pre-2017.png\" srcset=\"\" alt=\"\" width=\"256\" height=\"192\" \/><\/a><\/p>\n<p>Interleaved execution helps workload performance issues that are due to these fixed cardinality estimates associated with multi-statement table valued functions. With interleaved execution, we will use the actual row counts from the MSTVF to make plan optimizations downstream from the MSTVF references. The result is a better-informed plan based on actual workload characteristics.<\/p>\n<p><a href=\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2017\/09\/2017-500x191.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-20846\" src=\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2017\/09\/2017-500x191.png\" srcset=\"\" alt=\"\" width=\"440\" height=\"168\" \/><\/a><\/p>\n<h3>Enabling adaptive query processing<\/h3>\n<p>Adaptive query processing is enabled in SQL Server 2017 and Azure SQL Database under compatibility level 140. To learn more about this compatibility level, see <a target=\"_blank\" href=\"https:\/\/blogs.msdn.microsoft.com\/sqlserverstorageengine\/2017\/07\/07\/public-preview-of-compatibility-level-140-for-azure-sql-database\/\" rel=\"noopener\">Public Preview of Compatibility Level 140 for Azure SQL Database<\/a>.<\/p>\n<h3>Learning more about adaptive query processing<\/h3>\n<p>For a comprehensive overview of all three features, see the Books Online topic <a target=\"_blank\" href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/relational-databases\/performance\/adaptive-query-processing#interleaved-execution-for-multi-statement-table-valued-functions\" rel=\"noopener\">Adaptive query processing in SQL databases<\/a>.<\/p>\n<h2>Just getting started<\/h2>\n<p>We have several other opportunities in the query processing space to further add and enhance workload-adaptation mechanisms and strategies. Continued investment in the adaptive query processing feature family will help support and meet the requirements of a wide range of workload characteristics, from high-throughput transaction processing workloads to petabyte-scale relational data warehousing databases. Have feedback related to the query processor or other areas in SQL Server? If so, please submit feedback via the <a target=\"_blank\" href=\"https:\/\/connect.microsoft.com\/sql\/feedback\" rel=\"noopener\">Microsoft Connect<\/a> website.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This post was authored by Joe Sack, Principal Program Manager, Data Systems Group, Microsoft SQL Server 2017 and Azure SQL Database introduce a new generation of query processing improvements that will adapt optimization strategies to your application workload\u2019s runtime conditions.<\/p>\n","protected":false},"author":1457,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ep_exclude_from_search":false,"_classifai_error":"","_classifai_text_to_speech_error":"","footnotes":""},"post_tag":[],"product":[5226,2391,5227,2406],"content-type":[2424],"topic":[2469],"coauthors":[2487],"class_list":["post-20816","post","type-post","status-publish","format-standard","hentry","product-azure","product-azure-sql-database","product-sql","product-sql-server-2017","content-type-best-practices","topic-high-performance-database","review-flag-1-1593580431-15","review-flag-new-1593580247-437","review-flag-publi-1593580761-761"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Enhancing query performance with Adaptive Query Processing in SQL Server 2017 - Microsoft SQL Server Blog<\/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.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Enhancing query performance with Adaptive Query Processing in SQL Server 2017 - Microsoft SQL Server Blog\" \/>\n<meta property=\"og:description\" content=\"This post was authored by Joe Sack, Principal Program Manager, Data Systems Group, Microsoft SQL Server 2017 and Azure SQL Database introduce a new generation of query processing improvements that will adapt optimization strategies to your application workload\u2019s runtime conditions.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft SQL Server Blog\" \/>\n<meta property=\"article:publisher\" content=\"http:\/\/www.facebook.com\/sqlserver\" \/>\n<meta property=\"article:published_time\" content=\"2017-09-28T17:00:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-23T06:51:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2017\/09\/aqp-500x199.png\" \/>\n<meta name=\"author\" content=\"SQL Server Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@SQLServer\" \/>\n<meta name=\"twitter:site\" content=\"@SQLServer\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"SQL Server Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 min read\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/\"},\"author\":[{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/author\/sql-server-team\/\",\"@type\":\"Person\",\"@name\":\"SQL Server Team\"}],\"headline\":\"Enhancing query performance with Adaptive Query Processing in SQL Server 2017\",\"datePublished\":\"2017-09-28T17:00:33+00:00\",\"dateModified\":\"2024-01-23T06:51:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/\"},\"wordCount\":845,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2017\/09\/aqp-500x199.png\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/\",\"name\":\"Enhancing query performance with Adaptive Query Processing in SQL Server 2017 - Microsoft SQL Server Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2017\/09\/aqp-500x199.png\",\"datePublished\":\"2017-09-28T17:00:33+00:00\",\"dateModified\":\"2024-01-23T06:51:03+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/#primaryimage\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2017\/09\/aqp-500x199.png\",\"contentUrl\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2017\/09\/aqp-500x199.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Enhancing query performance with Adaptive Query Processing in SQL Server 2017\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/#website\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/\",\"name\":\"Microsoft SQL Server Blog\",\"description\":\"Official News from Microsoft\u2019s Information Platform\",\"publisher\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/#organization\",\"name\":\"Microsoft SQL Server Blog\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png\",\"contentUrl\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png\",\"width\":259,\"height\":194,\"caption\":\"Microsoft SQL Server Blog\"},\"image\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"http:\/\/www.facebook.com\/sqlserver\",\"https:\/\/x.com\/SQLServer\",\"https:\/\/www.youtube.com\/user\/MSCloudOS\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Enhancing query performance with Adaptive Query Processing in SQL Server 2017 - Microsoft SQL Server Blog","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.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/","og_locale":"en_US","og_type":"article","og_title":"Enhancing query performance with Adaptive Query Processing in SQL Server 2017 - Microsoft SQL Server Blog","og_description":"This post was authored by Joe Sack, Principal Program Manager, Data Systems Group, Microsoft SQL Server 2017 and Azure SQL Database introduce a new generation of query processing improvements that will adapt optimization strategies to your application workload\u2019s runtime conditions.","og_url":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/","og_site_name":"Microsoft SQL Server Blog","article_publisher":"http:\/\/www.facebook.com\/sqlserver","article_published_time":"2017-09-28T17:00:33+00:00","article_modified_time":"2024-01-23T06:51:03+00:00","og_image":[{"url":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2017\/09\/aqp-500x199.png","type":"","width":"","height":""}],"author":"SQL Server Team","twitter_card":"summary_large_image","twitter_creator":"@SQLServer","twitter_site":"@SQLServer","twitter_misc":{"Written by":"SQL Server Team","Est. reading time":"3 min read"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/#article","isPartOf":{"@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/"},"author":[{"@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/author\/sql-server-team\/","@type":"Person","@name":"SQL Server Team"}],"headline":"Enhancing query performance with Adaptive Query Processing in SQL Server 2017","datePublished":"2017-09-28T17:00:33+00:00","dateModified":"2024-01-23T06:51:03+00:00","mainEntityOfPage":{"@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/"},"wordCount":845,"commentCount":0,"publisher":{"@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/#organization"},"image":{"@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/#primaryimage"},"thumbnailUrl":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2017\/09\/aqp-500x199.png","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/","url":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/","name":"Enhancing query performance with Adaptive Query Processing in SQL Server 2017 - Microsoft SQL Server Blog","isPartOf":{"@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/#primaryimage"},"image":{"@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/#primaryimage"},"thumbnailUrl":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2017\/09\/aqp-500x199.png","datePublished":"2017-09-28T17:00:33+00:00","dateModified":"2024-01-23T06:51:03+00:00","breadcrumb":{"@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/#primaryimage","url":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2017\/09\/aqp-500x199.png","contentUrl":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2017\/09\/aqp-500x199.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2017\/09\/28\/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/"},{"@type":"ListItem","position":2,"name":"Enhancing query performance with Adaptive Query Processing in SQL Server 2017"}]},{"@type":"WebSite","@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/#website","url":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/","name":"Microsoft SQL Server Blog","description":"Official News from Microsoft\u2019s Information Platform","publisher":{"@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/#organization","name":"Microsoft SQL Server Blog","url":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png","contentUrl":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png","width":259,"height":194,"caption":"Microsoft SQL Server Blog"},"image":{"@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/#\/schema\/logo\/image\/"},"sameAs":["http:\/\/www.facebook.com\/sqlserver","https:\/\/x.com\/SQLServer","https:\/\/www.youtube.com\/user\/MSCloudOS"]}]}},"msxcm_display_generated_audio":false,"msxcm_animated_featured_image":null,"_links":{"self":[{"href":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-json\/wp\/v2\/posts\/20816","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-json\/wp\/v2\/users\/1457"}],"replies":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-json\/wp\/v2\/comments?post=20816"}],"version-history":[{"count":0,"href":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-json\/wp\/v2\/posts\/20816\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-json\/wp\/v2\/media?parent=20816"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-json\/wp\/v2\/post_tag?post=20816"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-json\/wp\/v2\/product?post=20816"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-json\/wp\/v2\/content-type?post=20816"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-json\/wp\/v2\/topic?post=20816"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-json\/wp\/v2\/coauthors?post=20816"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}