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