From 3bf988e36bdb14b9b1894b00db702d0aa3ebb910 Mon Sep 17 00:00:00 2001 From: Erik Darling <2136037+erikdarlingdata@users.noreply.github.com> Date: Wed, 25 Feb 2026 21:58:05 -0500 Subject: [PATCH] Fix live snapshot missing bulk insert queries and decimal cast error Use sql_handle instead of plan_handle for dm_exec_sql_text so bulk insert operations (which have no plan_handle) appear in live snapshots. Fix System.Single to System.Decimal cast errors for percent_complete and granted_query_memory_gb in Dashboard's active query reader. Co-Authored-By: Claude Opus 4.6 --- Dashboard/Services/DatabaseService.QueryPerformance.cs | 6 +++--- Lite/Services/RemoteCollectorService.QuerySnapshots.cs | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Dashboard/Services/DatabaseService.QueryPerformance.cs b/Dashboard/Services/DatabaseService.QueryPerformance.cs index 11e987a9..561992e1 100644 --- a/Dashboard/Services/DatabaseService.QueryPerformance.cs +++ b/Dashboard/Services/DatabaseService.QueryPerformance.cs @@ -2882,7 +2882,7 @@ WHEN 5 THEN 'Snapshot' FROM sys.dm_exec_requests AS der JOIN sys.dm_exec_sessions AS des ON des.session_id = der.session_id -OUTER APPLY sys.dm_exec_sql_text(der.plan_handle) AS dest +OUTER APPLY sys.dm_exec_sql_text(COALESCE(der.sql_handle, der.plan_handle)) AS dest OUTER APPLY sys.dm_exec_text_query_plan(der.plan_handle, der.statement_start_offset, der.statement_end_offset) AS deqp OUTER APPLY sys.dm_exec_query_statistics_xml(der.session_id) AS deqs WHERE der.session_id <> @@SPID @@ -2919,7 +2919,7 @@ AND dest.text IS NOT NULL Reads = reader.IsDBNull(13) ? 0 : Convert.ToInt64(reader.GetValue(13)), Writes = reader.IsDBNull(14) ? 0 : Convert.ToInt64(reader.GetValue(14)), LogicalReads = reader.IsDBNull(15) ? 0 : Convert.ToInt64(reader.GetValue(15)), - GrantedQueryMemoryGb = reader.IsDBNull(16) ? 0m : reader.GetDecimal(16), + GrantedQueryMemoryGb = reader.IsDBNull(16) ? 0m : Convert.ToDecimal(reader.GetValue(16)), TransactionIsolationLevel = reader.IsDBNull(17) ? null : reader.GetString(17), Dop = reader.IsDBNull(18) ? 0 : Convert.ToInt32(reader.GetValue(18)), ParallelWorkerCount = reader.IsDBNull(19) ? 0 : Convert.ToInt32(reader.GetValue(19)), @@ -2927,7 +2927,7 @@ AND dest.text IS NOT NULL HostName = reader.IsDBNull(21) ? null : reader.GetString(21), ProgramName = reader.IsDBNull(22) ? null : reader.GetString(22), OpenTransactionCount = reader.IsDBNull(23) ? 0 : Convert.ToInt32(reader.GetValue(23)), - PercentComplete = reader.IsDBNull(24) ? 0m : reader.GetDecimal(24) + PercentComplete = reader.IsDBNull(24) ? 0m : Convert.ToDecimal(reader.GetValue(24)) }); } diff --git a/Lite/Services/RemoteCollectorService.QuerySnapshots.cs b/Lite/Services/RemoteCollectorService.QuerySnapshots.cs index b2cb66de..9fc2b2a2 100644 --- a/Lite/Services/RemoteCollectorService.QuerySnapshots.cs +++ b/Lite/Services/RemoteCollectorService.QuerySnapshots.cs @@ -70,7 +70,7 @@ WHEN 5 THEN 'Snapshot' FROM sys.dm_exec_requests AS der JOIN sys.dm_exec_sessions AS des ON des.session_id = der.session_id -OUTER APPLY sys.dm_exec_sql_text(der.plan_handle) AS dest +OUTER APPLY sys.dm_exec_sql_text(COALESCE(der.sql_handle, der.plan_handle)) AS dest OUTER APPLY sys.dm_exec_text_query_plan(der.plan_handle, der.statement_start_offset, der.statement_end_offset) AS deqp {1} WHERE der.session_id <> @@SPID