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

Sql server 获取一定时间段内的查询执行次数,sql-server,database,tsql,Sql Server,Database,Tsql,我有一个在MS SQL Server上使用单个数据库的应用程序。我需要了解一些有关应用程序对数据库的请求的统计信息,以便对其进行分析并提高性能 基本上,我需要在SQL Server Management Studio的活动监视器的最近昂贵的查询中显示的信息摘要。要知道的最重要的事情是在一定时间段(重函数的工作时间)内执行查询的总次数。请注意,活动监视器中的查询如下所示: SELECT [A],[B],[C] FROM [Table] WHERE [ID]=@1 因此,通常会有相同的查询,但参数

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

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

SELECT [A],[B],[C] FROM [Table] WHERE [ID]=@1
因此,通常会有相同的查询,但参数不同

请让我知道收集这些数据的方法,或者只是分享你对“如何”的想法。我将学习并尝试它,并将结果写下来。

谢谢

我真的很喜欢这个人提供的文章


此外,我还要确保您的应用程序有自己的SQl登录,因为这样在分析数据时会更加容易。

将查询插入到SSMS中,并打开查询/包含实际执行计划。这需要一些时间来适应阅读,但一般来说,要寻找表格扫描。表扫描通常意味着索引应该出现在join、group by或where子句列上。

您可以获得现在正在执行的所有查询

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
我建议您使用SQLServerProfiler,分析您的数据库,并将结果保存在数据库中的一个表中,然后选择all命令并按其分组以进行分析

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