分析SQL语句的性能

由于要分析SQL Profiler捕获的SQL 语句的性能,需要找出执行频率高,用时长的语句。

  SQL Profiler生成的表如下:

  
  
CREATE TABLE [dbo].[LijiDownload]( [RowNumber] [ int ] IDENTITY( , ) NOT NULL, [EventClass] [ int ] NULL, [TextData] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [ApplicationName] [nvarchar]( 128 ) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [NTUserName] [nvarchar]( 128 ) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [LoginName] [nvarchar]( 128 ) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [CPU] [ int ] NULL, [Reads] [bigint] NULL, [Writes] [bigint] NULL, [Duration] [bigint] NULL, [ClientProcessID] [ int ] NULL, [SPID] [ int ] NULL, [StartTime] [datetime] NULL, [BinaryData] [image] NULL, [sumIndex] [ int ] NULL, --- 为了分析加入的 PRIMARY KEY CLUSTERED ( [RowNumber] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

  由于Text类型的数据不能比较和做Group等运算。所以引入sumIndex列来识别相同的TextData值。

  生成sumIndex列的数据:

  
  
update LijiDownload set sumIndex = checkSum(substring(TextData, , 500 ))

  500 :可以指定为捕获的SQL 语句的最大长度。

  找出使用频率最高的前10条语句:

  
  
select top 10 sumIndex,count(sumIndex) as usedMuch into #temp from LijiDownload group by sumIndex order by usedMuch desc select distinct t.usedMuch,substring(L.TextData, , 500 as TextData from #temp t inner join LijiDownload L on t.sumIndex = L.sumIndex order by t.usedmuch desc

  找出总用时最高的前10条语句

  
  
select distinct substring(L.TextData, , 500 as TextData,b.TotalDuration from LijiDownload L inner join (select top 10 sum(Duration) as TotalDuration,sumIndex from LijiDownload where eventclass = 41 -- 类型为SQL语句 group by sumIndex order by TotalDuration desc) b on L.sumIndex = b.sumIndex order by b.TotalDuration desc


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值