- 文档首页
数据库传输服务
常见问题
故障排查
开启毫秒级延迟监控时为什么需要有心跳表
开启毫秒级延迟监控时为什么需要有心跳表
在创建数据同步或数据订阅任务并开启毫秒级延迟监控功能后,可能会因源端数据库账号不存在、心跳库不存在或心跳表不存在等情况,导致预检查不通过无法创建任务。本文介绍开启毫秒级延迟监控预检查不通过时的解决方案。
由于数据库传输服务 DTS 在进行端到端的数据传输时,端到端全链路的延迟无法直接测量,必须借助时间锚点进行量化,而心跳表是提供这些精准时间锚点的唯一可靠载体,因此在进行数据库传输开启毫秒级延迟监控时,需要依赖心跳表。
当前仅支持在创建以下数据传输任务时开启毫秒级延迟监控:
- 同步:MySQL 同步至 MySQL、MongoDB 同步至 MongoDB
- 订阅:PostgreSQL 订阅到 Kafka、PostgreSQL 订阅到 RocketMQ、AIDAP 订阅到 RocketMQ
MySQL 数据库类型
PostgreSQL 数据库类型
MongoDB 数据库类型
- 授予源端数据库账号具备创建库和表权限(推荐 SELECT、INSERT 和 UPDATE 权限)。关于如何为源端账号授权,请参见修改账号权限。
- 连接源端实例。详细操作,请参见连接实例。确认源端实例中是否存在心跳库 _volc_dts 和心跳表 heartbeat。
- 执行以下命令确认是否存在心跳库 _volc_dts。
SHOW DATABASES LIKE '_volc_dts';
- 请执行以下命令查询是否存在心跳表 heartbeat。
SHOW TABLES LIKE 'heartbeat';
CREATE TABLE IF NOT EXISTS heartbeat (
id VARCHAR(64) NOT NULL COMMENT '固定心跳标识,主键',
ts DATETIME(3) NOT NULL COMMENT '毫秒级时间戳(DATETIME(3)保留3位毫秒)',
status TINYINT NOT NULL DEFAULT 1 COMMENT '心跳状态:1=正常,0=异常',
PRIMARY KEY (id) USING BTREE
COMMENT='E2E毫秒级延迟监控心跳表(Volc DTS专用)';
- 执行以下命令,插入固定标识的心跳记录,首次初始化心跳表。
REPLACE INTO heartbeat (id, ts) VALUES ('heartbeat', NOW(3));
CREATE DATABASE IF NOT EXISTS _volc_dts
COMMENT 'E2E毫秒级延迟监控心跳库';
CREATE TABLE IF NOT EXISTS heartbeat (
id VARCHAR(64) NOT NULL COMMENT '固定心跳标识,主键',
ts DATETIME(3) NOT NULL COMMENT '毫秒级时间戳(DATETIME(3)保留3位毫秒)',
status TINYINT NOT NULL DEFAULT 1 COMMENT '心跳状态:1=正常,0=异常',
PRIMARY KEY (id) USING BTREE
COMMENT='E2E毫秒级延迟监控心跳表(Volc DTS专用)';
- 执行以下命令,插入固定标识的心跳记录,首次初始化心跳表。
REPLACE INTO heartbeat (id, ts) VALUES ('heartbeat', NOW(3));
- 授予源端数据库账号具备创建库和表权限(推荐 SELECT、INSERT 和 UPDATE 权限)。关于如何为源端账号授权,请参见修改账号权限。
- 连接源端实例。详细操作,请参见连接实例。确认源端实例中是否存在心跳 Schema _volc_dts 和心跳表 heartbeat。
WHERE nspname = '_volc_dts'
- 请执行以下命令查询是否存在心跳表 heartbeat。
FROM pg_tables WHERE schemaname = '_volc_dts' AND tablename = 'heartbeat';
CREATE TABLE IF NOT EXISTS _volc_dts.heartbeat (
heartbeat_ts bigint NOT NULL
- 若不存在心跳 Schema,则需创建心跳 Schema 和心跳表。
- 若源端实例中不存在心跳库,则需执行以下命令,创建心跳 Schema。
CREATE SCHEMA IF NOT EXISTS _volc_dts;
CREATE TABLE IF NOT EXISTS _volc_dts.heartbeat (
heartbeat_ts bigint NOT NULL
- 授予源端数据库账号具备创建库和表权限(推荐超级管理员账号或者 readWriteAnyDatabase 角色)。关于如何为源端账号授权,请参见修改账号权限。
- 连接源端实例。详细操作,请参见连接实例。确认源端实例中是否存在心跳库 _volc_dts 和心跳集合 heartbeat。
- 请执行以下命令查询是否存在心跳集合 heartbeat。
show collections like "heartbeat";
- 若不存在心跳集合,请执行以下命令,创建心跳集合。
db.createCollection("heartbeat")
- 若源端实例中不存在心跳库,则需执行以下命令,切换到心跳库
use _volc_dts; // 仅逻辑切换,写入数据后库才会实际创建
db.createCollection("heartbeat")
MySQL 数据库类型
PostgreSQL 数据库类型
MongoDB 数据库类型
- 授予源端数据库账号具备创建库和表权限(推荐 SELECT、INSERT 和 UPDATE 权限)。关于如何为源端账号授权,请参见修改账号权限。
CREATE DATABASE IF NOT EXISTS _volc_dts
COMMENT 'E2E毫秒级延迟监控心跳库';
CREATE TABLE IF NOT EXISTS heartbeat (
id VARCHAR(64) NOT NULL COMMENT '固定心跳标识,主键',
ts DATETIME(3) NOT NULL COMMENT '毫秒级时间戳(DATETIME(3)保留3位毫秒)',
status TINYINT NOT NULL DEFAULT 1 COMMENT '心跳状态:1=正常,0=异常',
PRIMARY KEY (id) USING BTREE
COMMENT='E2E毫秒级延迟监控心跳表(Volc DTS专用)';
- 执行以下命令,插入固定标识的心跳记录,首次初始化心跳表。
REPLACE INTO heartbeat (id ts) VALUES ('heartbeat', NOW(3));
- 授予源端数据库账号具备创建库和表权限(推荐 SELECT、INSERT 和 UPDATE 权限)。关于如何为源端账号授权,请参见修改账号权限。
CREATE SCHEMA IF NOT EXISTS _volc_dts;
CREATE TABLE IF NOT EXISTS _volc_dts.heartbeat (
heartbeat_ts bigint NOT NULL
- 授予源端数据库账号具备创建库和表权限(推荐超级管理员账号或者 readWriteAnyDatabase 角色)。关于如何为源端账号授权,请参见修改账号权限。
use _volc_dts; // 仅逻辑切换,创建表才会实际创建
db.createCollection("heartbeat")
MySQL 数据库类型
PostgreSQL 数据库类型
MongoDB 数据库类型
- 授予源端数据库账号具备创建库表权限(推荐 SELECT、INSERT 和 UPDATE 权限)。关于如何为源端账号授权,请参见修改账号权限。
CREATE TABLE IF NOT EXISTS heartbeat (
id VARCHAR(64) NOT NULL COMMENT '固定心跳标识,主键',
ts DATETIME(3) NOT NULL COMMENT '毫秒级时间戳(DATETIME(3)保留3位毫秒)',
status TINYINT NOT NULL DEFAULT 1 COMMENT '心跳状态:1=正常,0=异常',
PRIMARY KEY (id) USING BTREE
COMMENT='E2E毫秒级延迟监控心跳表(Volc DTS专用)';
- 执行以下命令,插入固定标识的心跳记录,首次初始化心跳表。
REPLACE INTO heartbeat (id, ts) VALUES ('heartbeat', NOW(3));
- 授予源端数据库账号具备创建表权限(推荐 SELECT、INSERT 和 UPDATE 权限)。关于如何为源端账号授权,请参见修改账号权限。
CREATE TABLE IF NOT EXISTS _volc_dts.heartbeat (
heartbeat_ts bigint NOT NULL
- 授予源端数据库账号具备创建表权限(推荐超级管理员账号或者 readWriteAnyDatabase 角色)。关于如何为源端账号授权,请参见修改账号权限。
db.createCollection("heartbeat")
MySQL 数据库类型
PostgreSQL 数据库类型
您可能遇到以下两种关于 Ready only 相关报错提示,如下所示:
- 报错类型一:read_only = ON 且账号无高权限
- 错误提示:发现[源/目标]库系统变量 read_only = ON,且用户无 SUPER 和 CONNECTION_ADMIN 权限,无法更新。
- 原因:实例已启用全局只读模式,且普通账号没有修改数据的权限。
- 解决方案:请使用高级权限账号连接源端实例,或关闭实例的全局只读模式,详细操作,请参见关闭全局只读。
- 错误提示:发现[源/目标]库系统变量 [super_read_only/innodb_read_only/transaction_read_only/tx_read_only]= ON,无法更新。
- 原因:实例因运维保护、存储异常或会话设置等原因进入只读模式。
- 若为 super_read_only 或 read_only:使用高权限账号关闭只读模式。详细操作,请参见关闭全局只读。
- 若为 innodb_read_only:需检查磁盘权限或实例状态,通常需重启实例。详细操作,请参见重启实例。
- 若为会话级变量(如 transaction_read_only):重建连接实例即可。
- 错误提示:发现[源/目标]库系统变量 default_transaction_read_only = ON,无法更新。
- 解决方案:关闭实例的全局只读模式,详细操作,请参见关闭全局只读。
最近更新时间:2026.08.06 16:18:03