sql server性能分析--执行sql次数和逻辑次数

 目前在做一个项目优化时,想通过数据库层分析sql server系统性能,查了一下网上代码,修改了一下标题和DMVs代码,以下代码可以用来分析系统运行一段时间后,那些语句是系统忙的sql语句。做为参考。

   另类使用:

     一次在分析一个对账功能时,查看系统代码,看了半天,写得太不规范,又不写注释,看不明白。最后用了下面一个小技巧,和大家一起分享:

 就是在测量功能时,先以下命令清除sql server的缓存:

 

dbcc freeProcCache
 

在点击某个按钮,执行完后,在执行下面语句,就可以知道系统运行什么sql和多少次,其主要慢的语句是那些了。  

  
SELECT creation_time N ' 语句编译时间 '
,last_execution_time N
' 上次执行时间 '
,total_physical_reads N
' 物理读取总次数 '
,total_logical_reads
/ execution_count N ' 每次逻辑读次数 '
,total_logical_reads N
' 逻辑读取总次数 '
,total_logical_writes N
' 逻辑写入总次数 '
, execution_count N
' 执行次数 '
, total_worker_time
/ 1000 N ' 所用的CPU总时间ms '
, total_elapsed_time
/ 1000 N ' 总花费时间ms '
, (total_elapsed_time
/ execution_count) / 1000 N ' 平均时间ms '
,
SUBSTRING (st. text , (qs.statement_start_offset / 2 ) + 1 ,
((
CASE statement_end_offset
WHEN - 1 THEN DATALENGTH (st. text )
ELSE qs.statement_end_offset END
- qs.statement_start_offset) / 2 ) + 1 ) N ' 执行语句 '
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
where SUBSTRING (st. text , (qs.statement_start_offset / 2 ) + 1 ,
((
CASE statement_end_offset
WHEN - 1 THEN DATALENGTH (st. text )
ELSE qs.statement_end_offset END
- qs.statement_start_offset) / 2 ) + 1 ) not like ' %fetch% '
ORDER BY total_elapsed_time / execution_count DESC ;

你可能感兴趣的:(SQL Server)