功能
INFORMATION_SCHEMA.LOGSERVICE_MEMORY_STAT 用于展示 集群中所有 LogService(MySQLClient 模式)的内存占用统计,包括 LogService 全局内存使用情况、单个 Replication Group(以下简称 RG)的内存占用,以及内存超限时的落盘缓存使用情况。视图同时暴露当前生效的内存配额、限流阈值和限流原因,便于诊断 MysqlClient 模式下消费链路的内存压力与下推阻塞问题。视图按行展示统计粒度,由
STAT_TYPE 列区分:GLOBAL:以 LogService 为单位的全局统计,每个 LogService 输出一行。RG:以 RG 为单位的统计,每个 LogService 下每个活跃 RG 输出一行。内存按 三个层次 分层统计,对应 MySQLClient 消费链路上消息流转的三个阶段:
BinlogHandler 层:解析 Binlog 后产生的消息所占用的内存。
ConflictDetector 层:等待按 commit_ts 排序合并的消息所占用的内存。
MysqlQueue 层:已分发到 MySQL 执行队列、待执行 SQL 的消息所占用的内存。
字段说明
字段名 | 类型 | 描述 |
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 与 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。 |
PER_RG_DISK_LIMIT_BYTES | BIGINT UNSIGNED | 单个 RG 的落盘缓存配额,单位为字节。仅 STAT_TYPE='GLOBAL' 时有效,否则为 NULL。 |
示例
查询某个 LogService 的全局内存使用情况:
tdsql > select * from information_schema.logservice_memory_stat where stat_type='GLOBAL'\\G*************************** 1. row ***************************STAT_TYPE: GLOBALSID: 1001RG_ID: NULLTOTAL_MEM_BYTES: 268435456BINLOG_HANDLER_MEM_BYTES: 33554432CONFLICT_DETECTOR_MEM_BYTES: 167772160MYSQL_QUEUE_MEM_BYTES: 67108864SOFT_LIMIT_BYTES: 1073741824HARD_LIMIT_BYTES: 2147483648PER_RG_LIMIT_BYTES: 104857600COMMIT_TS: NULLIS_MIN_TS_RG: NULLBLOCK_REASON: NULLFLUSH_DISK_WRITE_COUNT: 0FLUSH_DISK_WRITE_BYTES: 0FLUSH_DISK_READ_COUNT: 0FLUSH_DISK_READ_BYTES: 0FLUSH_DISK_ON_DISK_BYTES: 0DISK_SOFT_LIMIT_BYTES: 4294967296PER_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: 1001RG_ID: 8001TOTAL_MEM_BYTES: 104857600COMMIT_TS: 452937184905367553IS_MIN_TS_RG: 0BLOCK_REASON: per-RG quota exceeded*************************** 2. row ***************************SID: 1001RG_ID: 8005TOTAL_MEM_BYTES: 838860800COMMIT_TS: 452937184905431041IS_MIN_TS_RG: 0BLOCK_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)