我有一个在MS SQL Server上使用单个数据库的应用程序。我需要了解一些有关应用程序请求的统计信息,以便对数据库进行分析并提高性能。
基本上,我需要在 SQL Server Management Studio 的活动监视器的最近的昂贵查询中显示的信息摘要。最重要的是要知道查询在一定时间内执行的总次数(重函数的工作时间)。请注意,Activity Monitor中的查询如下所示:
SELECT [A],[B],[C] FROM [Table] WHERE [ID]=@1
所以,经常有相同的查询,但参数不同。
请让我知道收集此类数据的选项,或者只是分享您对"如何"的想法。我将学习并尝试并写下结果 谢谢!
答案 0 :(得分:2)
我真的很喜欢这个人提供的文章
http://blog.sqlauthority.com/2010/05/14/sql-server-find-most-expensive-queries-using-dmv/
另外,我会确保您的应用程序有自己的SQl登录,因为它可以在分析数据时更轻松。
答案 1 :(得分:2)
您可以获取现在正在执行的所有查询。
USE master;
SELECT st.text,
r.session_id,
r.status,
r.command,
r.cpu_time,
r.total_elapsed_time
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS st
您可以获得所有执行的50个查询
SELECT TOP 50
deqs.last_execution_time AS [Time],
dest.text AS [Query]
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY deqs.last_execution_time DESC
我建议您使用SQL Server Profiler,对数据库进行配置并将结果保存在数据库中的一个表中,然后选择所有命令和组进行分析。
Select *
From
(
Select
Convert(VarChar(Max) , PT.TextData ) As ExecutedCommand ,
COUNT( RowNumber ) As CommandCount
From ProfilerTable As PT (nolock)
Where
( PT.TextData Is Not Null )
And
( PT.EndTime Is Not Null )
Group By Convert( VarChar( Max ) , PT.TextData )
) As SubQuery
Order By SubQuery.CommandCount Desc
答案 2 :(得分:1)
将查询插入SSMS并启用“查询/包含实际执行计划”。这需要一些人习惯阅读,但一般来说,寻找表扫描。表扫描通常意味着索引应该出现在join,group by或where子句列中。