Quantcast
Channel: Windows Performance Toolkit (WPT) v5 forum
Viewing all articles
Browse latest Browse all 275

How to calculate avg seconds/read using Win32_PerfRawData_PerfDisk_LogicalDisk

$
0
0

Hi,

Below calculation (in SQL) formula is in BOLD does not produce the same average seconds/read as the Windows Performance Monitor. Both were set to the same sampling interval.

Performance monitor reports 0.330. Below SQL code reports 0.

Any assistance would be appreciated.

Thanks in advance.

AvgDisksecPerRead is a 805438464 counter type.

((N1 - N0) / F) / (D1 - D0), where the numerator (N) represents the number of ticks counted during the last sample interval, F represents the frequency of the ticks, and the denominator (D) represents the number of operations completed during the last sample interval.

Below SQL can be run in SSMS:

DECLARE @WmiSl int, @WmiS int, @CO int, @Counter varchar(255),

@res decimal(30,3), @timeDelta decimal(30,3), @readsDelta decimal(30,3),

@AvgDisksecPerReadnvarchar(30),@AvgDisksecPerRead_Basenvarchar(30),
@TimeStamp_Sys100NSnvarchar(30),@Frequency_Perftimenvarchar(30),@TimeStamp_PerfTime nvarchar(30),

@AvgDisksecPerRead2nvarchar(30),@AvgDisksecPerRead_Base2nvarchar(30),
@TimeStamp_Sys100NS2nvarchar(30),@Frequency_Perftime2nvarchar(30),@TimeStamp_PerfTime2 nvarchar(30)

SET @Counter = 'Win32_PerfRawData_PerfDisk_LogicalDisk.Name=''C:'''
SET @TimeStamp_PerfTime2 = '0'

WHILE (1!=0)
BEGIN

EXEC [sys].[sp_OACreate] 'WbemScripting.SWbemLocator', @WmiSl OUTPUT, 5
EXEC [sys].[sp_OAMethod] @WmiSl, 'ConnectServer', @WmiS OUTPUT, '.', 'root\cimv2'
IF ISNULL(@WmiS, -1) <= 0
 BEGIN
  EXEC [sys].[sp_OADestroy] @WmiSl
  RAISERROR('ERROR, could not access the WMI service.', 16, 1)
  RETURN
 END

EXEC [sys].[sp_OAMethod] @WmiS, 'Get', @CO OUTPUT, @Counter

EXEC [sys].[sp_OAGetProperty] @CO, 'AvgDisksecPerRead', @AvgDisksecPerReadOUTPUT
EXEC [sys].[sp_OAGetProperty] @CO, 'AvgDisksecPerRead_Base',@AvgDisksecPerRead_BaseOUTPUT
EXEC [sys].[sp_OAGetProperty] @CO, 'TimeStamp_Sys100NS',@TimeStamp_Sys100NSOUTPUT
EXEC [sys].[sp_OAGetProperty] @CO, 'Frequency_Perftime',@Frequency_PerftimeOUTPUT
EXEC [sys].[sp_OAGetProperty] @CO, 'TimeStamp_PerfTime',@TimeStamp_PerfTimeOUTPUT

EXEC [sys].[sp_OADestroy] @CO
EXEC [sys].[sp_OADestroy] @WmiS
EXEC [sys].[sp_OADestroy] @WmiSl

if (@TimeStamp_PerfTime2 != '0') 
begin
SET @timeDelta  = cast(@TimeStamp_PerfTime AS decimal(30,3)) - cast(@TimeStamp_PerfTime2 AS decimal(30,3));
SET @readsDelta = cast(@AvgDisksecPerRead  AS decimal(30,3)) - cast(@AvgDisksecPerRead2  AS decimal(30,3));

if (@readsDelta > 0) 
begin
SET @res = ((@timeDelta / cast(@Frequency_Perftime AS decimal(30,3))) * 1000.0) / @readsDelta;
PRINT @res;
PRINT @timeDelta;
PRINT @readsDelta;
end

end

PRINT@AvgDisksecPerRead  + ' base ' +@AvgDisksecPerRead_Base  + ' time ' + @TimeStamp_PerfTime  + ' freq ' + @Frequency_Perftime  + ' time100 ' + @TimeStamp_Sys100NS  + ' '; 
PRINT@AvgDisksecPerRead2 + ' base ' +@AvgDisksecPerRead_Base2 + ' time ' + @TimeStamp_PerfTime2 + ' freq ' + @Frequency_Perftime2 + ' time100 ' + @TimeStamp_Sys100NS2 + ' '; 
PRINT''

SET@AvgDisksecPerRead2= @AvgDisksecPerRead;
SET@AvgDisksecPerRead_Base2= @AvgDisksecPerRead_Base;
SET@TimeStamp_PerfTime2= @TimeStamp_PerfTime;
SET@Frequency_Perftime2= @Frequency_Perftime;
SET @TimeStamp_Sys100NS2= @TimeStamp_Sys100NS;

WAITFOR DELAY '00:00:5';

END


Viewing all articles
Browse latest Browse all 275

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>