跳到主要内容
版本:Latest-3.3

Data Cache 可观测性

早期版本中 Data Cache 特性缺少相关监控指标和有效的监控手段。3.3 版本对 Data Cache 的可观测性做了提升,支持通过以下几种方式来观测 Data Cache 相关指标,帮助用户清晰了解 Data Cache 的整体磁盘和内存用量,以及详细的指标。

SQL 查询

通过 SQL 语句,可以查询集群中每个 BE 节点的 Data Cache 容量指标信息。

SHOW BACKENDS

DataCacheMetrics 字段记录了 Data Cache 的磁盘用量和内存用量。

mysql> show backends\G
*************************** 1. row ***************************
BackendId: 10004
IP: XXX.XX.XX.XXX
HeartbeatPort: 4450
BePort: 4448
HttpPort: 4449
BrpcPort: 4451
LastStartTime: 2023-12-13 20:09:30
LastHeartbeat: 2023-12-13 20:10:43
Alive: true
SystemDecommissioned: false
ClusterDecommissioned: false
TabletNum: 48
DataUsedCapacity: 0.000 B
AvailCapacity: 280.103 GB
TotalCapacity: 1.968 TB
UsedPct: 86.10 %
MaxDiskUsedPct: 86.10 %
ErrMsg:
Version: datacache-heartbeat-c68caf7
Status: {"lastSuccessReportTabletsTime":"2023-12-13 20:10:38"}
DataTotalCapacity: 280.103 GB
DataUsedPct: 0.00 %
CpuCores: 104
NumRunningQueries: 0
MemUsedPct: 0.00 %
CpuUsedPct: 0.0 %
DataCacheMetrics: Status: Normal, DiskUsage: 0.00GB/2.00GB, MemUsage: 0.00GB/30.46GB
1 row in set (1.90 sec)

information_schema

information_schema 下的 be_datacache_metrics 视图记录了 Data Cache 的内存和磁盘容量和用量信息。

mysql> select * from information_schema.be_datacache_metrics;
+-------+--------+------------------+-----------------+-----------------+----------------+-----------------+----------------------------------------------------------------------------------------------+
| BE_ID | STATUS | DISK_QUOTA_BYTES | DISK_USED_BYTES | MEM_QUOTA_BYTES | MEM_USED_BYTES | META_USED_BYTES | DIR_SPACES |
+-------+--------+------------------+-----------------+-----------------+----------------+-----------------+----------------------------------------------------------------------------------------------+
| 10004 | Normal | 2147483648 | 0 | 32706263420 | 0 | 0 | [{"Path":"/home/disk1/datacache","QuotaBytes":2147483648}] |
+-------+--------+------------------+-----------------+-----------------+----------------+-----------------+----------------------------------------------------------------------------------------------+
1 row in set (5.41 sec)
  • BE_ID:BE ID。
  • STATUS:BE 节点状态。
  • DISK_QUOTA_BYTES:用户配置的总磁盘缓存容量。
  • DISK_USED_BYTES:当前实际使用的磁盘缓存空间。
  • MEM_QUOTA_BYTES:用户配置的内存缓存容量。
  • MEM_USED_BYTES:当前实际使用的内存缓存空间。
  • META_USED_BYTES:系统元数据占用的内存空间。
  • DIR_SPACES:磁盘上的 cache 路径,以及对应的 cache 大小。

调用 API

自 v3.3.2 起,StarRocks 提供了两个 API 接口获取缓存指标,其反应的是系统不同层面的缓存状态:

  • /api/datacache/app_stat:查询真实的缓存命中率,计算公式为 远端读取数据量 / (远端读取数据量 + Data Cache 数据读取量)
  • /api/datacache/stat:Data Cache 的底层执行状态。该接口主要用于 Data Cache 的运维和性能问题定位,并不能反应查询的真实命中率,普通用户无需关注该接口。

获取缓存命中指标

通过访问以下 API 接口获取:

http://${BE_HOST}:${BE_HTTP_PORT}/api/datacache/app_stat

返回结果如下:

{
"hit_bytes": 4008,
"miss_bytes": 2004,
"hit_rate": 0.67,
"hit_bytes_last_minute": 4008,
"miss_bytes_last_minute": 2004,
"hit_rate_last_minute": 0.67
}
指标说明
hit_bytes从缓存中读取的字节数。
miss_bytes从远端读取的字节数。
hit_rate缓存命中率 (hit_bytes / (hit_bytes + miss_bytes))
hit_bytes_last_minute最近一分钟内从缓存中读取的字节数。
miss_bytes_last_minute最近一分钟内从远端读取的字节数。
hit_rate_last_minute最近一分钟内缓存命中率。

获取底层 Data Cache 详细指标

通过访问以下 API 接口,可获取该节点 Data Cache 更加详细的指标。

http://${BE_HOST}:${BE_HTTP_PORT}/api/datacache/stat

结果如下图所示:

img

指标说明

指标说明
statusData Cache 实例状态,当前主要有这几种:NORMAL: 正常。ABNORMAL: 实例运行不正常,无法进行正常缓存读写,需要查看日志定位。UPDATING: 更新中,比如在线扩缩容过程中会出现短暂的 updating 状态。
mem_quota_bytes用户配置的内存缓存容量。
mem_used_bytes当前实际使用的内存缓存空间。
mem_used_rate内存缓存使用率。
disk_quota_bytes用户配置的总磁盘缓存容量。
disk_used_bytes当前实际使用的磁盘缓存空间。
disk_used_rate磁盘缓存使用率。
disk_spaces用户配置的具体的磁盘缓存信息,包括各个缓存路径和大小。
meta_used_bytes缓存系统元数据占用的内存空间。
hit_count缓存命中次数。
miss_count缓存未命中次数。
hit_rate缓存命中率。
hit_bytes缓存命中字节数。
miss_bytes缓存未命中字节数。
hit_count_last_minute最近一分钟内缓存命中次数。
miss_count_last_minute最近一分钟内缓存未命中次数。
hit_bytes_last_minute最近一分钟内缓存命中字节数。
miss_bytes_last_minute最近一分钟内缓存未命中字节数。
buffer_item_count当前缓存的 Buffer 实例的数量。Buffer 实例指常见的数据缓存,例如我们从远端读取某个文件的部分原始数据,将其直接缓存到内存或者磁盘。
buffer_item_bytes当前缓存的 Buffer 实例所占字节数。
read_mem_bytes从内存缓存中读取的字节数。
read_disk_bytes从磁盘缓存中读取的字节数。
write_bytes总共写入缓存的字节数。
write_success_count写入成功的次数。
write_fail_count写入失败的次数。
remove_bytes删除的字节数。
remove_success_count删除成功的次数。
remove_fail_count删除失败的次数。
current_reading_count当前正在执行的读缓存操作数量。
current_writing_count当前正在执行的写缓存操作数量。
current_removing_count当前正在执行的删除缓存操作数量。