[英]Measure application performance by aggregating SQL audit records
假設有一個包含兩列的簡單審計表(在生產中有更多列):
ID | Date
處理請求時,我們在此表中添加一條記錄。 請求分批處理,批處理中可以有任意數量的項目。 對於每個項目,我們將添加一條記錄。 批次之間將存在至少2秒的延遲(該數量是可配置的)。
性能是通過每單位時間(例如每秒)處理請求的速度來衡量的。 考慮這個示例數據(2個集群,項目數量相同,僅用於演示目的):
--2016-01-29 10:27:25.603
--2016-01-29 10:27:25.620
--2016-01-29 10:27:25.637
--2016-01-29 10:27:25.653
--2016-01-29 10:27:25.723
--Avg time between requests = 24ms
--2016-01-29 10:27:34.647
--2016-01-29 10:27:34.667
--2016-01-29 10:27:34.680
--2016-01-29 10:27:34.690
--2016-01-29 10:27:34.707
--Avg time = 12ms
我們可以說,在最壞的情況下,每秒可以處理41.67個請求,最多可以處理83.33個請求。 很高興知道平均批次性能。
題。 是否可以單獨使用T-SQL獲取這些指標以及如何使用?
編輯:要使結果具有統計顯着性,丟棄批次可能比小於10個項目(可配置)更有用。
也許我已經過度簡化了您的請求,但請考慮以下內容
Declare @YourTable table (ID int,Date datetime)
Insert Into @YourTable values
( 1,'2016-01-29 10:27:25.603'),
( 2,'2016-01-29 10:27:25.620'),
( 3,'2016-01-29 10:27:25.637'),
( 4,'2016-01-29 10:27:25.653'),
( 5,'2016-01-29 10:27:25.723'),
( 6,'2016-01-29 10:27:34.647'),
( 7,'2016-01-29 10:27:34.667'),
( 8,'2016-01-29 10:27:34.680'),
( 9,'2016-01-29 10:27:34.690'),
(10,'2016-01-29 10:27:34.707')
Declare @BatchSecondsGap int = 2 -- Seconds Between Batches
Declare @MinObservations int = 5 -- Batch must n or greater
;with cte as (
Select *,Cnt = sum(1) over (Partition By Batch)
From (
Select *,Batch = sum(Flg) over (Order By Date)
From (
Select ID,Date
,Flg = case when DateDiff(SECOND,Lag(Date,1,null) over (Order By Date),Date)>=@BatchSecondsGap then 1 else 0 end
,MS = case when DateDiff(SECOND,Lag(Date,1,Date) over (Order By Date),Date)>=@BatchSecondsGap then 0 else DateDiff(MILLISECOND,Lag(Date,1,Date) over (Order By Date),Date) end
From @YourTable
) A
) B
)
Select Title = 'Total'
,DateR1 = min(Date)
,DateR2 = max(Date)
,BatchCnt = count(Distinct Batch)
,TransCnt = count(*)
,MS_Ttl = sum(MS)
,MS_Avg = avg(MS*1.0)
,MS_Std = stdev(MS)
From cte
Where Cnt>=@MinObservations
Union All
Select Title = concat('Batch ',Batch)
,DateR1 = min(Date)
,DateR2 = max(Date)
,BatchCnt = count(Distinct Batch)
,TransCnt = count(*)
,MS_Ttl = sum(MS)
,MS_Avg = avg(MS*1.0)
,MS_Std = stdev(MS)
From cte
Where Cnt>=@MinObservations
Group By Batch
返回
下圖說明您不會因批次之間的時間而受到懲罰,因此它將成為最終結果的簡單聚合
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.