ARMS支援通過分位元統計指標資料,本文介紹ARMS分位元指標的計算原理。
背景介紹
分位元是將一組資料按照大小順序分成若干等份的數值點,用來表示資料的分布情況。常見的分位元包括:
P50代表中位元,即將資料分為兩等份的數值點。
P75表示資料中排在前75%的數值點。
P90表示資料中排在前90%的數值點。
P99表示資料中排在前99%的數值點。
通過分位元可以更直觀地瞭解資料的分布情況,以及資料中的極端值和離群值。
樣本說明
樣本樣本:[2, 3, 6, 7, 8, 9, 10, 12, 14, 15, 16, 17, 18, 20]
對應的分位元分別為:
P50: 10
P75: 16
P90: 18
P99: 20
分位元指標樣本
新版控制台
開啟分位元統計功能的操作請參見Java應用自訂配置。
舊版控制台
開啟分位元統計功能的操作請參見自訂配置。
ARMS探針分位元計算原理
4.x及以上版本探針基於分桶的方式來計算耗時分位元,目前預設的分桶邊界為:
[0.0, 5.0, 10.0, 25.0, 50.0, 75.0, 100.0, 250.0, 500.0, 750.0, 1000.0, 2500.0, 5000.0, 7500.0, 10000.0]。
對應的分桶耗時區間為:
桶0:(-∞, 0.0]
桶1:(0.0, 5.0]
桶2:(5.0, 10.0]
桶3:(10.0, 25.0]
桶4:(25.0,50.0]
桶5:(50.0,75.0]
桶6:(75.0,100.0]
桶7:(100.0,250.0]
桶8:(250.0,500.0]
桶9:(500.0,750.0]
桶10:(750.0,1000.0]
桶11:(1000.0,2500.0]
桶12:(2500.0,5000.0]
桶13:(5000.0,7500.0]
桶14:(7500.0,10000.0]
桶15:(10000.0, +∞]
下面結合樣本說明中的樣本說明ARMS計算分位元的原理。
針對每一個樣本點,確定該樣本點對應的分桶,並對對應的分貯體計數器計數加1,得到如下結果:
桶0:0
桶1:2
桶2:5
桶3:7
桶4:0
桶5:0
桶6:0
桶7:0
桶8:0
桶9:0
桶10:0
桶11:0
桶12:0
桶13:0
桶14:0
桶15:0
計算分位元。
以計算P75為例。
先根據需要計算的分位元計算分桶表。
P75即需要保證75%的資料在左邊,共有14個樣本資料,14*0.75 = 10.5,需要找到一個分桶,該分桶的資料和該分桶左邊的資料加起來需要有11個樣本,所以找到桶3。
按照線性插值的方法計算最終分位元。
桶0 + 桶1 + 桶2已經有7個資料點了,所以在桶3中僅需要找4個資料點,桶3中總共有7個資料點,再結合桶3的區間
(10.0, 25.0]
。所以最終P75 = 10.0 + (25.0-10.0)* 4 / 7 = 18.6。
分位元優缺點分析
優點:開銷極小,無需儲存全量樣本資料即可計算任意分位元。
缺點:在耗時極小、耗時極大、樣本數很少等情境下,分位元存在計算不準確的情況。
ARMS調用鏈分析分位元計算原理
調用鏈分析中分位元是以滿足頁面過濾條件的所有Span的耗時為樣本資料,並調用Log Service的SQLFunction Compute得到,詳情請參見函數概覽中估算函數的approx_percentile函數說明。