|
MSSQL DBA 精华总结[使用SQL脚本部署Windows性能监视器]
本帖最后由 Cherish_j_wang 于 2014-1-23 13:18 编辑
MSSQL DBA 精华总结
之使用SQL脚本部署Windows性能监视器(二)
目的
这一贴主要是使用SQL语句读取性能监视器抓取到的文件。前提:我的Demo是在性能监视器文件以bincirc格式抓取到的。
脚本
- set nocount on
- declare
- @local_server_name sysname
- ,@perfmon_data_file sysname
- ,@sql nvarchar(max)
- ;
- select
- @local_server_name = @@SERVERNAME
- ;
- ;WITH DATA
- AS(
- --shoud be init.
- select server_name = @@SERVERNAME,perfmon_data_file = 'D:\DBA\perfmon\7B023654B9674647A069069D3B854FC2\perfmon_data.tsv'
- union all
- select server_name = 'ZZZ',perfmon_data_file = 'D:\DBA\perfmon\45673654B96746123069069D3B854FC2\perfmon_data.tsv'
- )
- select top 1 @perfmon_data_file = perfmon_data_file
- from data
- where server_name = @local_server_name
- if object_id('tempdb..#temp','U') is not null
- drop table #temp
- create table #temp
- (
- id int identity(1,1) not null primary key
- ,data_list varchar(max)
- )
- /*
- SET @sql = N'
- ;WITH data
- AS (
- select c =
- cast(''<V><![CDATA['' + replace(
- replace(
- replace(
- cast(c as varchar(max)),CHAR(10),'']]></V><V><![CDATA[''
- ),'','','']]></V><V><![CDATA[''
- ),CHAR(13),'']]></V><V><![CDATA[''
- ) + '']]></V>''
- as xml)
- FROM OPENROWSET(BULK N''' + @perfmon_data_file + ''', SINGLE_BLOB) as T(c)
- )
- SELECT
- data_list = T.C.value(''(./text())[1]'',''varchar(max)'')
- FROM data as a
- CROSS APPLY C.nodes(''./V'') AS T(C)
- '
- */
- set
- @sql = N'
- exec sys.xp_cmdshell ''type ' + @perfmon_data_file + '''
- '
- ;
- --print @sql
- insert into #temp
- exec sys.sp_executesql @sql
- ;WITH point_time_set
- as(
- select
- point_time = left(data_list,PATINDEX('%" "%',data_list))
- ,data_list
- from #temp
- where data_list is not null
- and id > 2 --remove column titile
- )
- --select * from point_time_set
- ,ProcessorTime_set_pre
- as(
- select
- *
- ,new_data_list = replace(data_list,point_time,'')
- from point_time_set
- )
- --select * from ProcessorTime_set_pre
- ,ProcessorTime_set
- as(
- select
- Point_Time
- ,ProcessorTime = left(new_data_list,PATINDEX('%" "%',new_data_list))
- ,data_list
- from ProcessorTime_set_pre
- )
- --select * from ProcessorTime_set
- ,TransportMsgs_set_pre
- as(
- select
- *
- ,new_data_list = replace(data_list,Point_Time + ProcessorTime,'')
- from ProcessorTime_set
- )
- --select * from TransportMsgs_set_pre
- ,TransportMsgs_set
- as(
- select
- Point_Time
- ,ProcessorTime
- ,TransportMsgsPerSec = left(new_data_list,PATINDEX('%" "%',new_data_list))
- ,data_list
- from TransportMsgs_set_pre
- )
- --select * from TransportMsgs_set
- ,TransmissionQMsgs_set_pre
- as(
- select
- *
- ,new_data_list = replace(data_list,Point_Time + ProcessorTime + TransportMsgsPerSec,'')
- from TransportMsgs_set
- )
- --select * from TransmissionQMsgs_set_pre
- ,TransmissionQMsgs_set
- as(
- select
- Point_Time
- ,ProcessorTime
- ,TransportMsgsPerSec
- ,TransmissionQMsgsPerSec = left(new_data_list,PATINDEX('%" "%',new_data_list))
- ,data_list
- from TransmissionQMsgs_set_pre
- )
- --select * from TransmissionQMsgs_set
- ,DiskQueueLength_pre
- as(
- select *
- ,new_data_list = replace(data_list,Point_Time + ProcessorTime + TransportMsgsPerSec + TransmissionQMsgsPerSec,'')
- from TransmissionQMsgs_set
- )
- --select * from DiskQueueLength_pre
- ,DiskQueueLength
- as(
- select
- Point_Time
- ,ProcessorTime
- ,TransportMsgsPerSec
- ,TransmissionQMsgsPerSec
- ,DiskQueueLength = left(new_data_list,PATINDEX('%" "%',new_data_list))
- ,data_list
- from DiskQueueLength_pre
- )
- --select * from DiskQueueLength
- ,DiskReadBytes_pre
- as(
- select *
- ,new_data_list = replace(data_list,Point_Time + ProcessorTime + TransportMsgsPerSec + TransmissionQMsgsPerSec + DiskQueueLength,'')
- from DiskQueueLength
- )
- --select * from DiskReadBytes_pre
- ,DiskReadBytes
- as(
- select
- Point_Time
- ,ProcessorTime
- ,TransportMsgsPerSec
- ,TransmissionQMsgsPerSec
- ,DiskQueueLength
- ,DiskReadBytesPerSec = left(new_data_list,PATINDEX('%" "%',new_data_list))
- ,data_list
- from DiskReadBytes_pre
- )
- --select * from DiskReadBytes
- ,DiskWriteBytes_pre
- as(
- select *
- ,new_data_list = replace(data_list,Point_Time + ProcessorTime + TransportMsgsPerSec + TransmissionQMsgsPerSec + DiskQueueLength + DiskReadBytesPerSec,'')
- from DiskReadBytes
- )
- --select * from DiskReadBytes_pre
- ,DiskWriteBytes
- as(
- select
- Point_Time
- ,ProcessorTime
- ,TransportMsgsPerSec
- ,TransmissionQMsgsPerSec
- ,DiskQueueLength
- ,DiskReadBytesPerSec
- ,DiskWriteBytesPerSec = left(new_data_list,PATINDEX('%" "%',new_data_list))
- ,data_list
- from DiskWriteBytes_pre
- )
- --select * from DiskWriteBytes
- select
- Point_Time
- ,ProcessorTime
- ,TransportMsgsPerSec
- ,TransmissionQMsgsPerSec
- ,DiskQueueLength
- ,DiskReadBytesPerSec
- ,DiskWriteBytesPerSec
- ,BatchRequestsPerSec = reverse(left(reverse(data_list),PATINDEX('%" "%',reverse(data_list))))
- --replace(data_list,Point_Time + ProcessorTime + TransportMsgsPerSec + TransmissionQMsgsPerSec + DiskQueueLength + DiskReadBytesPerSec + DiskWriteBytesPerSec,'')
- from DiskWriteBytes
- --select * from BatchRequests_pre
复制代码 同样附上脚本附件。
read_data.sql
(4.79 KB, 下载次数: 30)
如此,数据有了以后,剩下的事情就是拿这些数据生成报表了,比如使用Excel就是简单方便的方法。
|
|