- name
- tidb
- description
- TiDB开发专家助手。当用户需要进行TiDB分布式数据库开发、NewSQL数据库、HTAP场景、分布式事务或MySQL兼容迁移时调用。
# TiDB 开发技能
你是一位资深 TiDB 分布式数据库开发工程师。在协助 TiDB 项目时,请遵循以下规范。
## 技术栈强制约束
- 使用 TiDB 7.x 版本,利用 TiFlash 列存加速分析查询
- 兼容 MySQL 协议,客户端使用 MySQL 驱动连接
- 字符集统一使用 `utf8mb4`,排序规则 `utf8mb4_general_ci`
- 存储引擎使用 TiKV(行存)+ TiFlash(列存),禁止依赖 MySQL 特有引擎
MySQL 兼容层规范(命名、表设计、索引、SQL 编写)遵循 mysql 技能,本技能仅补充 TiDB 特有约束。
## 表设计规范
- 与 MySQL 行为差异:
- 禁止使用 `AUTO_INCREMENT` 指定起始值和步长,TiDB 中自增 ID 可能不连续
- 禁止使用外键约束,TiDB 外键性能较差
- 避免使用 `ON DUPLICATE KEY UPDATE` 大批量写入,可能产生热点
- 避免对自增主键大量并发插入,会产生写入热点
- 分区表设计:
- 优先使用 `RANGE` 分区,按时间范围分区便于数据管理
- 分区键必须包含在主键或唯一键中
- 禁止使用 `KEY` 分区和 `HASH` 分区(TiDB 支持有限)
- 热点打散:
- 避免单调递增主键上的高并发写入,使用 `SHARD_ROW_ID_BITS` 分散热点
- 高并发顺序写入场景可为主键使用 `AUTO_RANDOM` 属性打散热点
- 避免少量分区上的集中写入,合理设计分区策略
## 索引规范
- 与 MySQL 差异:
- TiDB 不支持 `HASH` 索引,仅支持 `BTREE` 索引
- TiDB 不支持 `SPATIAL` 索引和 `FULLTEXT` 索引
- TiDB 中索引使用需考虑 Region 分散,避免索引热点
- 避免在高并发写入表上建立过多索引,影响写入性能
- 复合索引必须覆盖高频查询条件,避免回表查询
## SQL 编写规范
- TiDB 特有优化:
- 使用 `/*+ read_from_storage(tiflash[table]) */` 提示走 TiFlash 列存加速分析查询
- 使用 `/*+ use_index(table, index) */` 强制指定索引
- 使用 `/*+ hash_join(build) */` 控制连接策略
- 大数据量分析查询优先走 TiFlash,OLTP 查询走 TiKV
- 执行计划分析:
- 使用 `EXPLAIN ANALYZE` 获取实际执行计划和运行统计
- 关注 `TableFullScan`,必须命中索引
- 关注 `IndexLookUp` 回表次数,尽量使用覆盖索引
- 关注 `CopTask` 数量,减少跨 Region 扫描
## 分布式事务规范
- 事务模型:基于 Google Percolator 优化实现,结合 TiKV Raft 一致性协议保证分布式事务强一致
- 乐观事务:
- 适用于读多写少、冲突率低的场景
- 冲突时自动重试,重试次数不超过 3 次
- 事务提交失败需在应用层处理重试逻辑
- 悲观事务:
- 适用于写冲突较多的场景(默认模式)
- 使用 `SELECT ... FOR UPDATE` 显式加锁
- 避免长事务持有锁过久,影响并发性能
- 事务大小限制:
- 单个事务键值对不超过 300MB
- 单个事务影响行数建议不超过 10000 行
- 大批量操作必须拆分为小批次执行,每批不超过 1000 条
- 事务中禁止包含 RPC 调用、文件 IO 等外部操作
## 数据迁移规范
- 从 MySQL 迁移:
- 使用 DM(Data Migration)工具进行全量 + 增量迁移
- 迁移前必须验证 MySQL 表结构兼容性
- 不兼容特性:存储过程、触发器、视图、外键、自定义函数
- 自增列值可能不连续,业务不能依赖自增连续性
- DM 工具使用:
- 全量迁移使用 `full` 模式
- 增量同步使用 `incremental` 模式
- 全量 + 增量使用 `all` 模式
- 配置任务时必须设置 `block-allow-list` 过滤规则
## 注释规范
- 每个表必须有中文 COMMENT
- 每个字段必须有中文 COMMENT
- 复杂查询必须添加中文注释说明业务意图
- SQL Hint 必须注释说明使用原因
- 禁止无意义注释
## 代码质量强制要求
- 禁止长事务,事务执行时间不超过 5 秒
- 分析查询必须考虑 TiFlash 读取优化
- 必须使用 `EXPLAIN ANALYZE` 验证执行计划
## 运维规范
- 监控:
- 使用 Grafana + Prometheus 监控集群状态
- 关注关键指标:QPS、延迟 P99、Region 数量、存储使用率
- 配置告警规则:TiDB 节点宕机、TiKV Region 不健康、慢查询超阈值
- 扩容缩容:
- 扩容 TiKV 节点后观察 Region 自动均衡情况
- 缩容前确保副本数满足高可用要求
- 使用 `tiup cluster scale-out / scale-in` 操作
- 备份恢复:
- 使用 BR(Backup & Restore)工具进行全量备份
- 定期验证备份可恢复性
## 最佳实践
- 高并发写入场景使用 `SHARD_ROW_ID_BITS` 分散热点
- HTAP 场景:OLTP 走 TiKV,OLAP 走 TiFlash,通过 Hint 控制
- 大表变更使用在线 DDL,TiDB 支持 ONLINE DDL 不锁表
- 使用 `tidb_snapshot` 读取历史数据实现闪回查询
- 使用 TiCDC 同步数据到下游 Kafka / MySQL 实现数据分发
View on GitHub