You need to enable JavaScript to run this app.
文档中心
数据库传输服务

数据库传输服务

复制全文
下载 pdf
故障排查
开启毫秒级延迟监控时为什么需要有心跳表
复制全文
下载 pdf
开启毫秒级延迟监控时为什么需要有心跳表
在创建数据同步或数据订阅任务并开启毫秒级延迟监控功能后,可能会因源端数据库账号不存在、心跳库不存在或心跳表不存在等情况,导致预检查不通过无法创建任务。本文介绍开启毫秒级延迟监控预检查不通过时的解决方案。​
背景信息​
由于数据库传输服务 DTS 在进行端到端的数据传输时,端到端全链路的延迟无法直接测量,必须借助时间锚点进行量化,而心跳表是提供这些精准时间锚点的唯一可靠载体,因此在进行数据库传输开启毫秒级延迟监控时,需要依赖心跳表。​
注意事项​
  • 当前仅支持在创建以下数据传输任务时开启毫秒级延迟监控:​
  • 同步:MySQL 同步至 MySQL、MongoDB 同步至 MongoDB、PostgreSQL 同步至 PostgreSQL。​
  • 订阅:PostgreSQL 订阅到 Kafka、PostgreSQL 订阅到 RocketMQ、AIDAP 订阅到 RocketMQ。​
  • 源端节点必须为读写节点:毫秒级延迟监控需要持续向源端的 _volc_dts 库写入心跳数据。若源端为只读节点,将因无法写入而导致预检查失败。若必须使用只读节点,请在配置任务时不开启毫秒级延迟监控。​
  • 源端账号权限要求:除基础数据读取权限外,账号还必须具备 REPLICATION SLAVE、REPLICATION CLIENT、SELECT、INSERT 和 UPDATE 权限,以确保能正常读写心跳库。​
解决方案​
报错类型一:权限不足​
​
MySQL 数据库类型
PostgreSQL 数据库类型
MongoDB 数据库类型
​
  1. 授予源端数据库账号具备创建库和表权限(推荐 SELECT、INSERT 和 UPDATE 权限)。关于如何为源端账号授权,请参见修改账号权限。​
  1. 连接源端实例。详细操作,请参见连接实例。确认源端实例中是否存在心跳库 _volc_dts 和心跳表 heartbeat。​
  1. 执行以下命令确认是否存在心跳库 _volc_dts。​
  • ​
    SHOW DATABASES LIKE '_volc_dts';​
    ​
  • 若存在心跳库,则需确认是否存在心跳表。​
  1. 请执行以下命令查询是否存在心跳表 heartbeat。​
  • ​
    USE _volc_dts;​
    SHOW TABLES LIKE 'heartbeat';​
    ​
  1. 若不存在心跳表,请执行以下命令创建心跳表。​
  • ​
    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​
    ) ENGINE=InnoDB ​
    COMMENT='E2E毫秒级延迟监控心跳表(Volc DTS专用)';​
    ​
  1. 执行以下命令,插入固定标识的心跳记录,首次初始化心跳表。​
  • ​
  • ​
    REPLACE INTO heartbeat (id, ts) VALUES ('heartbeat', NOW(3));​
    ​
  • 若不存在心跳库,则需创建心跳库和心跳表。​
  1. 执行以下命令,创建心跳库。​
  • ​
    CREATE DATABASE IF NOT EXISTS _volc_dts ​
    COMMENT 'E2E毫秒级延迟监控心跳库';​
    ​
  1. 执行以下命令,切换到心跳库。​
  • ​
    USE _volc_dts;​
    ​
  1. 执行以下命令创建心跳表。​
  • ​
    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​
    ) ENGINE=InnoDB ​
    COMMENT='E2E毫秒级延迟监控心跳表(Volc DTS专用)';​
    ​
  1. 执行以下命令,插入固定标识的心跳记录,首次初始化心跳表。​
  • ​
    REPLACE INTO heartbeat (id, ts) VALUES ('heartbeat', NOW(3));​
    ​
  • ​
​
报错类型二:没有心跳库​
​
MySQL 数据库类型
PostgreSQL 数据库类型
MongoDB 数据库类型
​
  1. 授予源端数据库账号具备创建库和表权限(推荐 SELECT、INSERT 和 UPDATE 权限)。关于如何为源端账号授权,请参见修改账号权限。​
  1. 连接源端实例。详细操作,请参见连接实例。​
  1. 执行以下命令,创建心跳库。​
  • ​
    CREATE DATABASE IF NOT EXISTS _volc_dts ​
    COMMENT 'E2E毫秒级延迟监控心跳库';​
    ​
  1. 执行以下命令,切换到心跳库。​
  • ​
    USE _volc_dts;​
    ​
  1. 执行以下命令创建心跳表。​
  • ​
    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​
    ) ENGINE=InnoDB ​
    COMMENT='E2E毫秒级延迟监控心跳表(Volc DTS专用)';​
    ​
  1. 执行以下命令,插入固定标识的心跳记录,首次初始化心跳表。​
  • ​
    REPLACE INTO heartbeat (id ts) VALUES ('heartbeat', NOW(3));​
    ​
  • ​
​
报错类型三:没有心跳表​
​
MySQL 数据库类型
PostgreSQL 数据库类型
MongoDB 数据库类型
​
  1. 授予源端数据库账号具备创建库表权限(推荐 SELECT、INSERT 和 UPDATE 权限)。关于如何为源端账号授权,请参见修改账号权限。​
  1. 连接源端实例。详细操作,请参见连接实例。​
  1. 执行以下命令,切换到心跳库。​
​
USE _volc_dts;​
​
  1. 执行以下命令创建心跳表。​
​
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​
) ENGINE=InnoDB ​
COMMENT='E2E毫秒级延迟监控心跳表(Volc DTS专用)';​
​
  1. 执行以下命令,插入固定标识的心跳记录,首次初始化心跳表。​
​
REPLACE INTO heartbeat (id, ts) VALUES ('heartbeat', NOW(3));​
​
​
报错类型四:Read only 相关报错​
​
MySQL 数据库类型
PostgreSQL 数据库类型
​
您可能遇到以下两种关于 Ready only 相关报错提示,如下所示:​
  • 报错类型一:read_only = ON 且账号无高权限​
  • 错误提示:发现[源/目标]库系统变量 read_only = ON,且用户无 SUPER 和 CONNECTION_ADMIN 权限,无法更新。​
  • 原因:实例已启用全局只读模式,且普通账号没有修改数据的权限。​
  • 解决方案:请使用高级权限账号连接源端实例,或关闭实例的全局只读模式,详细操作,请参见关闭全局只读。​
  • 报错类型二:其他只读变量为 ON​
  • 错误提示:发现[源/目标]库系统变量 [super_read_only/innodb_read_only/transaction_read_only/tx_read_only]= ON,无法更新。​
  • 原因:实例因运维保护、存储异常或会话设置等原因进入只读模式。​
  • 解决方案:​
  • 若为 super_read_only 或 read_only:使用高权限账号关闭只读模式。详细操作,请参见关闭全局只读。​
  • 若为 innodb_read_only:需检查磁盘权限或实例状态,通常需重启实例。详细操作,请参见重启实例。​
  • 若为会话级变量(如 transaction_read_only):重建连接实例即可。​
​
最近更新时间:2026.11.05 19:28:44
这个页面对您有帮助吗?
有用
有用
无用
无用