gpt4 book ai didi

sql - 通过聚合 SQL 审计记录来衡量应用程序性能

转载 作者:行者123 更新时间:2023-12-04 12:46:55 24 4
gpt4 key购买 nike

假设有一个简单的审计表,有两列(在生产中有更多的列):

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

退货

enter image description here

下图说明你不会因为批次之间的时间受到惩罚,所以它变成了最终结果的简单聚合

enter image description here

关于sql - 通过聚合 SQL 审计记录来衡量应用程序性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41190208/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com