TDengine 运维命令 SCAN 使用手册

SCAN 命令使用手册

概述

SCAN 是 TDengine 在 3.3.8.0 及以后版本中新增的数据库维护命令,用于扫描数据库或特定 VGroup,检查数据完整性、索引状态等健康状况。扫描过程中发现的异常会记录到系统日志中,便于数据库运维和故障排查。


命令语法

1. 扫描整个数据库

sql 复制代码
SCAN DATABASE db_name [START WITH time_point] [END WITH time_point];

参数说明:

  • db_name: 要扫描的数据库名称
  • START WITH: (可选)扫描起始时间点
  • END WITH: (可选)扫描结束时间点

时间点格式:

  • 整数时间戳:1234567890
  • 字符串时间:'2024-12-01 00:00:00'
  • TIMESTAMP 字符串:TIMESTAMP '2024-12-01 00:00:00'

示例:

sql 复制代码
-- 扫描整个数据库
SCAN DATABASE mydb;

-- 扫描指定时间范围
SCAN DATABASE mydb START WITH '2024-12-01 00:00:00' END WITH '2024-12-02 00:00:00';

-- 使用时间戳
SCAN DATABASE mydb START WITH 1701388800000 END WITH 1701475200000;

2. 扫描指定 VGroups

sql 复制代码
SCAN [db_name] VGROUPS IN (vgroup_id_list) [START WITH time_point] [END WITH time_point];

参数说明:

  • db_name: (可选)数据库名称,如果省略则使用当前数据库
  • vgroup_id_list: VGroup ID 列表,用逗号分隔
  • START WITHEND WITH: 时间范围(可选)

示例:

sql 复制代码
-- 扫描指定 VGroups
SCAN VGROUPS IN (1, 2, 3);

-- 指定数据库和 VGroups
SCAN mydb VGROUPS IN (5, 10, 15);

-- 指定时间范围的 VGroup 扫描
SCAN mydb VGROUPS IN (1, 2) START WITH '2024-12-01' END WITH '2024-12-02';

查看扫描任务

1. 查看所有扫描任务

sql 复制代码
SHOW SCANS;

返回信息:

  • 扫描任务 ID
  • 数据库名称
  • 扫描状态(运行中/已完成/失败)
  • 开始时间
  • 进度信息

示例输出:

复制代码
scan_id | database | status    | start_time          | progress
--------|----------|-----------|---------------------|----------
1       | mydb     | running   | 2024-12-02 10:00:00 | 45%
2       | testdb   | completed | 2024-12-02 09:00:00 | 100%

2. 查看扫描任务详情

sql 复制代码
SHOW SCAN scan_id;

参数说明:

  • scan_id: 扫描任务的 ID

示例:

sql 复制代码
SHOW SCAN 1;

返回详细信息:

  • 扫描的具体范围
  • 已扫描的数据量
  • 发现的问题数量
  • 错误详情(如有)

停止扫描任务

sql 复制代码
KILL SCAN scan_id;

参数说明:

  • scan_id: 要停止的扫描任务 ID

示例:

sql 复制代码
KILL SCAN 1;

扫描检查项

SCAN 命令会检查以下内容:

数据完整性

  • 数据文件 CRC 校验
  • 数据块完整性验证
  • 时间戳顺序检查

元数据一致性

  • 超级表与子表的对应关系
  • 标签数据完整性
  • Schema 版本一致性

索引状态

  • 索引文件完整性
  • 索引与数据的对应关系

VGroup 信息

  • VGroup 分片信息
  • 副本同步状态

错误日志

扫描过程中发现的错误会记录到:

  1. 系统日志文件

    • 路径:/var/log/taos/taosd.log(默认位置)
    • 错误级别:ERROR 或 WARNING
  2. 通过命令查看

    sql 复制代码
    SHOW SCAN scan_id;  -- 查看特定任务的错误详情

典型错误类型

数据文件损坏

复制代码
Error:  blockDataCheck failed! line:

元数据不一致

复制代码
Error: Super table metadata mismatch for table xxx

时间序列错误

