当前位置: 首页 > news >正文

TDengine 计算百分位函数使用手册

在这里插入图片描述

TDengine Percentile 函数使用手册

概述

TDengine 提供了两个百分位数计算函数:PERCENTILEAPERCENTILE。这两个函数用于在时序数据分析中计算指定百分位数值,是统计分析和性能监控中的重要工具。

函数介绍

PERCENTILE 函数

语法:

PERCENTILE(expr, p)

功能: 计算精确的百分位数值
参数:

  • expr: 数值表达式或列名
  • p: 百分位数,取值范围 [0, 100]

返回值: 双精度浮点数

APERCENTILE 函数

语法:

APERCENTILE(expr, p)

功能: 计算近似的百分位数值(性能更优)
参数:

  • expr: 数值表达式或列名
  • p: 百分位数,取值范围 [0, 100]

返回值: 双精度浮点数

需求来源

业务背景

  1. 性能监控需求

    • 系统响应时间分析
    • 网络延迟监控
    • 服务质量评估
  2. 数据质量评估

    • 异常值检测
    • 数据分布分析
    • 统计特征提取
  3. SLA 管理

    • 服务水平协议监控
    • 性能基准设定
    • 用户体验量化

技术需求

  • 大规模时序数据的快速百分位数计算
  • 实时监控场景下的低延迟查询
  • 历史数据的统计分析

使用场景

1. 系统性能监控

监控服务器 CPU 使用率的 95% 百分位数:

SELECT PERCENTILE(cpu_usage, 95) as cpu_p95
FROM system_metrics 
WHERE ts >= '2024-01-01 00:00:00' AND ts <= '2024-01-01 23:59:59';

2. 网络延迟分析

分析不同时间段的网络延迟分布:

SELECT INTERVAL(ts, 1h) as time_window,PERCENTILE(latency, 50) as p50,PERCENTILE(latency, 95) as p95,PERCENTILE(latency, 99) as p99
FROM network_metrics 
WHERE ts >= NOW - 24h
GROUP BY INTERVAL(ts, 1h);

3. 应用响应时间监控

监控 API 响应时间的多个百分位数:

SELECT api_name,APERCENTILE(response_time, 50) as median,APERCENTILE(response_time, 90) as p90,APERCENTILE(response_time, 95) as p95,APERCENTILE(response_time, 99) as p99
FROM api_metrics 
WHERE ts >= NOW - 1d
GROUP BY api_name;

4. IoT 传感器数据分析

分析传感器数据的分布特征:

SELECT device_id,PERCENTILE(temperature, 25) as q1,PERCENTILE(temperature, 50) as median,PERCENTILE(temperature, 75) as q3
FROM sensor_data 
WHERE ts >= NOW - 7d
GROUP BY device_id;

5. 异常检测

识别超出正常范围的数据点:

WITH percentiles AS (SELECT PERCENTILE(value, 5) as p5,PERCENTILE(value, 95) as p95FROM metrics WHERE ts >= NOW - 30d
)
SELECT ts, value
FROM metrics, percentiles
WHERE ts >= NOW - 1d AND (value < p5 OR value > p95);

性能对比

特性PERCENTILEAPERCENTILE
精度精确计算近似计算
性能较慢更快
内存使用较高较低
适用场景精确统计分析实时监控
数据量限制受内存限制更好的扩展性

最佳实践

1. 函数选择建议

  • 使用 PERCENTILE

    • 需要精确计算结果
    • 数据量相对较小
    • 离线分析场景
  • 使用 APERCENTILE

    • 实时监控场景
    • 大数据量计算
    • 性能要求较高

2. 性能优化

-- 使用超级表和标签进行分组查询
SELECT location,APERCENTILE(cpu_usage, 95) as cpu_p95
FROM system_metrics 
WHERE ts >= NOW - 1h
GROUP BY location;-- 利用时间窗口减少计算量
SELECT INTERVAL(ts, 10m) as time_window,APERCENTILE(response_time, 99) as p99
FROM api_metrics 
WHERE ts >= NOW - 2h
GROUP BY INTERVAL(ts, 10m);

