TDSQL Boundless LOGSERVICE_MEMORY_STAT

INFORMATION_SCHEMA.LOGSERVICE_MEMORY_STAT 用于展示集群中所有 LogService(MySQLClient 模式)的内存占用统计,包括 LogService 全局内存使用情况、单个 Replication Group(以下简称 RG)的内存占用,以及内存超限时的落盘缓存使用情况。视图同时暴露当前生效的内存配额、限流阈值和限流原因,便于诊断 MySQLClient 模式下消费链。

相关产品
TDSQL Boundless 产品页,含版本规格、价格与购买入口。

一、功能

视图按行展示统计粒度,由 STAT_TYPE 列区分:

·GLOBAL:以 LogService 为单位的全局统计,每个 LogService 输出一行。

·RG:以 RG 为单位的统计,每个 LogService 下每个活跃 RG 输出一行。

内存按 三个层次 分层统计,对应 MySQLClient 消费链路上消息流转的三个阶段:

·BinlogHandler 层:解析 Binlog 后产生的消息所占用的内存。

·ConflictDetector 层:等待按 commit_ts 排序合并的消息所占用的内存。

·MysqlQueue 层:已分发到 MySQL 执行队列、待执行 SQL 的消息所占用的内存。

二、支持版本

适用于 TDSQL Boundless V21.6.3.0 及以上版本。

各版本变更如下:

·V21.6.3.0:首次引入 LOGSERVICE_MEMORY_STAT 视图。

·V21.6.4.0:新增 disk_soft_limit_bytes、per_rg_disk_limit_bytes 列,用于展示磁盘软限制与每 RG 磁盘限制配置。

三、字段说明

字段名 类型 描述
STAT_TYPE VARCHAR(16) 统计粒度。取值为 GLOBAL(LogService 全局统计)或 RG(单个 RG 统计)。
SID BIGINT UNSIGNED LogService 实例编号。
RG_ID BIGINT UNSIGNED Replication Group 编号。STAT_TYPE='RG' 时有效;STAT_TYPE='GLOBAL' 时为 NULL。
TOTAL_MEM_BYTES BIGINT UNSIGNED 当前已使用的内存总量,单位为字节。STAT_TYPE='GLOBAL' 时为整个 LogService 的总占用,STAT_TYPE='RG' 时为该 RG 在三层中的占用之和。
BINLOG_HANDLER_MEM_BYTES BIGINT UNSIGNED BinlogHandler 层的内存占用,单位为字节。
CONFLICT_DETECTOR_MEM_BYTES BIGINT UNSIGNED ConflictDetector 层的内存占用,单位为字节。
MYSQL_QUEUE_MEM_BYTES BIGINT UNSIGNED MysqlQueue 层的内存占用,单位为字节。
SOFT_LIMIT_BYTES BIGINT UNSIGNED LogService 全局内存软限制,单位为字节。占用达到该值时,非全局最小 commit_ts 的 RG 触发限流。仅 STAT_TYPE='GLOBAL' 时有效,否则为 NULL。该值由系统变量 binlog_mysqlclient_cache_max_size 控制。
HARD_LIMIT_BYTES BIGINT UNSIGNED LogService 全局内存硬上限,单位为字节。超过该值时输出告警日志,但仍允许全局最小 commit_ts 的 RG 继续分配,避免下推链路卡住。仅 STAT_TYPE='GLOBAL' 时有效,否则为 NULL。该值由系统变量 binlog_mysqlclient_cache_hard_limit_ratio_percent 与 SOFT_LIMIT_BYTES 共同决定。
PER_RG_LIMIT_BYTES BIGINT UNSIGNED 单个 RG 的内存配额,单位为字节。仅 STAT_TYPE='GLOBAL' 时有效,否则为 NULL。该值由系统变量 log_service_per_rg_mem_limit 控制。
COMMIT_TS BIGINT UNSIGNED RG 当前的提交时间戳。仅 STAT_TYPE='RG' 时有效,否则为 NULL。
IS_MIN_TS_RG SMALLINT 是否为当前 LogService 内全局最小 commit_ts 的 RG。1 表示是,0 表示否。最小 commit_ts 的 RG 在内存超限时可以继续分配内存,避免阻塞全局下推。仅 STAT_TYPE='RG' 时有效,否则为 NULL。
BLOCK_REASON VARCHAR(256) RG 当前被限流的原因描述。空字符串或 NULL 表示未被限流。仅 STAT_TYPE='RG' 时有效。
FLUSH_DISK_WRITE_COUNT BIGINT UNSIGNED 内存数据落盘的累计次数。
FLUSH_DISK_WRITE_BYTES BIGINT UNSIGNED 内存数据落盘的累计字节数。
FLUSH_DISK_READ_COUNT BIGINT UNSIGNED 从落盘缓存读回内存的累计次数。
FLUSH_DISK_READ_BYTES BIGINT UNSIGNED 从落盘缓存读回内存的累计字节数。
FLUSH_DISK_ON_DISK_BYTES BIGINT UNSIGNED 当前仍驻留在落盘缓存中的数据量估算值,单位为字节。等于 FLUSH_DISK_WRITE_BYTES – FLUSH_DISK_READ_BYTES,下限为0。
DISK_SOFT_LIMIT_BYTES BIGINT UNSIGNED 落盘缓存的全局软限制,单位为字节。仅 STAT_TYPE='GLOBAL' 时有效,否则为 NULL。该值由系统变量 log_service_flush_disk_max_bytes 控制。
PER_RG_DISK_LIMIT_BYTES BIGINT UNSIGNED 单个 RG 的落盘缓存配额,单位为字节。仅 STAT_TYPE='GLOBAL' 时有效,否则为 NULL。该值由系统变量 log_service_per_rg_disk_limit 控制。

