{"id":529,"date":"2011-04-07T03:10:41","date_gmt":"2011-04-07T03:10:41","guid":{"rendered":"\/blogs\/jonathan\/post\/What-plan_handle-is-Extended-Events-sqlserverplan_handle-action-returning.aspx"},"modified":"2017-04-13T14:41:48","modified_gmt":"2017-04-13T18:41:48","slug":"what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\/","title":{"rendered":"What plan_handle is Extended Events sqlserver.plan_handle action returning?"},"content":{"rendered":"<p><font size=\"2\">The topic for today&#8217;s post comes from a <\/font><a href=\"https:\/\/social.msdn.microsoft.com\/Forums\/en\/sqldatabaseengine\/thread\/cb597539-ea44-4bf3-863d-3a93f2c6d34c?prof=required&amp;prof=required\" target=\"_blank\"><font size=\"2\">forums question<\/font><\/a><font size=\"2\"> and a subsequent <\/font><a href=\"https:\/\/connect.microsoft.com\/SQLServer\/feedback\/details\/648258\/extended-events-does-not-track-insert-statements#tabs\" target=\"_blank\"><font size=\"2\">Connect feedback item<\/font><\/a><font size=\"2\"> where someone noted that the plan_handle being returned by Extended Events using the sqlserver.plan_handle action was not available in the plan cache even when queried immediately following completion of the event that should have produced the plan cache entry.&#160; To setup the appropriate context of this post, let&#8217;s first take a look at the original repro for this problem.<\/font><\/p>\n<blockquote>\n<div class=\"csharpcode\">\n<pre class=\"alt\"><span class=\"rem\"><font face=\"Courier New\">-- Create the Event Session<\/font><\/span><\/pre>\n<pre><font face=\"Courier New\"><span class=\"kwrd\">IF<\/span> <span class=\"kwrd\">EXISTS<\/span>(<span class=\"kwrd\">SELECT<\/span> * <\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">          <span class=\"kwrd\">FROM<\/span> sys.server_event_sessions <\/font><\/pre>\n<pre><font face=\"Courier New\">          <span class=\"kwrd\">WHERE<\/span> name=<span class=\"str\">'SQLStmtEvents'<\/span>)<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">    <span class=\"kwrd\">DROP<\/span> EVENT <span class=\"kwrd\">SESSION<\/span> SQLStmtEvents <\/font><\/pre>\n<pre><font face=\"Courier New\">    <span class=\"kwrd\">ON<\/span> SERVER;<\/font><\/pre>\n<pre class=\"alt\"><span class=\"kwrd\"><font face=\"Courier New\">GO<\/font><\/span><\/pre>\n<pre><font face=\"Courier New\"><span class=\"kwrd\">CREATE<\/span> EVENT <span class=\"kwrd\">SESSION<\/span> SQLStmtEvents<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\"><span class=\"kwrd\">ON<\/span> SERVER<\/font><\/pre>\n<pre><font face=\"Courier New\"><span class=\"kwrd\">ADD<\/span> EVENT sqlserver.sql_statement_completed(<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">    <span class=\"kwrd\">ACTION<\/span> (sqlserver.client_app_name,<\/font><\/pre>\n<pre><font face=\"Courier New\">            sqlserver.plan_handle,<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">            sqlserver.sql_text,<\/font><\/pre>\n<pre><font face=\"Courier New\">            sqlserver.tsql_stack,<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">            package0.callstack,<\/font><\/pre>\n<pre><font face=\"Courier New\">            sqlserver.request_id)<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">--Change this <span class=\"kwrd\">to<\/span> <span class=\"kwrd\">match<\/span> the AdventureWorks, <\/font><\/pre>\n<pre><font face=\"Courier New\">--AdventureWorks2008 <span class=\"kwrd\">or<\/span> AdventureWorks2008 DB_ID()<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\"><span class=\"kwrd\">WHERE<\/span> sqlserver.database_id=5 <\/font><\/pre>\n<pre><font face=\"Courier New\">)<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\"><span class=\"kwrd\">ADD<\/span> TARGET package0.ring_buffer<\/font><\/pre>\n<pre><font face=\"Courier New\"><span class=\"kwrd\">WITH<\/span> (MAX_DISPATCH_LATENCY=5SECONDS, TRACK_CAUSALITY=<span class=\"kwrd\">ON<\/span>)<\/font><\/pre>\n<pre class=\"alt\"><span class=\"kwrd\"><font face=\"Courier New\">GO<\/font><\/span><\/pre>\n<pre><font face=\"Courier New\">&#160;<\/font><\/pre>\n<pre class=\"alt\"><span class=\"rem\"><font face=\"Courier New\">-- Start the Event Session<\/font><\/span><\/pre>\n<pre><font face=\"Courier New\"><span class=\"kwrd\">ALTER<\/span> EVENT <span class=\"kwrd\">SESSION<\/span> SQLStmtEvents <\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\"><span class=\"kwrd\">ON<\/span> SERVER <\/font><\/pre>\n<pre><font face=\"Courier New\"><span class=\"kwrd\">STATE<\/span> = <span class=\"kwrd\">START<\/span>;<\/font><\/pre>\n<pre class=\"alt\"><span class=\"kwrd\"><font face=\"Courier New\">GO<\/font><\/span><\/pre>\n<pre><font face=\"Courier New\">&#160;<\/font><\/pre>\n<pre class=\"alt\"><span class=\"rem\"><font face=\"Courier New\">-- Change database contexts and insert one row<\/font><\/span><\/pre>\n<pre><font face=\"Courier New\"><span class=\"kwrd\">USE<\/span> AdventureWorks2008;<\/font><\/pre>\n<pre class=\"alt\"><span class=\"kwrd\"><font face=\"Courier New\">GO<\/font><\/span><\/pre>\n<pre><font face=\"Courier New\">INSERT <span class=\"kwrd\">INTO<\/span> [dbo].[ErrorLog]([ErrorTime],[UserName],[ErrorNumber],[ErrorSeverity],[ErrorState],[ErrorProcedure],[ErrorLine],[ErrorMessage])<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\"><span class=\"kwrd\">VALUES<\/span>(getdate(),<span class=\"kwrd\">SYSTEM_USER<\/span>,-1,-1,-1,<span class=\"str\">'ErrorProcedure'<\/span>,-1,<span class=\"str\">'An error occurred'<\/span>)<\/font><\/pre>\n<pre><span class=\"kwrd\"><font face=\"Courier New\">GO<\/font><\/span><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">&#160;<\/font><\/pre>\n<pre><span class=\"rem\"><font face=\"Courier New\">-- Retrieve the Event Data from the Event Session Target<\/font><\/span><\/pre>\n<pre class=\"alt\"><span class=\"kwrd\"><font face=\"Courier New\">SELECT<\/font><\/span><\/pre>\n<pre><font face=\"Courier New\">    event_data.<span class=\"kwrd\">value<\/span>(<span class=\"str\">'(event\/@name)[1]'<\/span>, <span class=\"str\">'varchar(50)'<\/span>) <span class=\"kwrd\">AS<\/span> event_name,<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">    <span class=\"kwrd\">CAST<\/span>(event_data.<span class=\"kwrd\">value<\/span>(<span class=\"str\">'(event\/action[@name=&quot;plan_handle&quot;]\/value)[1]'<\/span>, <span class=\"str\">'varchar(max)'<\/span>) <span class=\"kwrd\">AS<\/span> XML) <span class=\"kwrd\">as<\/span> plan_handle,<\/font><\/pre>\n<pre><font face=\"Courier New\">    event_data.<span class=\"kwrd\">value<\/span>(<span class=\"str\">'(event\/action[@name=&quot;sql_text&quot;]\/value)[1]'<\/span>, <span class=\"str\">'varchar(max)'<\/span>) <span class=\"kwrd\">AS<\/span> sql_text<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\"><span class=\"kwrd\">FROM<\/span>(    <span class=\"kwrd\">SELECT<\/span> evnt.query(<span class=\"str\">'.'<\/span>) <span class=\"kwrd\">AS<\/span> event_data<\/font><\/pre>\n<pre><font face=\"Courier New\">        <span class=\"kwrd\">FROM<\/span><\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">        (    <span class=\"kwrd\">SELECT<\/span> <span class=\"kwrd\">CAST<\/span>(target_data <span class=\"kwrd\">AS<\/span> xml) <span class=\"kwrd\">AS<\/span> TargetData<\/font><\/pre>\n<pre><font face=\"Courier New\">            <span class=\"kwrd\">FROM<\/span> sys.dm_xe_sessions <span class=\"kwrd\">AS<\/span> s<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">            <span class=\"kwrd\">JOIN<\/span> sys.dm_xe_session_targets <span class=\"kwrd\">AS<\/span> t<\/font><\/pre>\n<pre><font face=\"Courier New\">                <span class=\"kwrd\">ON<\/span> s.address = t.event_session_address<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">            <span class=\"kwrd\">WHERE<\/span> s.name = <span class=\"str\">'SQLStmtEvents'<\/span><\/font><\/pre>\n<pre><font face=\"Courier New\">              <span class=\"kwrd\">AND<\/span> t.target_name = <span class=\"str\">'ring_buffer'<\/span><\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">        ) <span class=\"kwrd\">AS<\/span> tab<\/font><\/pre>\n<pre><font face=\"Courier New\">        <span class=\"kwrd\">CROSS<\/span> APPLY TargetData.nodes (<span class=\"str\">'RingBufferTarget\/event'<\/span>) <span class=\"kwrd\">AS<\/span> split(evnt) <\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">     ) <span class=\"kwrd\">AS<\/span> evts(event_data)<\/font><\/pre>\n<pre><font face=\"Courier New\">     <\/font><\/pre>\n<pre class=\"alt\"><span class=\"rem\"><font face=\"Courier New\">-- Use the plan_handle from one of the Events to get the query plan<\/font><\/span><\/pre>\n<pre><font face=\"Courier New\"><span class=\"kwrd\">DECLARE<\/span> @plan_handle varbinary(64) = 0x06000800DD8D6D0840015585000000000000000000000000<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\"><span class=\"kwrd\">SELECT<\/span> * <\/font><\/pre>\n<pre><font face=\"Courier New\"><span class=\"kwrd\">FROM<\/span> sys.dm_exec_query_plan(@plan_handle)<\/font><\/pre>\n<\/p><\/div>\n<\/blockquote>\n<style type=\"text\/css\">\n<p>.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<p><font size=\"2\">It doesn&#8217;t matter how many times you run the INSERT statement in the above repro, you won&#8217;t get a plan_handle back from the Event Session that you can query from the plan cache using sys.dm_exec_query_plan().&#160; However, if you were to search the plan cache XML by parsing it, you would find a cached execution plan for the INSERT statement:<\/font><\/p>\n<blockquote>\n<div class=\"csharpcode\">\n<pre class=\"alt\"><font face=\"Courier New\"><span class=\"kwrd\">SELECT<\/span> cp.plan_handle, st.text<\/font><\/pre>\n<pre><font face=\"Courier New\"><span class=\"kwrd\">FROM<\/span> sys.dm_exec_cached_plans cp <\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\"><span class=\"kwrd\">CROSS<\/span> APPLY sys.dm_exec_sql_text(cp.plan_handle) st<\/font><\/pre>\n<pre><font face=\"Courier New\"><span class=\"kwrd\">WHERE<\/span> st.text <span class=\"kwrd\">like<\/span> <span class=\"str\">'%INSERT%INTO%ErrorLog%'<\/span><\/font><\/pre>\n<pre class=\"alt\"><span class=\"rem\"><font face=\"Courier New\">-- Prevent caching this statement<\/font><\/span><\/pre>\n<pre><font face=\"Courier New\"><span class=\"kwrd\">OPTION<\/span>(RECOMPILE);<\/font><\/pre>\n<\/p><\/div>\n<\/blockquote>\n<style type=\"text\/css\">\n<p>.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<p><font size=\"2\">The output of this will be similar to:<\/font><\/p>\n<p><a href=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/146b51e6ad8f\/70a74a22\/image.png\" target=\"_blank\"><img decoding=\"async\" style=\"background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px\" title=\"image\" border=\"0\" alt=\"image\" src=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/146b51e6ad8f\/364bd441\/image_thumb.png\" width=\"644\" height=\"47\" \/><\/a><\/p>\n<p><font size=\"2\">If you look at the text output you will notice that this isn&#8217;t exactly the statement that was executed, so what happened here exactly?&#160; When an adhoc statement is submitted to SQL Server, the optimizer will auto parameterize the inline literals with variables to compile the query plan for execution, and this is what is cached in by SQL Server in the case of this INSERT statement.&#160; You can always tell that a plan was auto parameterized by the way that the variables are listed inside of the statement text for the plan.&#160; The topic of plan caching and auto parameterization are covered in detail in the MSDN whitepaper <a href=\"https:\/\/technet.microsoft.com\/en-us\/library\/cc966425.aspx\" target=\"_blank\">Batch Compilation, Recompilation, and Plan Caching Issues in SQL Server 2005<\/a>.<\/font><\/p>\n<p><font size=\"2\">The problem in this case is not that Extended Events is returning incorrect information for the plan_handle; the handle that is being returned is valid at the point that the event fired for the adhoc request against SQL Server, the adhoc plan is not cached by the Database Engine, and instead the auto parameterized plan is what is actually cached.&#160; The caching of the auto parameterized plan is actually an optimization inside of SQL Server in this case since the plan for the inline literals is not likely to be reused by the optimizer for subsequent adhoc SQL Statements performing the exact same INSERT operation but with different literals for the values being inserted.&#160; This was discussed at some depth on the <\/font><a href=\"https:\/\/blogs.msdn.microsoft.com\/b\/sqlprogrammability\/archive\/2007\/01\/11\/4-0-query-parameterization.aspx\" target=\"_blank\"><font size=\"2\">SQL Programmability &amp; API Development Team Blog post: 4.0 Query Parameterization<\/font><\/a><font size=\"2\">.&#160; Under SQL Server 2005 RTM and SQL Server 2005 SP1, there was a significant problem with plan cache bloat related to single use adhoc query plans and a significant change was made to the caching behavior of SQL Server 2005 in SP2 that have been carried forward in the product as detailed in the <a href=\"https:\/\/blogs.msdn.microsoft.com\/b\/sqlprogrammability\/archive\/2007\/01\/22\/3-0-changes-in-caching-behavior-between-sql-server-2000-sql-server-2005-rtm-and-sql-server-2005-sp2.aspx\" target=\"_blank\">SQL Programmability &amp; API Development Team Blog post: 3.0 Changes in Caching Behavior between SQL Server 2000, SQL Server 2005 RTM and SQL Server 2005 SP2<\/a>.<\/font><\/p>\n<p><font size=\"2\">If we change the original repro for this problem to use a parameterized query the plan_handle returned by the sqlserver.plan_handle action will return the same plan_handle that is cached by SQL Server as show in the following modification of the original repro for this problem:<\/font><\/p>\n<blockquote>\n<div class=\"csharpcode\">\n<pre class=\"alt\"><span class=\"rem\"><font face=\"Courier New\">-- Create the Event Session<\/font><\/span><\/pre>\n<pre><font face=\"Courier New\"><span class=\"kwrd\">IF<\/span> <span class=\"kwrd\">EXISTS<\/span>(<span class=\"kwrd\">SELECT<\/span> * <\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">          <span class=\"kwrd\">FROM<\/span> sys.server_event_sessions <\/font><\/pre>\n<pre><font face=\"Courier New\">          <span class=\"kwrd\">WHERE<\/span> name=<span class=\"str\">'SQLStmtEvents'<\/span>)<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">    <span class=\"kwrd\">DROP<\/span> EVENT <span class=\"kwrd\">SESSION<\/span> SQLStmtEvents <\/font><\/pre>\n<pre><font face=\"Courier New\">    <span class=\"kwrd\">ON<\/span> SERVER;<\/font><\/pre>\n<pre class=\"alt\"><span class=\"kwrd\"><font face=\"Courier New\">GO<\/font><\/span><\/pre>\n<pre><font face=\"Courier New\"><span class=\"kwrd\">CREATE<\/span> EVENT <span class=\"kwrd\">SESSION<\/span> SQLStmtEvents<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\"><span class=\"kwrd\">ON<\/span> SERVER<\/font><\/pre>\n<pre><font face=\"Courier New\"><span class=\"kwrd\">ADD<\/span> EVENT sqlserver.sql_statement_completed(<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">    <span class=\"kwrd\">ACTION<\/span> (sqlserver.client_app_name,<\/font><\/pre>\n<pre><font face=\"Courier New\">            sqlserver.plan_handle,<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">            sqlserver.sql_text,<\/font><\/pre>\n<pre><font face=\"Courier New\">            sqlserver.tsql_stack,<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">            package0.callstack,<\/font><\/pre>\n<pre><font face=\"Courier New\">            sqlserver.request_id)<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">--Change this <span class=\"kwrd\">to<\/span> <span class=\"kwrd\">match<\/span> the AdventureWorks, <\/font><\/pre>\n<pre><font face=\"Courier New\">--AdventureWorks2008 <span class=\"kwrd\">or<\/span> AdventureWorks2008 DB_ID()<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\"><span class=\"kwrd\">WHERE<\/span> sqlserver.database_id=5 <\/font><\/pre>\n<pre><font face=\"Courier New\">)<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\"><span class=\"kwrd\">ADD<\/span> TARGET package0.ring_buffer<\/font><\/pre>\n<pre><font face=\"Courier New\"><span class=\"kwrd\">WITH<\/span> (MAX_DISPATCH_LATENCY=5SECONDS, TRACK_CAUSALITY=<span class=\"kwrd\">ON<\/span>)<\/font><\/pre>\n<pre class=\"alt\"><span class=\"kwrd\"><font face=\"Courier New\">GO<\/font><\/span><\/pre>\n<pre><font face=\"Courier New\">&#160;<\/font><\/pre>\n<pre class=\"alt\"><span class=\"rem\"><font face=\"Courier New\">-- Start the Event Session<\/font><\/span><\/pre>\n<pre><font face=\"Courier New\"><span class=\"kwrd\">ALTER<\/span> EVENT <span class=\"kwrd\">SESSION<\/span> SQLStmtEvents <\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\"><span class=\"kwrd\">ON<\/span> SERVER <\/font><\/pre>\n<pre><font face=\"Courier New\"><span class=\"kwrd\">STATE<\/span> = <span class=\"kwrd\">START<\/span>;<\/font><\/pre>\n<pre class=\"alt\"><span class=\"kwrd\"><font face=\"Courier New\">GO<\/font><\/span><\/pre>\n<pre><font face=\"Courier New\">&#160;<\/font><\/pre>\n<pre class=\"alt\"><span class=\"rem\"><font face=\"Courier New\">-- Change database contexts and insert one row parameterized<\/font><\/span><\/pre>\n<pre><font face=\"Courier New\"><span class=\"kwrd\">USE<\/span> AdventureWorks2008R2;<\/font><\/pre>\n<pre class=\"alt\"><span class=\"kwrd\"><font face=\"Courier New\">GO<\/font><\/span><\/pre>\n<pre><font face=\"Courier New\"><span class=\"kwrd\">DECLARE<\/span> @ErrorTime datetime = GETDATE(),<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">        @UserName sysname = <span class=\"kwrd\">SYSTEM_USER<\/span>,<\/font><\/pre>\n<pre><font face=\"Courier New\">        @ErrorNumber <span class=\"kwrd\">int<\/span> = -1,<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">        @ErrorSeverity <span class=\"kwrd\">int<\/span> = -1,<\/font><\/pre>\n<pre><font face=\"Courier New\">        @ErrorState <span class=\"kwrd\">int<\/span> = -1,<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">        @ErrorProcedure nvarchar(126) = <span class=\"str\">'ErrorProcedure'<\/span>,<\/font><\/pre>\n<pre><font face=\"Courier New\">        @ErrorLine <span class=\"kwrd\">int<\/span> = 10, <\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">        @ErrorMessage nvarchar(4000) = <span class=\"str\">'An error occured'<\/span><\/font><\/pre>\n<pre><font face=\"Courier New\">        <\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">INSERT <span class=\"kwrd\">INTO<\/span> [dbo].[ErrorLog]<\/font><\/pre>\n<pre><font face=\"Courier New\">    ([ErrorTime],[UserName],[ErrorNumber],[ErrorSeverity],[ErrorState],<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">     [ErrorProcedure],[ErrorLine],[ErrorMessage])<\/font><\/pre>\n<pre><font face=\"Courier New\"><span class=\"kwrd\">VALUES<\/span>(@ErrorTime,@UserName,@ErrorNumber,@ErrorSeverity,@ErrorState,<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">        @ErrorProcedure,@ErrorLine,@ErrorMessage)<\/font><\/pre>\n<pre><font face=\"Courier New\"><span class=\"kwrd\">GO<\/span> 5<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">&#160;<\/font><\/pre>\n<pre><span class=\"rem\"><font face=\"Courier New\">-- Retrieve the Event Data from the Event Session Target<\/font><\/span><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\"><span class=\"kwrd\">SELECT<\/span> event_name,<\/font><\/pre>\n<pre><font face=\"Courier New\">    plan_handle,<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">    sql_text,<\/font><\/pre>\n<pre><font face=\"Courier New\">    query_plan<\/font><\/pre>\n<pre class=\"alt\"><span class=\"kwrd\"><font face=\"Courier New\">FROM<\/font><\/span><\/pre>\n<pre><font face=\"Courier New\">(<\/font><\/pre>\n<pre class=\"alt\"><span class=\"kwrd\"><font face=\"Courier New\">SELECT<\/font><\/span><\/pre>\n<pre><font face=\"Courier New\">    event_data.<span class=\"kwrd\">value<\/span>(<span class=\"str\">'(event\/@name)[1]'<\/span>, <span class=\"str\">'varchar(50)'<\/span>) <span class=\"kwrd\">AS<\/span> event_name,<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">    <span class=\"kwrd\">CAST<\/span>(event_data.<span class=\"kwrd\">value<\/span>(<span class=\"str\">'(event\/action[@name=&quot;plan_handle&quot;]\/value)[1]'<\/span>, <span class=\"str\">'varchar(max)'<\/span>) <span class=\"kwrd\">AS<\/span> XML) <span class=\"kwrd\">as<\/span> plan_handle,<\/font><\/pre>\n<pre><font face=\"Courier New\">    event_data.<span class=\"kwrd\">value<\/span>(<span class=\"str\">'(event\/action[@name=&quot;sql_text&quot;]\/value)[1]'<\/span>, <span class=\"str\">'varchar(max)'<\/span>) <span class=\"kwrd\">AS<\/span> sql_text<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\"><span class=\"kwrd\">FROM<\/span>(    <span class=\"kwrd\">SELECT<\/span> evnt.query(<span class=\"str\">'.'<\/span>) <span class=\"kwrd\">AS<\/span> event_data<\/font><\/pre>\n<pre><font face=\"Courier New\">        <span class=\"kwrd\">FROM<\/span><\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">        (    <span class=\"kwrd\">SELECT<\/span> <span class=\"kwrd\">CAST<\/span>(target_data <span class=\"kwrd\">AS<\/span> xml) <span class=\"kwrd\">AS<\/span> TargetData<\/font><\/pre>\n<pre><font face=\"Courier New\">            <span class=\"kwrd\">FROM<\/span> sys.dm_xe_sessions <span class=\"kwrd\">AS<\/span> s<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">            <span class=\"kwrd\">JOIN<\/span> sys.dm_xe_session_targets <span class=\"kwrd\">AS<\/span> t<\/font><\/pre>\n<pre><font face=\"Courier New\">                <span class=\"kwrd\">ON<\/span> s.address = t.event_session_address<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">            <span class=\"kwrd\">WHERE<\/span> s.name = <span class=\"str\">'SQLStmtEvents'<\/span><\/font><\/pre>\n<pre><font face=\"Courier New\">              <span class=\"kwrd\">AND<\/span> t.target_name = <span class=\"str\">'ring_buffer'<\/span><\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">        ) <span class=\"kwrd\">AS<\/span> tab<\/font><\/pre>\n<pre><font face=\"Courier New\">        <span class=\"kwrd\">CROSS<\/span> APPLY TargetData.nodes (<span class=\"str\">'RingBufferTarget\/event'<\/span>) <span class=\"kwrd\">AS<\/span> split(evnt) <\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\">     ) <span class=\"kwrd\">AS<\/span> evts(event_data)<\/font><\/pre>\n<pre><font face=\"Courier New\">) <span class=\"kwrd\">AS<\/span> tab<\/font><\/pre>\n<pre class=\"alt\"><font face=\"Courier New\"><span class=\"kwrd\">CROSS<\/span> APPLY sys.dm_exec_query_plan(plan_handle.<span class=\"kwrd\">value<\/span>(<span class=\"str\">'xs:hexBinary(substring((plan\/@handle)[1], 3))'<\/span>, <span class=\"str\">'varbinary(max)'<\/span>)) <span class=\"kwrd\">as<\/span> qp<\/font><\/pre>\n<\/p><\/div>\n<\/blockquote>\n<style type=\"text\/css\">\n<p>.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<p><font size=\"2\">The output of this execution will result in something similar to the following:<\/font><\/p>\n<p align=\"center\"><a href=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/146b51e6ad8f\/47500224\/image.png\" target=\"_blank\"><img fetchpriority=\"high\" decoding=\"async\" style=\"background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px\" title=\"image\" border=\"0\" alt=\"image\" src=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/146b51e6ad8f\/1413c8bb\/image_thumb.png\" width=\"644\" height=\"165\" \/><\/a><\/p>\n<p align=\"left\"><font size=\"2\">Note that the plan_handle is the same for every execution of the INSERT operation, and the plan is readily available from the plan cache because the statement executed was parameterized explicitly in this case by the declaration of variables.&#160; This is yet another case for why explicit parameterization of queries is so incredibly important in SQL Server and why adhoc statements, despite the coding simplicity for application developers is a bad design pattern.<\/font><\/p>\n<p align=\"left\"><font size=\"2\">One item that you might notice that is different about the parameterized version of the repro for this is that I used the GO 5 operation to execute the parameterized version of the INSERT operation multiple times.&#160; The reason behind this is that when I ran the initial test of the parameterized version of the INSERT tonight, the first plan was not cached by the Database Engine.&#160; You might ask why this was the case, and there is a really good reason.&#160; As a part of the <a href=\"https:\/\/www.sqlskills.com\/sql-server-training\/immersion-events-schedule\/\" target=\"_blank\">SQLskills Immersion Training<\/a> I take part in as an instructor, I had the &#8216;optimize for adhoc workloads&#8217; sp_configure option set on my laptop, and this causes a plan stub to be generated for adhoc batches, which the above parameterize query actually is, for the first execution, and then the full plan is cached on the second execution only.&#160; To mitigate against the second repro being a problem for someone I decided to have it execute the INSERT five consecutive times to force caching of the plan to show that parameterization does impact the actual plan handle returned by sqlserver.plan_handle action.<\/font><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The topic for today&#8217;s post comes from a forums question and a subsequent Connect feedback item where someone noted that the plan_handle being returned by Extended Events using the sqlserver.plan_handle action was not available in the plan cache even when queried immediately following completion of the event that should have produced the plan cache entry.&#160; [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[22,23,38],"tags":[],"class_list":["post-529","post","type-post","status-publish","format-standard","hentry","category-execution-plans","category-extended-events","category-sql-server-2008"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>What plan_handle is Extended Events sqlserver.plan_handle action returning? - 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\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"What plan_handle is Extended Events sqlserver.plan_handle action returning? - Jonathan Kehayias\" \/>\n<meta property=\"og:description\" content=\"The topic for today&#8217;s post comes from a forums question and a subsequent Connect feedback item where someone noted that the plan_handle being returned by Extended Events using the sqlserver.plan_handle action was not available in the plan cache even when queried immediately following completion of the event that should have produced the plan cache entry.&#160; [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/jonathan\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\/\" \/>\n<meta property=\"og:site_name\" content=\"Jonathan Kehayias\" \/>\n<meta property=\"article:published_time\" content=\"2011-04-07T03:10:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-04-13T18:41:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/146b51e6ad8f\/364bd441\/image_thumb.png\" \/>\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=\"7 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\\\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\\\/\"},\"author\":{\"name\":\"Jonathan Kehayias\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#\\\/schema\\\/person\\\/01c10d94f3648654ef706d5e6305f69c\"},\"headline\":\"What plan_handle is Extended Events sqlserver.plan_handle action returning?\",\"datePublished\":\"2011-04-07T03:10:41+00:00\",\"dateModified\":\"2017-04-13T18:41:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\\\/\"},\"wordCount\":816,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.SQLskills.com\\\/blogs\\\/jonathan\\\/wp-content\\\/uploads\\\/windows-live-writer\\\/146b51e6ad8f\\\/364bd441\\\/image_thumb.png\",\"articleSection\":[\"Execution Plans\",\"Extended Events\",\"SQL Server 2008\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\\\/\",\"url\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\\\/\",\"name\":\"What plan_handle is Extended Events sqlserver.plan_handle action returning? - Jonathan Kehayias\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.SQLskills.com\\\/blogs\\\/jonathan\\\/wp-content\\\/uploads\\\/windows-live-writer\\\/146b51e6ad8f\\\/364bd441\\\/image_thumb.png\",\"datePublished\":\"2011-04-07T03:10:41+00:00\",\"dateModified\":\"2017-04-13T18:41:48+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#\\\/schema\\\/person\\\/01c10d94f3648654ef706d5e6305f69c\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.SQLskills.com\\\/blogs\\\/jonathan\\\/wp-content\\\/uploads\\\/windows-live-writer\\\/146b51e6ad8f\\\/364bd441\\\/image_thumb.png\",\"contentUrl\":\"https:\\\/\\\/www.SQLskills.com\\\/blogs\\\/jonathan\\\/wp-content\\\/uploads\\\/windows-live-writer\\\/146b51e6ad8f\\\/364bd441\\\/image_thumb.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Execution Plans\",\"item\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/category\\\/execution-plans\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"What plan_handle is Extended Events sqlserver.plan_handle action returning?\"}]},{\"@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":"What plan_handle is Extended Events sqlserver.plan_handle action returning? - 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\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\/","og_locale":"en_US","og_type":"article","og_title":"What plan_handle is Extended Events sqlserver.plan_handle action returning? - Jonathan Kehayias","og_description":"The topic for today&#8217;s post comes from a forums question and a subsequent Connect feedback item where someone noted that the plan_handle being returned by Extended Events using the sqlserver.plan_handle action was not available in the plan cache even when queried immediately following completion of the event that should have produced the plan cache entry.&#160; [&hellip;]","og_url":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\/","og_site_name":"Jonathan Kehayias","article_published_time":"2011-04-07T03:10:41+00:00","article_modified_time":"2017-04-13T18:41:48+00:00","og_image":[{"url":"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/146b51e6ad8f\/364bd441\/image_thumb.png","type":"","width":"","height":""}],"author":"Jonathan Kehayias","twitter_misc":{"Written by":"Jonathan Kehayias","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\/#article","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\/"},"author":{"name":"Jonathan Kehayias","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#\/schema\/person\/01c10d94f3648654ef706d5e6305f69c"},"headline":"What plan_handle is Extended Events sqlserver.plan_handle action returning?","datePublished":"2011-04-07T03:10:41+00:00","dateModified":"2017-04-13T18:41:48+00:00","mainEntityOfPage":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\/"},"wordCount":816,"commentCount":0,"image":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\/#primaryimage"},"thumbnailUrl":"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/146b51e6ad8f\/364bd441\/image_thumb.png","articleSection":["Execution Plans","Extended Events","SQL Server 2008"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.sqlskills.com\/blogs\/jonathan\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\/","url":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\/","name":"What plan_handle is Extended Events sqlserver.plan_handle action returning? - Jonathan Kehayias","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\/#primaryimage"},"image":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\/#primaryimage"},"thumbnailUrl":"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/146b51e6ad8f\/364bd441\/image_thumb.png","datePublished":"2011-04-07T03:10:41+00:00","dateModified":"2017-04-13T18:41:48+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#\/schema\/person\/01c10d94f3648654ef706d5e6305f69c"},"breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/jonathan\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\/#primaryimage","url":"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/146b51e6ad8f\/364bd441\/image_thumb.png","contentUrl":"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/146b51e6ad8f\/364bd441\/image_thumb.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/what-plan_handle-is-extended-events-sqlserver-plan_handle-action-returning\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/"},{"@type":"ListItem","position":2,"name":"Execution Plans","item":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/category\/execution-plans\/"},{"@type":"ListItem","position":3,"name":"What plan_handle is Extended Events sqlserver.plan_handle action returning?"}]},{"@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\/529","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=529"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/posts\/529\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/media?parent=529"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/categories?post=529"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/tags?post=529"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}