{"id":899,"date":"2024-12-17T08:00:00","date_gmt":"2024-12-17T13:00:00","guid":{"rendered":"https:\/\/www.sqltabletalk.com\/?p=899"},"modified":"2024-12-13T15:57:33","modified_gmt":"2024-12-13T20:57:33","slug":"sql-server-2019-last-known-actual-query-plan","status":"publish","type":"post","link":"https:\/\/www.sqltabletalk.com\/?p=899","title":{"rendered":"Leveraging SQL Server 2019&#8217;s Last Known Actual Query Plan for Troubleshooting"},"content":{"rendered":"<h2>Introduction<\/h2>\n<p>Troubleshooting production performance issues is often challenging because detailed query execution data can vanish before you realize there\u2019s a problem. Many times, you end up piecing together incomplete clues from runtime statistics or the plan cache. Fortunately, <strong>SQL Server 2019<\/strong> introduced a powerful feature to address this pain point: the <strong>Last Known Actual Query Plan<\/strong>.<\/p>\n<h3>What Is the Last Known Actual Query Plan?<\/h3>\n<p><strong>SQL Server 2019<\/strong> leverages lightweight query execution statistics profiling to capture the last known actual execution plan for a query. This plan includes critical runtime details\u2014like actual rows processed for each operator\u2014without the overhead of full profiling or tracing. You can think of it as a \u201csnapshot\u201d of the most recent actual plan used by SQL Server, providing more concrete data than the typical estimated plan or the cached plan might reveal.<\/p>\n<p><strong>Why does this matter?<\/strong><\/p>\n<ul>\n<li><strong>Diagnose parameter sniffing problems<\/strong> by seeing if certain parameters result in suboptimal plan choices.<\/li>\n<li><strong>Investigate skewed joins<\/strong> to confirm if an operator processed significantly more rows than expected.<\/li>\n<li><strong>Pinpoint plan regressions<\/strong> without needing to reproduce the exact workload in a test environment.<\/li>\n<\/ul>\n<h3>Common Challenges in Query Troubleshooting<\/h3>\n<p>Before SQL Server 2019\u2019s enhancement, DBAs often used the following workarounds:<\/p>\n<ol>\n<li><strong>Retrieve the estimated plan from the plan cache.<\/strong>\n<ul>\n<li>Useful for a quick look at query structure, but lacks real runtime metrics (actual row counts, execution time).<\/li>\n<\/ul>\n<\/li>\n<li><strong>Analyze Query Store data.<\/strong>\n<ul>\n<li>Valuable for trends but aggregates runtime statistics over an interval (often one hour by default), making it harder to pinpoint sudden dips in performance.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Attempt to reproduce the issue.<\/strong>\n<ul>\n<li>Can be impractical. Test environments rarely mirror production workloads, and finding the right parameters to replicate a performance problem is time-consuming.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Force recompiles or update statistics.<\/strong>\n<ul>\n<li>Might temporarily fix the issue but doesn\u2019t shed light on why the problem happened in the first place.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3>How SQL Server 2019 Simplifies Troubleshooting<\/h3>\n<p>With the <strong>Last Known Actual Query Plan<\/strong> feature, you can directly examine runtime metrics of the most recent query execution. This means:<\/p>\n<ul>\n<li>You <strong>no longer rely solely on estimated plans<\/strong> or aggregated Query Store data.<\/li>\n<li><strong>Operators, row counts, memory usage,<\/strong> and other actual runtime metrics are readily available.<\/li>\n<li>You can <strong>avoid re-executing<\/strong> problematic queries in production just to gather data.<\/li>\n<\/ul>\n<h3>How to Use the Feature<\/h3>\n<h4>1. Enable Last Known Actual Query Plan<\/h4>\n<p>Enable the feature at the database level:<\/p>\n<pre><code>ALTER DATABASE SCOPED CONFIGURATION \nSET LAST_QUERY_PLAN_STATS = ON;<\/code><\/pre>\n<p>SQL Server then begins collecting the most recent actual plan data. This collection is lightweight, so the performance overhead is minimal compared to traditional tracing or extended events.<\/p>\n<h4>2. Retrieve the Last Known Actual Query Plan<\/h4>\n<p>Use dynamic management objects to query the stored plan data. For example:<\/p>\n<pre><code>SELECT qps.query_plan,\n       qs.execution_count,\n       qs.total_elapsed_time\nFROM sys.dm_exec_query_stats qs\nCROSS APPLY sys.dm_exec_query_plan_stats(qs.plan_handle) qps\nWHERE qs.query_hash = HASHBYTES('SHA2_256', '');<\/code><\/pre>\n<ul>\n<li><code>sys.dm_exec_query_plan_stats(qs.plan_handle)<\/code> is the key function exposing the last known actual query plan.<\/li>\n<li>Filter on <code>query_hash<\/code> or <code>sql_handle<\/code> to find the specific query you\u2019re investigating.<\/li>\n<\/ul>\n<h4>3. Integrate with Query Store<\/h4>\n<p><strong>Query Store<\/strong> in SQL Server 2019 also taps into this functionality. You can cross-reference the <strong>Query Store<\/strong> runtime statistics and the last known actual plan for deeper insight into query performance trends:<\/p>\n<pre><code>WITH hist AS (\n    SELECT q.query_id,\n           q.query_hash,\n           MAX(rs.max_duration) AS MaxDuration\n    FROM sys.query_store_query q\n         INNER JOIN sys.query_store_plan p ON q.query_id = p.query_id\n         INNER JOIN sys.query_store_runtime_stats rs ON p.plan_id = rs.plan_id\n         INNER JOIN sys.query_store_runtime_stats_interval rsi ON rs.runtime_stats_interval_id = rsi.runtime_stats_interval_id\n    WHERE start_time &lt; DATEADD(HOUR, -1, GETDATE())\n    GROUP BY q.query_id, q.query_hash\n),\nrecent AS (\n    SELECT q.query_id,\n           q.query_hash,\n           MAX(rs.max_duration) AS MaxDuration\n    FROM sys.query_store_query q\n         INNER JOIN sys.query_store_plan p ON q.query_id = p.query_id\n         INNER JOIN sys.query_store_runtime_stats rs ON p.plan_id = rs.plan_id\n         INNER JOIN sys.query_store_runtime_stats_interval rsi ON rs.runtime_stats_interval_id = rsi.runtime_stats_interval_id\n    WHERE start_time &gt; DATEADD(HOUR, -1, GETDATE())\n    GROUP BY q.query_id, q.query_hash\n),\nregressed_queries AS (\n    SELECT hist.query_id,\n           hist.query_hash\n    FROM hist\n    INNER JOIN recent ON hist.query_id = recent.query_id\n    WHERE recent.MaxDuration &gt; 1.2 * hist.MaxDuration\n)\nSELECT st.text,\n       OBJECT_NAME(st.objectid) AS ObjectName,\n       qs.last_execution_time,\n       qps.query_plan\nFROM sys.dm_exec_query_stats qs\nCROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st\nOUTER APPLY sys.dm_exec_query_plan_stats(qs.plan_handle) qps\nWHERE query_hash IN (SELECT query_hash FROM regressed_queries);<\/code><\/pre>\n<p>This sample identifies queries that have regressed in the last hour (recent runtime is more than 20% higher than historical), then retrieves their last known actual query plans.<\/p>\n<h3>Real-World Scenarios Where This Helps<\/h3>\n<ul>\n<li><strong>Parameter Sniffing:<\/strong> Quickly confirm if certain parameters led to unexpectedly large row counts or a poor join strategy.<\/li>\n<li><strong>Operator Missteps:<\/strong> Identify if a <code>Nested Loops<\/code> operator actually processed millions of rows instead of the estimated thousands, pointing to a suboptimal plan choice.<\/li>\n<li><strong>Production Performance Dips:<\/strong> See exactly how a query was running most recently, instead of waiting and hoping the performance issue reoccurs.<\/li>\n<\/ul>\n<h3>Best Practices<\/h3>\n<ol>\n<li><strong>Combine with Query Store:<\/strong>\n<ul>\n<li>Use Query Store to track performance trends and the Last Known Actual Query Plan for real-time insights into problematic queries.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Test with DBCC CLONEDATABASE (Optional):<\/strong>\n<ul>\n<li>If you need to replicate production issues, use a cloned copy of your database with schema and statistics. This approach ensures minimal risk to the live environment.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Monitor Overhead:<\/strong>\n<ul>\n<li>The feature is designed to be lightweight, but always monitor system performance after enabling any new diagnostic tool.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Regular Baselines:<\/strong>\n<ul>\n<li>Baseline query performance using the combination of Query Store and Last Known Actual Query Plan. This makes deviations more obvious.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3>Conclusion<\/h3>\n<p>SQL Server 2019\u2019s <strong>Last Known Actual Query Plan<\/strong> is a significant leap forward in query troubleshooting. By capturing real execution details with minimal overhead, it allows DBAs and developers to diagnose issues more accurately and quickly. Whether you\u2019re dealing with parameter sniffing or unexpected plan regressions, this feature provides an immediate view into what actually happened\u2014no guesswork required.<\/p>\n<p>If you\u2019re using SQL Server 2019 or considering an upgrade, enable this feature to streamline your performance investigations. It\u2019s a powerful addition to your toolbox that lets you <strong>stop guessing and start fixing<\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Troubleshooting production performance issues is often challenging because detailed query execution data can vanish before you realize there\u2019s a problem. Many times, you end up piecing together incomplete clues from runtime statistics or the plan cache. Fortunately, SQL Server 2019 introduced a powerful feature to address this pain point: the Last Known Actual Query Plan.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[12,5,91,400,73],"tags":[421,269,422,43,322,131],"class_list":["post-899","post","type-post","status-publish","format-standard","hentry","category-internals","category-performance","category-query-optimization","category-query-store","category-troubleshooting","tag-actual-query-plan","tag-parameter-sniffing","tag-query-execution-plans","tag-query-performance","tag-query-store","tag-sql-server"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Leveraging SQL Server 2019&#039;s Last Known Actual Query Plan for Troubleshooting - SQL Table Talk<\/title>\n<meta name=\"description\" content=\"Troubleshooting production performance issues is often challenging because detailed query execution data can vanish before you realize there\u2019s a problem. Many times, you end up piecing together incomplete clues from runtime statistics or the plan cache. Fortunately, SQL Server 2019 introduced a powerful feature to address this pain point: the Last Known Actual Query Plan.\" \/>\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.sqltabletalk.com\/?p=899\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Leveraging SQL Server 2019&#039;s Last Known Actual Query Plan for Troubleshooting - SQL Table Talk\" \/>\n<meta property=\"og:description\" content=\"Troubleshooting production performance issues is often challenging because detailed query execution data can vanish before you realize there\u2019s a problem. Many times, you end up piecing together incomplete clues from runtime statistics or the plan cache. Fortunately, SQL Server 2019 introduced a powerful feature to address this pain point: the Last Known Actual Query Plan.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqltabletalk.com\/?p=899\" \/>\n<meta property=\"og:site_name\" content=\"SQL Table Talk\" \/>\n<meta property=\"article:published_time\" content=\"2024-12-17T13:00:00+00:00\" \/>\n<meta name=\"author\" content=\"Yvonne Vanslageren\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Yvonne Vanslageren\" \/>\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.sqltabletalk.com\/?p=899#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/?p=899\"},\"author\":{\"name\":\"Yvonne Vanslageren\",\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/68bb31b454bafe9e139183ed4f3e9082\"},\"headline\":\"Leveraging SQL Server 2019&#8217;s Last Known Actual Query Plan for Troubleshooting\",\"datePublished\":\"2024-12-17T13:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/?p=899\"},\"wordCount\":789,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0\"},\"keywords\":[\"Actual Query Plan\",\"parameter sniffing\",\"Query Execution Plans\",\"query performance\",\"Query Store\",\"SQL Server\"],\"articleSection\":[\"Internals\",\"Performance\",\"Query Optimization\",\"Query Store\",\"Troubleshooting\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.sqltabletalk.com\/?p=899#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.sqltabletalk.com\/?p=899\",\"url\":\"https:\/\/www.sqltabletalk.com\/?p=899\",\"name\":\"Leveraging SQL Server 2019's Last Known Actual Query Plan for Troubleshooting - SQL Table Talk\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/#website\"},\"datePublished\":\"2024-12-17T13:00:00+00:00\",\"description\":\"Troubleshooting production performance issues is often challenging because detailed query execution data can vanish before you realize there\u2019s a problem. Many times, you end up piecing together incomplete clues from runtime statistics or the plan cache. Fortunately, SQL Server 2019 introduced a powerful feature to address this pain point: the Last Known Actual Query Plan.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/?p=899#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sqltabletalk.com\/?p=899\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sqltabletalk.com\/?p=899#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sqltabletalk.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Leveraging SQL Server 2019&#8217;s Last Known Actual Query Plan for Troubleshooting\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.sqltabletalk.com\/#website\",\"url\":\"https:\/\/www.sqltabletalk.com\/\",\"name\":\"SQL Table Talk\",\"description\":\"Breaking Down SQL Server, One Post at a Time.\",\"publisher\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.sqltabletalk.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0\",\"name\":\"Stephen Planck\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/64181114edc3de3d99072c049bcec024f025c9536dc89fc8ff1bac58976ca81e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/64181114edc3de3d99072c049bcec024f025c9536dc89fc8ff1bac58976ca81e?s=96&d=mm&r=g\",\"caption\":\"Stephen Planck\"},\"logo\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/dexterwiki.com\",\"https:\/\/www.linkedin.com\/in\/stephen-planck-4611b692?trk=people-guest_people_search-card&challengeId=AQErf8gbBmcVMwAAAYsyIsxO-0UvU8z7cHrBpZoo_n3xt9qEKpRN5B_jd_LmAMu-OfeArkQ7GDjobJ2uRoQQV35EQdh_rR6kxA&submissionId=09de7067-c335-8e17-40b8-8dc32b60ed6c&challengeSource=AgEcUCw35zpPmAAAAYsyI4vAWhJTV7Nt4vZYKc3V1qiDBpCkKgUvtlOBgYXcE84&challegeType=AgE_wZiTT09IAQAAAYsyI4vDmNvbZIYe6XHju5V2bXVvM3IVxnJslgY&memberId=AgESFTkUShzs_gAAAYsyI4vGYk0Gic1uc5kB6cKOABA26Gw&recognizeDevice=AgHdSZyUSI5CEwAAAYsyI4vKd_koF9JgpsCJShT8QfbK1QMiv8SI\",\"https:\/\/www.youtube.com\/linuxmate\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/68bb31b454bafe9e139183ed4f3e9082\",\"name\":\"Yvonne Vanslageren\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/22c274a7a354b81a0a8dc5b23e8e0be9bdd81a6bc0541474cfb6b954d6bb2089?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/22c274a7a354b81a0a8dc5b23e8e0be9bdd81a6bc0541474cfb6b954d6bb2089?s=96&d=mm&r=g\",\"caption\":\"Yvonne Vanslageren\"},\"url\":\"https:\/\/www.sqltabletalk.com\/?author=2\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Leveraging SQL Server 2019's Last Known Actual Query Plan for Troubleshooting - SQL Table Talk","description":"Troubleshooting production performance issues is often challenging because detailed query execution data can vanish before you realize there\u2019s a problem. Many times, you end up piecing together incomplete clues from runtime statistics or the plan cache. Fortunately, SQL Server 2019 introduced a powerful feature to address this pain point: the Last Known Actual Query Plan.","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.sqltabletalk.com\/?p=899","og_locale":"en_US","og_type":"article","og_title":"Leveraging SQL Server 2019's Last Known Actual Query Plan for Troubleshooting - SQL Table Talk","og_description":"Troubleshooting production performance issues is often challenging because detailed query execution data can vanish before you realize there\u2019s a problem. Many times, you end up piecing together incomplete clues from runtime statistics or the plan cache. Fortunately, SQL Server 2019 introduced a powerful feature to address this pain point: the Last Known Actual Query Plan.","og_url":"https:\/\/www.sqltabletalk.com\/?p=899","og_site_name":"SQL Table Talk","article_published_time":"2024-12-17T13:00:00+00:00","author":"Yvonne Vanslageren","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Yvonne Vanslageren","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.sqltabletalk.com\/?p=899#article","isPartOf":{"@id":"https:\/\/www.sqltabletalk.com\/?p=899"},"author":{"name":"Yvonne Vanslageren","@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/68bb31b454bafe9e139183ed4f3e9082"},"headline":"Leveraging SQL Server 2019&#8217;s Last Known Actual Query Plan for Troubleshooting","datePublished":"2024-12-17T13:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.sqltabletalk.com\/?p=899"},"wordCount":789,"commentCount":0,"publisher":{"@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0"},"keywords":["Actual Query Plan","parameter sniffing","Query Execution Plans","query performance","Query Store","SQL Server"],"articleSection":["Internals","Performance","Query Optimization","Query Store","Troubleshooting"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.sqltabletalk.com\/?p=899#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.sqltabletalk.com\/?p=899","url":"https:\/\/www.sqltabletalk.com\/?p=899","name":"Leveraging SQL Server 2019's Last Known Actual Query Plan for Troubleshooting - SQL Table Talk","isPartOf":{"@id":"https:\/\/www.sqltabletalk.com\/#website"},"datePublished":"2024-12-17T13:00:00+00:00","description":"Troubleshooting production performance issues is often challenging because detailed query execution data can vanish before you realize there\u2019s a problem. Many times, you end up piecing together incomplete clues from runtime statistics or the plan cache. Fortunately, SQL Server 2019 introduced a powerful feature to address this pain point: the Last Known Actual Query Plan.","breadcrumb":{"@id":"https:\/\/www.sqltabletalk.com\/?p=899#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqltabletalk.com\/?p=899"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqltabletalk.com\/?p=899#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqltabletalk.com\/"},{"@type":"ListItem","position":2,"name":"Leveraging SQL Server 2019&#8217;s Last Known Actual Query Plan for Troubleshooting"}]},{"@type":"WebSite","@id":"https:\/\/www.sqltabletalk.com\/#website","url":"https:\/\/www.sqltabletalk.com\/","name":"SQL Table Talk","description":"Breaking Down SQL Server, One Post at a Time.","publisher":{"@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sqltabletalk.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0","name":"Stephen Planck","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/64181114edc3de3d99072c049bcec024f025c9536dc89fc8ff1bac58976ca81e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/64181114edc3de3d99072c049bcec024f025c9536dc89fc8ff1bac58976ca81e?s=96&d=mm&r=g","caption":"Stephen Planck"},"logo":{"@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/dexterwiki.com","https:\/\/www.linkedin.com\/in\/stephen-planck-4611b692?trk=people-guest_people_search-card&challengeId=AQErf8gbBmcVMwAAAYsyIsxO-0UvU8z7cHrBpZoo_n3xt9qEKpRN5B_jd_LmAMu-OfeArkQ7GDjobJ2uRoQQV35EQdh_rR6kxA&submissionId=09de7067-c335-8e17-40b8-8dc32b60ed6c&challengeSource=AgEcUCw35zpPmAAAAYsyI4vAWhJTV7Nt4vZYKc3V1qiDBpCkKgUvtlOBgYXcE84&challegeType=AgE_wZiTT09IAQAAAYsyI4vDmNvbZIYe6XHju5V2bXVvM3IVxnJslgY&memberId=AgESFTkUShzs_gAAAYsyI4vGYk0Gic1uc5kB6cKOABA26Gw&recognizeDevice=AgHdSZyUSI5CEwAAAYsyI4vKd_koF9JgpsCJShT8QfbK1QMiv8SI","https:\/\/www.youtube.com\/linuxmate"]},{"@type":"Person","@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/68bb31b454bafe9e139183ed4f3e9082","name":"Yvonne Vanslageren","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/22c274a7a354b81a0a8dc5b23e8e0be9bdd81a6bc0541474cfb6b954d6bb2089?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/22c274a7a354b81a0a8dc5b23e8e0be9bdd81a6bc0541474cfb6b954d6bb2089?s=96&d=mm&r=g","caption":"Yvonne Vanslageren"},"url":"https:\/\/www.sqltabletalk.com\/?author=2"}]}},"jetpack_featured_media_url":"","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=\/wp\/v2\/posts\/899","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=899"}],"version-history":[{"count":2,"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=\/wp\/v2\/posts\/899\/revisions"}],"predecessor-version":[{"id":923,"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=\/wp\/v2\/posts\/899\/revisions\/923"}],"wp:attachment":[{"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=899"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=899"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=899"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}