获取一定时间内的查询执行次数

时间:2013-08-28 16:18:38

标签: sql-server database tsql

我有一个在MS SQL Server上使用单个数据库的应用程序。我需要了解一些有关应用程序请求的统计信息,以便对数据库进行分析并提高性能。

基本上,我需要在 SQL Server Management Studio 活动监视器最近的昂贵查询中显示的信息摘要。最重要的是要知道查询在一定时间内执行的总次数(重函数的工作时间)。请注意,Activity Monitor中的查询如下所示:

SELECT [A],[B],[C] FROM [Table] WHERE [ID]=@1

所以,经常有相同的查询,但参数不同。

请让我知道收集此类数据的选项,或者只是分享您对"如何"的想法。我将学习并尝试并写下结果 谢谢!

3 个答案:

答案 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子句列中。