我在 New Relic 表中的数据如下:
id | 时间戳 | 状态 |
---|---|---|
A | 2024-12-01 11:36:00 | 开始处理步骤1 |
B | 2024-12-01 11:37:00 | 开始处理步骤1 |
B | 2024-12-01 11:38:00 | 开始处理步骤2 |
A | 2024-12-01 12:01:00 | 开始处理步骤2 |
C | 2024-12-01 12:36:00 | 开始处理步骤1 |
C | 2024-12-01 12:41:00 | 开始处理步骤2 |
B | 2024-12-01 13:36:00 | 开始处理步骤3 |
A | 2024-12-01 13:46:00 | 开始处理步骤3 |
C | 2024-12-01 13:56:00 | 开始处理步骤3 |
处理时间定义为从最后一步(步骤3)到第一步(步骤1)所经过的时间。
我想找到所有进程 ID 的平均处理时间
因此,对于进程 A,它将是
2024-12-01 13:46:00 - 2024-12-01 11:36:00 = 2:10
,并且对进程 B 和 C 进行类似的计算。现在我正在寻找这些处理时间的平均值。
如何在 NewRelic 中实现这一点?
过程的持续时间可以计算为 max(time)-min(time)。 然后按所有进程的持续时间进行分组并计算平均值。
参见示例(针对 SQL Server)
id | 时间戳 | 状态 |
---|---|---|
A | 2024-12-01 11:36:00.000 | 开始处理步骤1 |
B | 2024-12-01 11:37:00.000 | 开始处理步骤1 |
B | 2024-12-01 11:38:00.000 | 开始处理步骤2 |
A | 2024-12-01 12:01:00.000 | 开始处理步骤2 |
C | 2024-12-01 12:36:00.000 | 开始处理步骤1 |
C | 2024-12-01 12:41:00.000 | 开始处理步骤2 |
B | 2024-12-01 13:36:00.000 | 开始处理步骤3 |
A | 2024-12-01 13:46:00.000 | 开始处理步骤3 |
C | 2024-12-01 13:56:00.000 | 开始处理步骤3 |
select id,min(timestamp) fromtime,max(timestamp) totime
,max(timestamp)-min(timestamp) duration
from test
group by id
Putput - 每个进程的持续时间
id | 来自时间 | 到时候 | 持续时间 |
---|---|---|---|
A | 2024-12-01 11:36:00.000 | 2024-12-01 13:46:00.000 | 1900-01-01 02:10:00.000 |
B | 2024-12-01 11:37:00.000 | 2024-12-01 13:36:00.000 | 1900-01-01 01:59:00.000 |
C | 2024-12-01 12:36:00.000 | 2024-12-01 13:56:00.000 | 1900-01-01 01:20:00.000 |
select count(*) cnt
,cast(cast(avg(cast(duration as float)) as datetime) as time) as avgduration
from(
select id,min(timestamp) fromtime,max(timestamp) totime
,max(timestamp)-min(timestamp) duration
from test
group by id
)x
cnt | 平均持续时间 |
---|---|
3 | 01:49:40.0000000 |