请教各位达人,我希望查询某段时间内所有数据库操作(比如update,insert)的耗时应该怎么做?我知道oracle是有的,但我在网上怎么也找不到sqlserver有没有这个功能,以及怎么查询。我用的是sqlserver 2008 R2,谢谢各位达人了。
------解决方案--------------------
set statistics time on;
你的语句
set statistics time off;
或者用sql server profiler来获取
------解决方案--------------------
用SQL Profiler工具跟踪.
或者用MDW数据收集.
------解决方案--------------------
SQL profiler专门用于跟踪的 自己去看看吧。
具体到每一个DDL操作的话 估计有困难
------解决方案--------------------
历史数据是汇总值,比较难查,并且一旦重启服务器,就会清空重新统计,可以用这个语句大概统计一下,如果你真有这方面的需要,应该做好一系列的监控:
--某个库中存储过程平均耗时
SELECT TOP ( 25 )
p.name AS [SP Name] ,
qs.total_elapsed_time / qs.execution_count AS [avg_elapsed_time] ,
qs.total_elapsed_time ,
qs.execution_count ,
ISNULL(qs.execution_count / DATEDIFF(Second, qs.cached_time, GETDATE()),
0) AS [Calls/Second] ,
qs.total_worker_time / qs.execution_count AS [AvgWorkerTime] ,
qs.total_worker_time AS [TotalWorkerTime] ,
qs.cached_time
FROM sys.procedures AS p WITH ( NOLOCK )
INNER JOIN sys.dm_exec_procedure_stats AS qs WITH ( NOLOCK ) ON p.[object_id] = qs.[object_id]
WHERE qs.database_id = DB_ID()
ORDER BY avg_elapsed_time DESC
OPTION ( RECOMPILE );
--这是普通查询语句的
SELECT qs.execution_count ,
qs.total_rows ,
qs.last_rows ,
qs.min_rows ,
qs.max_rows ,
qs.last_elapsed_time ,
qs.min_elapsed_time ,
qs.max_elapsed_time ,
SUBSTRING(qt.TEXT, qs.statement_start_offset / 2 + 1,
( CASE WHEN qs.statement_end_offset = -1
THEN LEN(CONVERT(NVARCHAR(MAX), qt.TEXT)) * 2
ELSE qs.statement_end_offset
END - qs.statement_start_offset ) / 2) AS query_text
FROM sys.dm_exec_query_stats AS qs WITH ( NOLOCK )
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
ORDER BY qs.execution_count DESC
OPTION ( RECOMPILE );