3. 常用百分位数含义

  • P50 (中位数):50% 的数据小于此值
  • P90:90% 的数据小于此值,常用于性能监控
  • P95:95% 的数据小于此值,SLA 常用指标
  • P99:99% 的数据小于此值,识别极端情况

注意事项

  1. 数据类型:只能对数值类型数据计算百分位数
  2. NULL 值处理:自动忽略 NULL 值
  3. 参数范围:百分位数参数 p 必须在 [0, 100] 范围内
  4. 内存限制:PERCENTILE 函数受可用内存限制
  5. 精度差异:APERCENTILE 结果可能与 PERCENTILE 略有差异

示例代码

综合监控仪表板

-- 系统综合性能监控
SELECT ts,AVG(cpu_usage) as avg_cpu,APERCENTILE(cpu_usage, 95) as cpu_p95,AVG(memory_usage) as avg_memory,APERCENTILE(memory_usage, 95) as memory_p95,AVG(disk_io) as avg_disk_io,APERCENTILE(disk_io, 99) as disk_io_p99
FROM system_metrics 
WHERE ts >= NOW - 1h
INTERVAL(ts, 5m);

API 性能分析报告

-- 生成 API 性能报告
SELECT api_name,COUNT(*) as request_count,AVG(response_time) as avg_response_time,PERCENTILE(response_time, 50) as p50,PERCENTILE(response_time, 90) as p90,PERCENTILE(response_time, 95) as p95,PERCENTILE(response_time, 99) as p99,MAX(response_time) as max_response_time
FROM api_logs 
WHERE ts >= NOW - 24hAND status_code = 200
GROUP BY api_name
ORDER BY p95 DESC;

总结

TDengine 的 PERCENTILE 和 APERCENTILE 函数为时序数据分析提供了强大的统计计算能力。根据具体的业务需求和性能要求,选择合适的函数可以有效提升数据分析的效率和准确性。在实际应用中,建议结合业务场景和数据特点,灵活运用这两个函数来构建完整的监控和分析体系。

http://www.lryc.cn/news/595994.html

相关文章:

  • 【LINUX】Centos 9使用nmcli更改IP
  • 【SpringAI实战】实现仿DeepSeek页面对话机器人
  • 基于FastMCP创建MCP服务器的小白级教程
  • libgmp库(GNU高精度算术库)介绍
  • Elasticsearch 学习笔记
  • Doxygen生成接口文档
  • Hadoop调度器深度解析:FairScheduler与CapacityScheduler的优化策略
  • 运维实战:100条常用SQL语句,涵盖基础查询、数据操作、表管理、索引视图、连接查询、子查询、日期处理、字符串操作等核心操作,建议收藏!
  • Android常用的adb和logcat命令
  • DOM/事件高级
  • ZooKeeper学习专栏(六):集群模式部署与解析
  • Java中内存屏障在volatile和sychronized的应用
  • Apache Ignite 中乐观事务(OPTIMISTIC Transactions)的工作机制
  • 【Go语言-Day 23】接口的进阶之道:空接口、类型断言与 Type Switch 详解
  • TTL+日志的MDC实现简易链路追踪
  • 【从0-1的JavaScript】第2篇:JS对象的创建、使用已经内置对象
  • 操作系统 —— A / 概述
  • API网关原理与使用场景详解
  • Android AppCompat:实现Material Design向后兼容的终极指南
  • Apache Ignite扫描查询
  • 快手视觉算法面试30问全景精解
  • 2025 年非关系型数据库全面指南:类型、优势
  • Apache Ignite缓存基本操作
  • [Dify] -进阶10- Dify 的用户输入结构:变量、参数、文件上传全解析
  • 如何撤销Git提交误操作
  • 【音视频协议篇】RTMP协议
  • haproxy的负载均衡集群搭建
  • 构建智能视频中枢--多路RTSP转RTMP推送模块在轨道交通与工业应用中的技术方案探究
  • 最新AI与Python在地球科学多源数据交叉融合中的前沿技术应用
  • linux用户态各定时器抖动测试