system.replicas 看什么
system.replicas 展示每个副本表的同步状态:是否只读、复制队列长度、延迟、活跃与总副本数。它是判断副本是否跟得上的第一站:is_readonly 为 1 或 queue_size 持续升高,说明同步出了问题,需要先排查协调服务与磁盘。
基本信息
| 关键列 | is_readonly、is_session_expired、queue_size、absolute_delay、active_replicas、total_replicas |
|---|---|
| 异常信号 | is_readonly = 1、absolute_delay 持续增大、active_replicas 小于 total_replicas |
| 处理手段 | SYSTEM RESTART REPLICA 重启副本、SYSTEM SYNC REPLICA 等待同步、检查协调服务与磁盘 |
| 适用引擎 | ReplicatedMergeTree 家族的副本表 |
| 配套查看 | 复制队列细节用 system.replication_queue,协调服务状态用对应的系统表 |
典型使用场景
- 巡检副本健康:确认没有节点处于只读状态
- 排查写入失败:逐项排除副本只读的原因
- 判断是否需要人工同步:用 SYSTEM SYNC REPLICA 等落后副本追上
- 定位延迟来源:看复制队列里堆积的是哪类任务
- 扩容副本或修复数据后确认状态恢复正常
巡检与处理
巡检与处理
-- 一次筛出所有异常副本
SELECT database, table, is_readonly, queue_size, absolute_delay,
active_replicas, total_replicas
FROM system.replicas
WHERE is_readonly OR absolute_delay > 10 OR active_replicas < total_replicas;
-- 查看复制队列里堆积了哪些任务
SELECT database, table, type, create_time, num_tries, last_exception
FROM system.replication_queue
ORDER BY create_time LIMIT 20;
-- 修复后等待某个表完成同步
SYSTEM SYNC REPLICA db.table;
-- 副本元数据异常时重启副本
SYSTEM RESTART REPLICA db.table;关键列读法
| 列 | 含义 | 正常 / 异常 |
|---|---|---|
| is_readonly | 副本是否处于只读 | 为 1 时写入会被直接拒绝 |
| is_session_expired | 与协调服务的会话是否失效 | 为 1 说明连接协调服务异常 |
| queue_size | 待执行的复制任务数 | 持续增长说明同步跟不上 |
| absolute_delay | 拉到队列头部任务的时间差 | 瞬时波动正常,持续增大才是问题 |
| active_replicas / total_replicas | 活跃与总副本数 | 前者小于后者说明有副本掉队 |
副本只读的常见原因有三类:协调服务不可用、磁盘写满或超出配额、复制队列积压。修复原因后只读状态通常会自行恢复,不需要手工改设置。
absolute_delay 反映的是拉到队列头部任务的时间差,瞬时抖动属于正常现象,判断要看趋势与持续时间;queue_size 长期不降才是真正需要介入的信号。