Sql server 2005 有没有办法在特定时间内找到最昂贵的查询?
我确实问过这个问题。但这是我想做的- 我想运行我的.net应用程序,监视正在执行的sql查询,并且只监视那些与记录所有内容的sql profiler相比的查询Sql server 2005 有没有办法在特定时间内找到最昂贵的查询?,sql-server-2005,monitoring,Sql Server 2005,Monitoring,我确实问过这个问题。但这是我想做的- 我想运行我的.net应用程序,监视正在执行的sql查询,并且只监视那些与记录所有内容的sql profiler相比的查询 那么,有没有人知道我可以使用什么工具或方法来监视应用程序的查询,然后找出该会话中最昂贵的查询?使用服务器端SQL跟踪(而不是探查器GUI,因为这会增加更多开销)、过滤应用程序使用的spid、处理和聚合跟踪数据 RML实用程序将负责使用不同的文本列值(例如,使用不同的参数值调用相同的存储过程)对类似查询进行模板化,以便将它们聚合在一起。在到
那么,有没有人知道我可以使用什么工具或方法来监视应用程序的查询,然后找出该会话中最昂贵的查询?使用服务器端SQL跟踪(而不是探查器GUI,因为这会增加更多开销)、过滤应用程序使用的spid、处理和聚合跟踪数据
RML实用程序将负责使用不同的文本列值(例如,使用不同的参数值调用相同的存储过程)对类似查询进行模板化,以便将它们聚合在一起。在到SQL Server的应用程序连接字符串中,添加(OTTOMH)APPLICATION_NAME='ABC App'。所以实际上应该是这样的 'Server=YOURSERVERNAME;综合安全=SSPI;应用程序名称=ABC应用程序' 应用程序运行后,您可以在SQL Server Management Studio中运行
sp_who2
,以查看所有连接-检查此处以确保应用程序显示的是.Net应用程序的名称,而不是通用名称
*仔细检查这是应用程序名称还是应用程序名称*
在探查器中设置跟踪标志时,请转到“事件”选项卡,然后单击“列过滤器”。第一个是ApplicationName。将其设置为“%ABC App%”
SELECT TOP 10 SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.TEXT)
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2)+1),
qs.execution_count,
qs.total_logical_reads, qs.last_logical_reads,
qs.total_logical_writes, qs.last_logical_writes,
qs.total_worker_time,
qs.last_worker_time,
qs.total_elapsed_time/1000000 total_elapsed_time_in_S,
qs.last_elapsed_time/1000000 last_elapsed_time_in_S,
qs.last_execution_time,
qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY qs.total_logical_reads DESC