数据缓存可观测性
在早期版本中,没有丰富的指标或有效的方法来监控 Data Cache 的性能、使用情况和健康状况。
在 v3.3 中,StarRocks 通过提供有效的监控方法和更多指标,提高了 Data Cache 的可观测性。用户现在可以检查数据缓存的总体磁盘和内存使用情况,以及相关指标,从而加强对缓存使用情况的监控。
注意
从 v3.4.0 版本开始,针对外部 Catalog 和云原生表(在共享数据集群中)的查询使用统一的 Data Cache 实例。因此,除非另有说明,以下方法默认显示 Data Cache 实例本身的指标,其中包括针对外部 Catalog 和云原生表的查询的缓存使用情况。
SQL 命令
您可以运行 SQL 命令来查看每个 BE 节点上 Data Cache 的容量和使用情况。
SHOW BACKENDS
DataCacheMetrics
字段记录了特定 BE 上 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 IDSTATUS
: BE 状态DISK_QUOTA_BYTES
: 用户配置的磁盘缓存容量,以字节为单位DISK_USED_BYTES
: 已使用的磁盘缓存空间,以字节为单位MEM_QUOTA_BYTES
: 用户配置的内存缓存容量,以字节为单位MEM_USED_BYTES
: 已使用的内存缓存空间,以字节为单位META_USED_BYTES
: 用于缓存元数据的空间DIR_SPACES
: 缓存路径及其缓存大小
API 调用
自 v3.3.2 起,StarRocks 提供了两个 API 来获取缓存指标,这些指标反映了不同级别的缓存状态
/api/datacache/app_stat
: 查询的实际缓存命中率,计算方式为Remote Read Bytes / (Remote Read Bytes + Data Cache Read Bytes)
。/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": 0.67, "hit_bytes_last_minute": 4008,
"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
下图显示了返回的指标。
指标描述
指标 | 描述 |
---|---|
status | Data Cache 实例的状态,包括:NORMAL :实例正常运行。ABNORMAL :数据无法读写到缓存中。必须使用日志找到问题。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 | 当前正在进行的缓存删除次数。 |