复制代码
Error: Timestamp out of order in table xxx

索引异常

复制代码
Error: Index file corrupted for table xxx

使用场景

1. 定期健康检查

sql 复制代码
-- 每周扫描一次数据库
SCAN DATABASE production;

2. 故障排查

sql 复制代码
-- 检查特定时间段的数据
SCAN DATABASE mydb START WITH '2024-12-01' END WITH '2024-12-02';

3. 性能优化前检查

sql 复制代码
-- 扫描特定 VGroups
SCAN VGROUPS IN (1, 2, 3, 4, 5);

4. 数据迁移后验证

sql 复制代码
-- 全库扫描验证
SCAN DATABASE migrated_db;
SHOW SCANS;

最佳实践

  1. 避免高峰期扫描

    • 在业务低峰期执行扫描任务
    • 避免影响正常业务查询性能
  2. 分批扫描大型数据库

    sql 复制代码
    -- 分时间段扫描
    SCAN DATABASE bigdb START WITH '2024-01-01' END WITH '2024-01-31';
    SCAN DATABASE bigdb START WITH '2024-02-01' END WITH '2024-02-28';
  3. 监控扫描进度

    sql 复制代码
    -- 定期查看扫描状态
    SHOW SCANS;
  4. 保存扫描日志

    • 定期备份 taosd.log
    • 建立告警机制,发现错误及时处理
  5. 针对性扫描

    sql 复制代码
    -- 仅扫描可能有问题的 VGroups
    SCAN VGROUPS IN (10, 11, 12);

权限要求

执行 SCAN 命令需要:

  • 数据库的 ALTER 权限或更高权限
  • root 用户或数据库管理员权限

注意事项

⚠️ 重要提示:

  1. 扫描是一个资源密集型操作,可能影响数据库性能
  2. 扫描任务可以被中断(使用 KILL SCAN)
  3. 扫描不会修改数据,仅进行检查
  4. 建议在非业务高峰期执行
  5. 对于大型数据库,建议使用时间范围限制扫描范围

相关命令

  • COMPACT DATABASE: 数据库压缩整理
  • TRIM DATABASE: 清理数据库
  • SHOW VGROUPS: 查看 VGroup 信息
  • SHOW TRANSACTIONS: 查看事务状态

故障处理流程

是 否 执行 SCAN SHOW SCANS 查看进度 发现错误? 查看错误详情 扫描完成 分析日志 执行修复操作 重新扫描验证


如有问题或需要技术支持,请查阅 TDengine 官方文档或联系技术支持团队。

关于 TDengine

TDengine 专为物联网IoT平台、工业大数据平台设计。其中,TDengine TSDB 是一款高性能、分布式的时序数据库(Time Series Database),同时它还带有内建的缓存、流式计算、数据订阅等系统功能;TDengine IDMP 是一款AI原生工业数据管理平台,它通过树状层次结构建立数据目录,对数据进行标准化、情景化,并通过 AI 提供实时分析、可视化、事件管理与报警等功能。

相关推荐
B站计算机毕业设计之家1 小时前
机器学习:python智能电商推荐平台 大数据 spark(Django后端+Vue3前端+协同过滤 毕业设计/实战 源码)✅
大数据·python·spark·django·推荐算法·电商
上海云盾-小余1 小时前
系统漏洞扫描原理,什么是系统漏洞?
运维·安全·网络安全·ddos
JaHeng07231 小时前
nginx的https搭建
运维·nginx·https
dishugj1 小时前
Linux系统磁盘性能相关命令详解与实例分析
linux·运维·服务器
mn_kw1 小时前
Spark Shuffle 深度解析与参数详解
大数据·分布式·spark
Mintopia1 小时前
🚀 Supabase:强力的服务端助手
数据库·架构·全栈
6***A6631 小时前
SQL 插入数据详解
服务器·数据库·sql
星一工作室1 小时前
STM32项目分享:基于单片机的智能宠物笼舍设计及实现
stm32·单片机·嵌入式硬件·物联网·智能家居·宠物
有味道的男人1 小时前
Jumia API
服务器·数据库·microsoft