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

本文深入探讨如何使用Profiler分析SQL Server性能,包括将跟踪数据加载到表中进行汇总,处理逻辑相同但参数不同的SQL聚合问题,以及通过模式化查询优化性能。通过T-SQL和CLR实现函数,简化复杂SQL签名,最终实现更精准的性能调优。
摘要由CSDN通过智能技术生成

接上篇:

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

 

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)

 

3.4 问题处理方案二(复杂,精确,逻辑上相同的SQL,参数用通配符替代),这个方法是T-SQL查询技术内幕中介绍的方法,如果需要更加详细的说明,请阅读这本书,你会得到更多的启发。

(1) 模式化查询,它对于相同模式的查询是一样的。

  • T-SQL函数实现

 建立函数:

CREATE FUNCTION [dbo].[fn_SQLSigTSQL] 
  (@p1 NTEXT, @parselength INT = 4000)
RETURNS NVARCHAR(4000)

-- This function will replace the parameters with '#'
-- This function is provided "AS IS" with no warranties,
-- and confers no rights. 
-
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值