WEB开发网
开发学院数据库MSSQL Server SQL Server性能调教系列(4)--Profiler(下) 阅读

SQL Server性能调教系列(4)--Profiler(下)

 2010-09-27 00:00:00 来源:WEB开发网   
核心提示:3.分析跟踪记录在跟踪了一段时间之后,在文件中就会保存有跟踪的数据(包括IO,SQL Server性能调教系列(4)--Profiler(下),Duration,CPU,容易操作,会聚合一部分数据,但是长度不太好取值,Reads,Writes

3.分析跟踪记录

在跟踪了一段时间之后,在文件中就会保存有跟踪的数据(包括IO,Duration,CPU,Reads,Writes,RowCounts等计数器),接下来就是把跟踪的数据加载到表并分析这些数据。可以选择在Profile中打开并检查这些跟踪数据,会有些限制,如不能完成太多的操作,大量重复的SQL语句,没有汇总。

3.1 加载数据到表(使用函数fn_trace_gettable返回表格形式的数据,作为范例只选择分析T-SQL代码和Duration查询的运行时间)

select CAST(textdata as nvarchar(max)) as tsql_code,duration 
into Workload 
from sys.fn_trace_gettable('C:\test\performancetrace_20100802.trc',NULL) as TT

3.2 汇总相同的SQL项

select tsql_code,SUM(duration) as total_duration from workload group by tsql_code

(由于我是在Production上面做的trace,考虑到系统的安全性,在此不便透露分析的SQL代码,实在很抱歉,各位朋友如有兴趣可在自己的测试环境中测试,讨论测试的结果)

问题:分组聚合后会看到逻辑上相同(参数不同)的查询会被分到不同的组,因为在筛选器中使用了不同的值。因为这些相同逻辑的SQL会使用相同的执行计划,应该聚合在一起才能准备的分析总的查询运行的时间。

3.3 问题处理方案一(大致分段截取)

通常情况下SQL语句都是Select+栏位,左边有很大一部分是相同的,根据SQL字符的长度,截取前一段来聚合。如取前50,100,150. 方法简单,容易操作,会聚合一部分数据,但是长度不太好取值,只能调整前缀的长度去测试。

select left(tsql_code,50) as t_sql,SUM(duration) as total_duration from workload group by left(tsql_code,50) 
 
--or 
 
select left(tsql_code,100) as t_sql,SUM(duration) as total_duration from workload group by left(tsql_code,100) 
 
--or 
 
select left(tsql_code,150) as t_sql,SUM(duration) as total_duration from workload group by left(tsql_code,150)

1 2 3 4 5  下一页

Tags:SQL Server 性能

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接