四、示例

查询某个 LogService 的全局内存使用情况:

tdsql > SELECT * FROM information_schema.logservice_memory_stat WHERE stat_type='GLOBAL'\\G*************************** 1. row *************************** STAT_TYPE: GLOBAL SID: 1001 RG_ID: NULL TOTAL_MEM_BYTES: 268435456 BINLOG_HANDLER_MEM_BYTES: 33554432CONFLICT_DETECTOR_MEM_BYTES: 167772160 MYSQL_QUEUE_MEM_BYTES: 67108864 SOFT_LIMIT_BYTES: 1073741824 HARD_LIMIT_BYTES: 2147483648 PER_RG_LIMIT_BYTES: 104857600 COMMIT_TS: NULL IS_MIN_TS_RG: NULL BLOCK_REASON: NULL FLUSH_DISK_WRITE_COUNT: 0 FLUSH_DISK_WRITE_BYTES: 0 FLUSH_DISK_READ_COUNT: 0 FLUSH_DISK_READ_BYTES: 0 FLUSH_DISK_ON_DISK_BYTES: 0 DISK_SOFT_LIMIT_BYTES: 4294967296 PER_RG_DISK_LIMIT_BYTES: 5368709121 row in set (0.00 sec)

查询发生限流的 RG,定位下推阻塞原因:

tdsql > SELECT sid, rg_id, total_mem_bytes, commit_ts, is_min_ts_rg, block_reason -> FROM information_schema.logservice_memory_stat -> WHERE stat_type='RG' AND block_reason IS NOT null AND block_reason <> ''\\G*************************** 1. row *************************** SID: 1001 RG_ID: 8001 TOTAL_MEM_BYTES: 104857600 COMMIT_TS: 452937184905367553 IS_MIN_TS_RG: 0 BLOCK_REASON: per-RG quota exceeded*************************** 2. row *************************** SID: 1001 RG_ID: 8005 TOTAL_MEM_BYTES: 838860800 COMMIT_TS: 452937184905431041 IS_MIN_TS_RG: 0 BLOCK_REASON: Global memory exceeded soft limit2 rows in set (0.00 sec)

按内存占用查询 Top 5 的 RG:

tdsql > SELECT sid, rg_id, total_mem_bytes, commit_ts, is_min_ts_rg -> FROM information_schema.logservice_memory_stat -> WHERE stat_type='RG' -> ORDER BY total_mem_bytes DESC LIMIT 5;+——+——-+—————–+——————–+————–+| SID | RG_ID | TOTAL_MEM_BYTES | COMMIT_TS | IS_MIN_TS_RG |+——+——-+—————–+——————–+————–+| 1001 | 8005 | 838860800 | 452937184905431041 | 0 || 1001 | 8003 | 419430400 | 452937184905298945 | 1 || 1001 | 8001 | 104857600 | 452937184905367553 | 0 || 1001 | 8002 | 62914560 | 452937184905312257 | 0 || 1001 | 8004 | 20971520 | 452937184905384961 | 0 |+——+——-+—————–+——————–+————–+5 rows in set (0.00 sec)

赞 (0)
上一篇 4天前
下一篇 4天前