Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

เข้าใจ Means และ Percentiles: คู่มือสำหรับผู้เริ่มต้น Performance Metrics

Performance Monitoring เป็น Important Part รัน Successful Application หนึ่งใน Basic Ways บอก Performance ของ Something คือ Measure Duration ทุกครั้งที่เกิด และ Distill Statistics จากมัน

Mean (ค่าเฉลี่ย)

Mean หรือ Average ของ Collection of Values Good Start ดู Something Behaves Good/Bad Calculated by Summing All Values Under Consideration แล้ว Divide by Number of Occurrences

ใน Ruby Calculate Mean Response Time เป็นแบบนี้:


Note: Example Cast Total Duration to Float สำหรับ Accurate Result When Dividing มิฉะนั้น Ruby Round Down Nearest Integer Return 4 แทน

Another Useful Statistic คือ Median แม้聽起來คล้ายกัน มี Difference Mean และ Median ของ Collection of Values

Median คือ Value Separating Upper Half ของ Set จาก Lower Half

Dataset Odd Number of Values Get Median by Sort Values Select Middle Number Even Number of Values After Sorting Median = Mean of Two Middle Numbers


Statistic นี้ Good Way ดู Huge Skew in Data หรือ Long Tail


Mean Durations ข้างบนจะเป็น 335.83 เพราะ Single Outlier 2000ms Median เพียง 3.5 Indicate Skew

Calculate Both Mean และ Median Dataset Figure Out Large Outliers หรือ Long Tail

The Problem with Mean (ปัญหาของ Mean)

Mean และ Median Good Indicators Performance แตไม่ Tell Whole Story Request Webpage 10 ครั้ง Mean อาจ Very Low แต Request หนึ่งหรือมากอาจ Take Very Long Complete

Image ด้านล่าง Show 99th (Blue) และ 90th (Green) Percentiles และ Mean (Red) Action ใดใน AppSignal เห็น 99th และ 90th Quite Far from Mean Spikes หมายถึง Average Customer Good Experience แต Once in a While User Wait Almost 2x Long Page Render Ideally Want All Values Close Together Consistent Experience All Users

เข้าใจ Means และ Percentiles: คู่มือสำหรับผู้เริ่มต้น Performance Metrics

Example Duration Set 10 Customers Request Page Duration 100ms - 1 Second:


Result Mean Just 190ms While One User Very Bad Experience 1 Second Response Time When Only Tracking Mean Easier Think Website Great Performance While Reality Every Once in a While User Terrible Experience

Example Above Only 10 Requests Imagine 1000 Requests/Day Means 100 Users Terrible Experience

Percentiles (เพอร์เซ็นไทล์)

ให้ Better Idea Distribution of Values ใช้ Percentiles Percentiles Similar Median - Number Signifies Point in Dataset Where Half Set Below Number Half Above Percentiles Similar Sense 20th Percentile Means 20% Numbers in Dataset Below That Number

Given Following (Sorted) Set:


อยากรู้ 20th Percentile Calculate: 10 Values in Set Wanted Value at Position 1 (20.0 / 100 * 10 - 1) Arrays Start at Zero Since Array Even Items Calculate Mean Between Index (2) และ Index + 1 (3) Result 150 for 20th Percentile

Naive Ruby Implementation:


Function percentile Look Similar median Calculation และ Actually median Same as 50th Percentile


AppSignal Uses Statistics Above Generate Performance Metrics App เรา Not Just Rely Mean/Average Calculate 90th และ 95th Percentiles Show Outliers Better Idea Distribution Requests ดูเพิ่ม Performance Tour Page

Oddities (ความแปลกประหลาด)

Because Way Percentiles และ Averages Calculated Sometimes Possible 90th Percentile Dip Below Mean Example Dataset:


Give mean 182.73 และ 90th Percentile Just 1

If Metric Collection System Only Show 90th Percentile และ Mean You'd Still Deduce Huge Outlier Somewhere Dataset If 90th Percentile Drops Below Average

👋 ถ้าชอบบทความนี้ เราเขียน Ruby (on Rails) Performance มากกว่านี้ Check Out Ruby Performance Monitoring Checklist

You are almost at 100% of this post

That's it for now! ในอีก Post เราจะพูด How Efficiently Store และ Calculate Percentiles All Customers' Requests Using Quantiles หากมี Questions/Remarks Statistics/APMs, Error Tracking หรือ Performance Monitoring Hit Us Up Twitter @AppSignal หรือ Email

เข้าใจ Means และ Percentiles: คู่มือสำหรับผู้เริ่มต้น Performance Metrics

Robert Beekman

As Co-founder Robert Wrote Very First Commit เขา Support Role-model Knows Tiny Details in Code Travels และ Photographs (Same Time)

บทความทั้งหมดโดย Robert Beekman