在Azure查询详细信息中查看时未保留SQL注释

时间:2019-03-27 16:28:01

标签: c# sql-server entity-framework azure

我们正在使用.NET实体框架与Azure SQL数据库进行通信。我们使用QueryOriginInterceptor在发送到SQL Server的每个SQL命令的顶部添加了一些注释,目的是帮助识别代码中特定查询的来源。

问题是,当在Azure UI中查看长期运行的查询(并在sys.dm_exec_query_stats中查看)时,注释不存在。

例如,如果我们运行以下查询:

-- Stack:
-- Utils.Orders.GetOrders
select * 
from [Order] o 
join OrderItem oi on oi.OrderId = o.ID

在Azure中,长期运行的查询如下所示:

enter image description here

有没有办法保留这些评论?

1 个答案:

答案 0 :(得分:0)

sys.dm_exec_query_stats不包含注释,但dm_exec_sql_text包含注释。

This artice解释了如何使用两者来诊断问题。

文章中的相关SQL查询为:

SELECT TOP 25
databases.name,
dm_exec_sql_text.text AS TSQL_Text,
CAST(CAST(dm_exec_query_stats.total_worker_time AS DECIMAL)/CAST(dm_exec_query_stats.execution_count AS DECIMAL) AS INT) as cpu_per_execution,
CAST(CAST(dm_exec_query_stats.total_logical_reads AS DECIMAL)/CAST(dm_exec_query_stats.execution_count AS DECIMAL) AS INT) as logical_reads_per_execution,
CAST(CAST(dm_exec_query_stats.total_elapsed_time AS DECIMAL)/CAST(dm_exec_query_stats.execution_count AS DECIMAL) AS INT) as elapsed_time_per_execution,
dm_exec_query_stats.creation_time, 
dm_exec_query_stats.execution_count,
dm_exec_query_stats.total_worker_time AS total_cpu_time,
dm_exec_query_stats.max_worker_time AS max_cpu_time, 
dm_exec_query_stats.total_elapsed_time, 
dm_exec_query_stats.max_elapsed_time, 
dm_exec_query_stats.total_logical_reads, 
dm_exec_query_stats.max_logical_reads,
dm_exec_query_stats.total_physical_reads, 
dm_exec_query_stats.max_physical_reads,
dm_exec_query_plan.query_plan,
dm_exec_cached_plans.cacheobjtype,
dm_exec_cached_plans.objtype,
dm_exec_cached_plans.size_in_bytes
FROM sys.dm_exec_query_stats 
CROSS APPLY sys.dm_exec_sql_text(dm_exec_query_stats.plan_handle)
CROSS APPLY sys.dm_exec_query_plan(dm_exec_query_stats.plan_handle)
INNER JOIN sys.databases
ON dm_exec_sql_text.dbid = databases.database_id
INNER JOIN sys.dm_exec_cached_plans 
ON dm_exec_cached_plans.plan_handle = dm_exec_query_stats.plan_handle
WHERE databases.name = 'AdventureWorks2014'
ORDER BY dm_exec_query_stats.max_logical_reads DESC;