商讯信箱
用户名: @
密  码:   注册|忘记密码
登录
个人用户经销商
您的位置:首页 > 技术频道 > 正文

分析SQL语句的性能

作者:liji0307  2006-08-24

  【IT168技术文档】

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

  SQL Profiler生成的表如下:

CREATE TABLE [dbo].[LijiDownload]( [RowNumber] [int] IDENTITY(0,1) 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,0,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,0,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,0,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


1
【内容导航】
第1页: 第1页
©版权所有。未经许可,不得转载。
[责任编辑:郑杰中]