Fork me on GitHub

NewSQL 系列(下篇)- 执行框架与实战指南

NewSQL 系列(下篇)- 执行框架与实战指南

目录

  1. 分布式执行框架
  2. 1.1 执行计划生成
  3. 1.2 算子下推优化
  4. 1.3 并行执行机制
  5. 最佳实践与运维
  6. 2.1 部署最佳实践
  7. 2.2 性能优化指南
  8. 2.3 监控与告警
  9. 2.4 故障排查手册
  10. 应用场景与案例
  11. 3.1 典型应用场景
  12. 3.2 性能对比测试
  13. 3.3 迁移指南

1. 分布式执行框架

TiDB 的分布式执行框架负责将 SQL 查询转换为高效的分布式执行计划,并在集群中并行执行。

1.1 执行计划生成

查询处理流程

┌──────────────────────────────────────────────────────────────┐
│                    SQL 查询处理流程                          │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│   ┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐ │
│   │  SQL    │───▶│  解析   │───▶│  逻辑   │───▶│  物理   │ │
│   │  Query  │    │  Parser │    │  计划   │    │  计划   │ │
│   └─────────┘    └─────────┘    └─────────┘    └─────────┘ │
│       │              │              │              │        │
│       │              │              │              │        │
│       ▼              ▼              ▼              ▼        │
│   SELECT          AST 树        逻辑算子       物理算子      │
│   FROM            语法检查      关系代数       执行策略      │
│   WHERE                           │              │        │
│                                 │              │        │
│                                 ▼              ▼        │
│                          ┌─────────────────────────┐     │
│                          │      优化器 (Optimizer)   │     │
│                          │  ┌───────────────────┐  │     │
│                          │  │  规则优化 (RBO)    │  │     │
│                          │  │  • 谓词下推        │  │     │
│                          │  │  • 列裁剪         │  │     │
│                          │  │  • 子查询展开      │  │     │
│                          │  └───────────────────┘  │     │
│                          │  ┌───────────────────┐  │     │
│                          │  │  成本优化 (CBO)    │  │     │
│                          │  │  • 统计信息        │  │     │
│                          │  │  • 成本模型        │  │     │
│                          │  │  • 执行计划选择    │  │     │
│                          │  └───────────────────┘  │     │
│                          └─────────────────────────┘     │
│                                         │                 │
│                                         ▼                 │
│                                  ┌─────────────┐         │
│                                  │ 执行计划     │         │
│                                  └─────────────┘         │
│                                                              │
└──────────────────────────────────────────────────────────────┘

执行计划树

┌──────────────────────────────────────────────────────────────┐
│                    执行计划树示例                            │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│   SQL:                                                       │
│   SELECT u.name, COUNT(o.id) as order_count                  │
│   FROM users u                                               │
│   JOIN orders o ON u.id = o.user_id                          │
│   WHERE u.age > 25                                           │
│   GROUP BY u.name                                            │
│   HAVING order_count > 5                                     │
│   ORDER BY order_count DESC                                  │
│   LIMIT 10                                                   │
│                                                              │
│   执行计划树:                                                │
│                                                              │
│                        ┌───────────┐                        │
│                        │   Limit   │  10                    │
│                        └─────┬─────┘                        │
│                              │                               │
│                        ┌─────▼─────┐                        │
│                        │   Sort    │  order_count DESC      │
│                        └─────┬─────┘                        │
│                              │                               │
│                        ┌─────▼─────┐                        │
│                        │ Selection │  order_count > 5       │
│                        └─────┬─────┘                        │
│                              │                               │
│                        ┌─────▼─────┐                        │
│                        │ HashAgg   │  GROUP BY u.name       │
│                        └─────┬─────┘                        │
│                              │                               │
│                        ┌─────▼─────┐                        │
│                        │ HashJoin  │  u.id = o.user_id      │
│                       ╱             ╲                       │
│                      ╱               ╲                      │
│                ┌─────▼─────┐   ┌─────▼─────┐               │
│                │ Selection │   │ TableScan │               │
│                │ u.age>25  │   │  orders   │               │
│                └─────┬─────┘   └───────────┘               │
│                      │                                       │
│                ┌─────▼─────┐                                │
│                │ TableScan │                                │
│                │   users   │                                │
│                └───────────┘                                │
│                                                              │
└──────────────────────────────────────────────────────────────┘

查看执行计划

-- 查看执行计划
EXPLAIN SELECT * FROM users WHERE age > 25;

-- 查看实际执行信息(包含统计信息)
EXPLAIN ANALYZE SELECT * FROM users WHERE age > 25;

-- 查看执行计划格式
EXPLAIN FORMAT = 'BRIEF' SELECT * FROM users;
EXPLAIN FORMAT = 'DOT' SELECT * FROM users;  -- Graphviz 格式
EXPLAIN FORMAT = 'ROW' SELECT * FROM users;  -- 表格格式

执行计划输出示例:

┌──────────────────────────────────────────────────────────────┐
│                    EXPLAIN 输出示例                          │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│ mysql> EXPLAIN SELECT * FROM users WHERE age > 25;          │
│                                                              │
│ +-----------------------+----------+-----------+-----------+ │
│ | id                    | estRows  | task      | operator  | │
│ +-----------------------+----------+-----------+-----------+ │
│ | TableReader_7         | 3333.33  | root      |           | │
│ | └─Selection_6         | 3333.33  | cop[tikv] |           | │
│ |   └─TableFullScan_5   | 10000.00 | cop[tikv] | keep_order| │
│ +-----------------------+----------+-----------+-----------+ │
│                                                              │
│ 关键信息解读:                                                │
│ • id: 算子 ID                                                │
│ • estRows: 估计返回行数                                      │
│ • task: 执行任务类型                                         │
│   - root: TiDB 层执行                                        │
│   - cop[tikv]: TiKV 层执行                                   │
│   - cop[tiflash]: TiFlash 层执行                            │
│ • operator: 算子类型和操作                                   │
│                                                              │
└──────────────────────────────────────────────────────────────┘

1.2 算子下推优化

下推策略

TiDB 优化器会尽可能将算子下推到存储引擎执行,减少数据传输和计算负载。

┌──────────────────────────────────────────────────────────────┐
│                    算子下推策略                              │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  可下推算子:                                                 │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  TiKV 支持下推:                                      │  │
│  │  • Selection (过滤条件)                               │  │
│  │  • Aggregation (部分聚合)                             │  │
│  │  • TopN (排序取前 N)                                  │  │
│  │  • Limit (限制返回行数)                               │  │
│  │                                                      │  │
│  │  TiFlash 支持下推:                                   │  │
│  │  • 所有 TiKV 支持的算子                                │  │
│  │  • Hash Join                                          │  │
│  │  • Window (窗口函数)                                  │  │
│  │  • Exchange (数据交换)                                │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  下推决策过程:                                               │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  1. 识别可下推算子                                     │  │
│  │     ┌─────────────────────────────────────────────┐  │  │
│  │     │ 检查算子类型是否支持下推                      │  │  │
│  │     │ 检查表达式是否可下推                          │  │  │
│  │     └─────────────────────────────────────────────┘  │  │
│  │                                                      │  │
│  │  2. 评估下推收益                                       │  │
│  │     ┌─────────────────────────────────────────────┐  │  │
│  │     │ 估算下推前后的数据传输量                      │  │  │
│  │     │ 估算下推前后的计算成本                        │  │  │
│  │     └─────────────────────────────────────────────┘  │  │
│  │                                                      │  │
│  │  3. 生成下推计划                                       │  │
│  │     ┌─────────────────────────────────────────────┐  │  │
│  │     │ 将算子添加到 cop task                        │  │  │
│  │     │ 生成对应的 DAG 请求                           │  │  │
│  │     └─────────────────────────────────────────────┘  │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
└──────────────────────────────────────────────────────────────┘

下推示例:

┌──────────────────────────────────────────────────────────────┐
│                    算子下推示例                              │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  SQL:                                                        │
│  SELECT SUM(amount) FROM orders WHERE status = 'completed'   │
│                                                              │
│  无下推执行:                                                 │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  TiKV                          TiDB                  │  │
│  │  ┌─────────┐                   ┌─────────┐          │  │
│  │  │全量扫描  │ ──────▶          │  过滤    │          │  │
│  │  │orders   │  100 万行         │  聚合    │          │  │
│  │  └─────────┘                   └─────────┘          │  │
│  │                                                      │  │
│  │  网络传输:100 万行                                    │  │
│  │  TiDB 负载:高                                        │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  下推执行:                                                   │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  TiKV                          TiDB                  │  │
│  │  ┌─────────┐                   ┌─────────┐          │  │
│  │  │ 过滤     │ ──────▶          │  聚合    │          │  │
│  │  │ 聚合     │  1 万行           │  汇总    │          │  │
│  │  └─────────┘                   └─────────┘          │  │
│  │                                                      │  │
│  │  网络传输:1 万行 (减少 99%)                           │  │
│  │  TiDB 负载:低                                        │  │
│  │  性能提升:10-50 倍                                   │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
└──────────────────────────────────────────────────────────────┘

1.3 并行执行机制

并行执行策略

TiDB 支持多种并行执行策略,充分利用集群资源提高查询性能。

┌──────────────────────────────────────────────────────────────┐
│                    并行执行策略                              │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  1. Coprocessor 并行                                         │
│     ┌────────────────────────────────────────────────────┐  │
│     │                                                    │  │
│     │  TiDB 将请求发送到多个 TiKV 节点并行执行               │  │
│     │                                                    │  │
│     │  ┌─────────┐  ┌─────────┐  ┌─────────┐           │  │
│     │  │ TiKV 1  │  │ TiKV 2  │  │ TiKV 3  │  ...      │  │
│     │  │ Scan    │  │ Scan    │  │ Scan    │           │  │
│     │  └────┬────┘  └────┬────┘  └────┬────┘           │  │
│     │       │            │            │                 │  │
│     │       └────────────┴────────────┘                 │  │
│     │                    │                               │  │
│     │                    ▼                               │  │
│     │              ┌───────────┐                        │  │
│     │              │   TiDB    │  汇总结果               │  │
│     │              └───────────┘                        │  │
│     │                                                    │  │
│     └────────────────────────────────────────────────────┘  │
│                                                              │
│  2. Hash Join 并行                                            │
│     ┌────────────────────────────────────────────────────┐  │
│     │                                                    │  │
│     │  大表 Hash Join 使用多线程并行构建和探测              │  │
│     │                                                    │  │
│     │  ┌───────────────────────────────────────────┐    │  │
│     │  │            Hash Join (Parallel)           │    │  │
│     │  │  ┌─────────┐  ┌─────────┐  ┌─────────┐   │    │  │
│     │  │  │ Thread 1│  │ Thread 2│  │ Thread 3│   │    │  │
│     │  │  │ Build   │  │ Build   │  │ Build   │   │    │  │
│     │  │  │ Probe   │  │ Probe   │  │ Probe   │   │    │  │
│     │  │  └─────────┘  └─────────┘  └─────────┘   │    │  │
│     │  └───────────────────────────────────────────┘    │  │
│     │                                                    │  │
│     └────────────────────────────────────────────────────┘  │
│                                                              │
│  3. Aggregation 并行                                          │
│     ┌────────────────────────────────────────────────────┐  │
│     │                                                    │  │
│     │  聚合操作分两阶段:局部聚合 + 全局聚合                 │  │
│     │                                                    │  │
│     │  ┌─────────┐  ┌─────────┐  ┌─────────┐           │  │
│     │  │LocalAgg │  │LocalAgg │  │LocalAgg │           │  │
│     │  └────┬────┘  └────┬────┘  └────┬────┘           │  │
│     │       │            │            │                 │  │
│     │       └────────────┴────────────┘                 │  │
│     │                    │                               │  │
│     │                    ▼                               │  │
│     │              ┌───────────┐                        │  │
│     │              │FinalAgg   │  汇总各局部结果          │  │
│     │              └───────────┘                        │  │
│     │                                                    │  │
│     └────────────────────────────────────────────────────┘  │
│                                                              │
│  4. MPP 并行 (TiFlash)                                        │
│     ┌────────────────────────────────────────────────────┐  │
│     │                                                    │  │
│     │  复杂分析查询使用 MPP 框架分布式并行执行               │  │
│     │                                                    │  │
│     │  参考中篇 MPP 执行架构                                │  │
│     │                                                    │  │
│     └────────────────────────────────────────────────────┘  │
│                                                              │
└──────────────────────────────────────────────────────────────┘

并行度配置

┌──────────────────────────────────────────────────────────────┐
│                    并行度配置参数                            │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  系统变量:                                                   │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  tidb_distsql_scan_concurrency                        │  │
│  │  • 默认值:25                                         │  │
│  │  • 控制:扫描操作的并发度                              │  │
│  │  • 范围:1-256                                        │  │
│  │                                                      │  │
│  │  tidb_index_lookup_concurrency                        │  │
│  │  • 默认值:4                                          │  │
│  │  • 控制:索引查找的并发度                              │  │
│  │  • 范围:1-256                                        │  │
│  │                                                      │  │
│  │  tidb_index_lookup_join_concurrency                   │  │
│  │  • 默认值:4                                          │  │
│  │  • 控制:Index Join 的并发度                           │  │
│  │  • 范围:1-256                                        │  │
│  │                                                      │  │
│  │  tidb_hash_join_concurrency                           │  │
│  │  • 默认值:5                                          │  │
│  │  • 控制:Hash Join 的并发度                            │  │
│  │  • 范围:1-256                                        │  │
│  │                                                      │  │
│  │  tidb_projection_concurrency                          │  │
│  │  • 默认值:4                                          │  │
│  │  • 控制:Projection 的并发度                           │  │
│  │  • 范围:1-256                                        │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  配置建议:                                                   │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  OLTP 场景 (点查为主):                                 │  │
│  │  • 降低并发度,减少资源竞争                            │  │
│  │  • 建议:tidb_distsql_scan_concurrency = 5-10        │  │
│  │                                                      │  │
│  │  OLAP 场景 (分析查询):                                 │  │
│  │  • 提高并发度,充分利用资源                            │  │
│  │  • 建议:tidb_distsql_scan_concurrency = 50-100      │  │
│  │                                                      │  │
│  │  混合负载:                                            │  │
│  │  • 使用资源组隔离不同负载                              │  │
│  │  • 动态调整并发度                                     │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
└──────────────────────────────────────────────────────────────┘

2. 最佳实践与运维

2.1 部署最佳实践

集群规划

┌──────────────────────────────────────────────────────────────┐
│                    集群规模规划                              │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  小型集群 (开发/测试):                                        │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  • TiDB: 2 节点 (8C16G)                                │  │
│  │  • TiKV: 3 节点 (8C32G, SSD)                           │  │
│  │  • PD: 3 节点 (4C8G, 可与 TiKV 混部)                     │  │
│  │  • 总容量:~1TB                                        │  │
│  │  • QPS: ~10K                                          │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  中型集群 (生产):                                            │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  • TiDB: 3-5 节点 (16C32G)                             │  │
│  │  • TiKV: 6-9 节点 (16C64G, NVMe SSD)                   │  │
│  │  • PD: 3 节点 (8C16G, 独立部署)                         │  │
│  │  • TiFlash: 3-6 节点 (16C64G, NVMe SSD)                │  │
│  │  • 总容量:~10TB                                       │  │
│  │  • QPS: ~50K-100K                                     │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  大型集群 (核心业务):                                        │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  • TiDB: 10+ 节点 (32C64G)                             │  │
│  │  • TiKV: 30+ 节点 (32C128G, NVMe SSD)                  │  │
│  │  • PD: 5 节点 (16C32G, 独立部署)                        │  │
│  │  • TiFlash: 10+ 节点 (32C128G, NVMe SSD)               │  │
│  │  • 总容量:~100TB+                                     │  │
│  │  • QPS: ~500K+                                        │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
└──────────────────────────────────────────────────────────────┘

硬件配置建议

┌──────────────────────────────────────────────────────────────┐
│                    硬件配置建议                              │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  TiDB Server:                                                │
│  ┌──────────────────────────────────────────────────────┐  │
│  │  • CPU: 16-32 核心                                     │  │
│  │  • 内存:32-64GB                                      │  │
│  │  • 磁盘:500GB SSD (日志和临时数据)                    │  │
│  │  • 网络:10GbE                                        │  │
│  │  • 特点:计算密集型,无状态                            │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  TiKV Server:                                                │
│  ┌──────────────────────────────────────────────────────┐  │
│  │  • CPU: 16-32 核心                                     │  │
│  │  • 内存:64-128GB (Block Cache 占用大)                 │  │
│  │  • 磁盘:NVMe SSD (高 IOPS, 低延迟)                    │  │
│  │  • 网络:10-25GbE                                     │  │
│  │  • 特点:IO 密集型,有状态                             │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  PD Server:                                                  │
│  ┌──────────────────────────────────────────────────────┐  │
│  │  • CPU: 8-16 核心                                      │  │
│  │  • 内存:16-32GB                                      │  │
│  │  • 磁盘:SSD (元数据读写频繁)                          │  │
│  │  • 网络:10GbE                                        │  │
│  │  • 特点:内存密集型,对延迟敏感                        │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  TiFlash Server:                                             │
│  ┌──────────────────────────────────────────────────────┐  │
│  │  • CPU: 32+ 核心 (MPP 计算密集)                         │  │
│  │  • 内存:64-128GB                                     │  │
│  │  • 磁盘:NVMe SSD (多块 RAID0)                         │  │
│  │  • 网络:25-100GbE (MPP 数据交换)                       │  │
│  │  • 特点:计算 + IO 密集型                               │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
└──────────────────────────────────────────────────────────────┘

部署架构

┌──────────────────────────────────────────────────────────────┐
│                    推荐部署架构                              │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  多机房部署 (跨 AZ 高可用):                                   │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │     AZ 1                  AZ 2                  AZ 3   │  │
│  │  ┌─────────┐          ┌─────────┐          ┌─────────┐│  │
│  │  │ TiDB 1  │          │ TiDB 2  │          │ TiDB 3  ││  │
│  │  └─────────┘          └─────────┘          └─────────┘│  │
│  │       │                    │                    │      │  │
│  │  ┌─────────┐          ┌─────────┐          ┌─────────┐│  │
│  │  │ TiKV 1  │          │ TiKV 2  │          │ TiKV 3  ││  │
│  │  │(Leader) │◀────────▶│Follower │◀────────▶│Follower ││  │
│  │  └─────────┘          └─────────┘          └─────────┘│  │
│  │       │                    │                    │      │  │
│  │  ┌─────────┐          ┌─────────┐          ┌─────────┐│  │
│  │  │  PD 1   │          │  PD 2   │          │  PD 3   ││  │
│  │  │(Leader) │◀────────▶│Follower │◀────────▶│Follower ││  │
│  │  └─────────┘          └─────────┘          └─────────┘│  │
│  │                                                      │  │
│  │  副本分布:每个 Region 的 3 个副本分布在 3 个 AZ               │  │
│  │  容灾能力:容忍单 AZ 故障                                 │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
└──────────────────────────────────────────────────────────────┘

2.2 性能优化指南

SQL 优化

┌──────────────────────────────────────────────────────────────┐
│                    SQL 优化最佳实践                          │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  1. 索引优化                                                 │
│     ┌────────────────────────────────────────────────────┐  │
│     │                                                    │  │
│     │  ✅ 创建合适的索引                                   │  │
│     │  • 为 WHERE、JOIN、ORDER BY 列创建索引                │  │
│     │  • 使用覆盖索引减少回表                             │  │
│     │  • 考虑复合索引的顺序                               │  │
│     │                                                    │  │
│     │  ❌ 避免索引失效                                     │  │
│     │  • 避免在索引列上使用函数                           │  │
│     │  • 避免隐式类型转换                               │  │
│     │  • 避免 LIKE '%xxx' 前缀模糊查询                     │  │
│     │                                                    │  │
│     └────────────────────────────────────────────────────┘  │
│                                                              │
│  2. 查询优化                                                 │
│     ┌────────────────────────────────────────────────────┐  │
│     │                                                    │  │
│     │  ✅ 优化建议                                        │  │
│     │  • 只查询需要的列 (避免 SELECT *)                    │  │
│     │  • 使用 LIMIT 限制返回行数                           │  │
│     │  • 分批处理大数据量操作                             │  │
│     │  • 使用 UNION ALL 代替 UNION (去重开销大)             │  │
│     │                                                    │  │
│     │  ❌ 避免操作                                        │  │
│     │  • 避免大表 JOIN 大表                               │  │
│     │  • 避免深分页 (LIMIT 100000, 10)                     │  │
│     │  • 避免子查询 (可改写为 JOIN)                        │  │
│     │                                                    │  │
│     └────────────────────────────────────────────────────┘  │
│                                                              │
│  3. 事务优化                                                 │
│     ┌────────────────────────────────────────────────────┐  │
│     │                                                    │  │
│     │  ✅ 优化建议                                        │  │
│     │  • 保持事务短小                                     │  │
│     │  • 批量提交减少事务数                               │  │
│     │  • 合理选择乐观/悲观事务                            │  │
│     │                                                    │  │
│     │  ❌ 避免操作                                        │  │
│     │  • 避免大事务 (超过 100MB)                          │  │
│     │  • 避免长事务 (超过 1 小时)                           │  │
│     │  • 避免事务内交互 (等待用户输入)                     │  │
│     │                                                    │  │
│     └────────────────────────────────────────────────────┘  │
│                                                              │
└──────────────────────────────────────────────────────────────┘

配置优化

┌──────────────────────────────────────────────────────────────┐
│                    关键配置优化                              │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  TiDB 配置:                                                  │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  [performance]                                       │  │
│  │  stmt-count-limit = 5000          # 单语句行数限制     │  │
│  │  feedback-probability = 0         # 关闭统计反馈      │  │
│  │  enable-collect-execution-info = 1                   │  │
│  │                                                      │  │
│  │  [log]                                               │  │
│  │  level = "warn"                   # 日志级别          │  │
│  │  slow-threshold = 300             # 慢查询阈值 (ms)    │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  TiKV 配置:                                                  │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  [storage]                                           │  │
│  │  block-cache.capacity = "40GB"    # Block 缓存大小     │  │
│  │                                                      │  │
│  │  [raftstore]                                         │  │
│  │  sync-log = true                  # 同步日志 (安全)    │  │
│  │  raft-base-tick-interval = "1s"                      │  │
│  │  raft-heartbeat-ticks = 2                            │  │
│  │                                                      │  │
│  │  [rocksdb.defaultcf]                                 │  │
│  │  block-cache-size = "8GB"                            │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  PD 配置:                                                    │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  [schedule]                                          │  │
│  │  max-snapshot-count = 64          # 最大快照数        │  │
│  │  max-pending-peer-count = 64      # 最大 pending 数    │  │
│  │  max-merge-region-size = 512      # Region 合并大小     │  │
│  │                                                      │  │
│  │  [replication]                                       │  │
│  │  max-replicas = 3                 # 副本数            │  │
│  │  location-labels = ["zone", "rack"] # 位置标签        │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
└──────────────────────────────────────────────────────────────┘

2.3 监控与告警

监控指标体系

┌──────────────────────────────────────────────────────────────┐
│                    核心监控指标                              │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  集群层面:                                                   │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  • QPS (Queries Per Second)                          │  │
│  │  • 事务成功率                                        │  │
│  │  • 平均查询延迟 (P50/P90/P99)                         │  │
│  │  • 活跃连接数                                        │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  TiDB 层面:                                                  │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  • SQL 执行延迟                                        │  │
│  │  • 慢查询数量                                        │  │
│  │  • 语句执行错误数                                     │  │
│  │  • 缓存命中率                                        │  │
│  │  • CPU/内存使用率                                     │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  TiKV 层面:                                                  │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  • 命令处理延迟 (get/scan/put)                        │  │
│  │  • Raft 提案延迟                                       │  │
│  │  • 存储引擎写入/读取延迟                               │  │
│  │  • Region 数量                                        │  │
│  │  • Leader 数量                                        │  │
│  │  • 磁盘使用率                                        │  │
│  │  • 网络流量                                          │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  PD 层面:                                                    │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  • TSO 请求延迟                                        │  │
│  │  • 调度操作数量                                       │  │
│  │  • Region 心跳延迟                                     │  │
│  │  • etcd 延迟                                          │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  TiFlash 层面:                                               │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  • 查询延迟                                          │  │
│  │  • MPP 任务执行时间                                   │  │
│  │  • 数据同步延迟                                       │  │
│  │  • 列存压缩比                                        │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
└──────────────────────────────────────────────────────────────┘

Grafana Dashboard

┌──────────────────────────────────────────────────────────────┐
│                    Grafana 监控面板                          │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  TiDB 集群总览:                                              │
│  ┌──────────────────────────────────────────────────────┐  │
│  │  ┌──────────┐  ┌──────────┐  ┌──────────┐          │  │
│  │  │   QPS    │  │  延迟    │  │  错误率   │          │  │
│  │  │  12.5K   │  │  8.2ms   │  │  0.01%   │          │  │
│  │  └──────────┘  └──────────┘  └──────────┘          │  │
│  │                                                      │  │
│  │  ┌────────────────────────────────────────────────┐  │  │
│  │  │          QPS 趋势图 (24 小时)                     │  │  │
│  │  │    ╱╲    ╱╲      ╱╲                            │  │  │
│  │  │   ╱  ╲  ╱  ╲    ╱  ╲                           │  │  │
│  │  │  ╱    ╲╱    ╲╱╲╱    ╲                          │  │  │
│  │  └────────────────────────────────────────────────┘  │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  TiKV 状态:                                                  │
│  ┌──────────────────────────────────────────────────────┐  │
│  │  ┌──────────┐  ┌──────────┐  ┌──────────┐          │  │
│  │  │ Region   │  │ Leader   │  │  存储     │          │  │
│  │  │  150K    │  │  50K     │  │  8.5TB   │          │  │
│  │  └──────────┘  └──────────┘  └──────────┘          │  │
│  │                                                      │  │
│  │  ┌────────────────────────────────────────────────┐  │  │
│  │  │        各 Store 负载分布                         │  │  │
│  │  │  Store1: ████████░░ 80%                        │  │  │
│  │  │  Store2: ███████░░░ 70%                        │  │  │
│  │  │  Store3: ████████░░ 80%                        │  │  │
│  │  └────────────────────────────────────────────────┘  │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
└──────────────────────────────────────────────────────────────┘

告警规则

# Prometheus 告警规则示例
groups:
  - name: tidb_alerts
    rules:
      # TiDB 告警
      - alert: TiDBHighQPS
        expr: rate(tidb_server_query_total[1m]) > 10000
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "TiDB QPS 过高"

      - alert: TiDBSlowQuery
        expr: rate(tidb_server_slow_query_total[1m]) > 100
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "TiDB 慢查询过多"

      # TiKV 告警
      - alert: TiKVHighLatency
        expr: histogram_quantile(0.99, rate(tikv_storage_command_duration_seconds_bucket[5m])) > 0.1
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "TiKV 延迟过高"

      - alert: TiKVRegionUnavailable
        expr: tikv_region_availability == 0
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "TiKV Region 不可用"

      # PD 告警
      - alert: PDLeaderDown
        expr: pd_leader == 0
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "PD Leader 宕机"

      # 资源告警
      - alert: DiskUsageHigh
        expr: (node_filesystem_size_bytes - node_filesystem_avail_bytes) / node_filesystem_size_bytes > 0.85
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: "磁盘使用率超过 85%"

2.4 故障排查手册

常见问题排查

┌──────────────────────────────────────────────────────────────┐
│                    故障排查流程                              │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  问题 1: 查询变慢                                             │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  排查步骤:                                           │  │
│  │  1. 查看慢查询日志                                    │  │
│  │     SELECT * FROM information_schema.slow_query      │  │
│  │     WHERE time > NOW() - INTERVAL 1 HOUR             │  │
│  │     ORDER BY query_time DESC LIMIT 10;               │  │
│  │                                                      │  │
│  │  2. 分析执行计划                                      │  │
│  │     EXPLAIN ANALYZE <slow_query>;                    │  │
│  │                                                      │  │
│  │  3. 检查统计信息                                      │  │
│  │     SHOW STATS_META WHERE db_name = 'your_db';       │  │
│  │                                                      │  │
│  │  4. 检查资源使用                                      │  │
│  │     • CPU/内存使用率                                 │  │
│  │     • 磁盘 IO                                        │  │
│  │     • 网络带宽                                       │  │
│  │                                                      │  │
│  │  5. 检查锁等待                                        │  │
│  │     SELECT * FROM information_schema.data_lock_waits;│  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  问题 2: 写入延迟高                                           │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  排查步骤:                                           │  │
│  │  1. 检查 TiKV 写入延迟                                  │  │
│  │     • 查看 tikv_storage_command_duration_seconds     │  │
│  │                                                      │  │
│  │  2. 检查 Raft 复制延迟                                  │  │
│  │     • 查看 tikv_raftstore_propose_wait_duration      │  │
│  │                                                      │  │
│  │  3. 检查磁盘 IO                                       │  │
│  │     • iostat -x 1                                    │  │
│  │     • 检查 SSD 健康状态                                │  │
│  │                                                      │  │
│  │  4. 检查 Region 热点                                    │  │
│  │     • PD Dashboard -> Hot Region                      │  │
│  │                                                      │  │
│  │  5. 检查事务冲突                                      │  │
│  │     • 查看 txn_commit_duration_seconds               │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  问题 3: 节点宕机                                             │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  排查步骤:                                           │  │
│  │  1. 确认宕机节点                                      │  │
│  │     • pd-ctl store                                   │  │
│  │                                                      │  │
│  │  2. 检查节点日志                                      │  │
│  │     • tail -f tidb.log / tikv.log / pd.log          │  │
│  │                                                      │  │
│  │  3. 检查系统资源                                      │  │
│  │     • dmesg | tail                                  │  │
│  │     • free -h                                       │  │
│  │     • df -h                                         │  │
│  │                                                      │  │
│  │  4. 尝试重启节点                                      │  │
│  │     • systemctl restart tidb-server                 │  │
│  │                                                      │  │
│  │  5. 检查数据恢复                                      │  │
│  │     • PD 自动调度副本恢复                             │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  问题 4: 磁盘空间不足                                         │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  排查步骤:                                           │  │
│  │  1. 检查磁盘使用                                      │  │
│  │     • df -h                                          │  │
│  │                                                      │  │
│  │  2. 分析空间占用                                      │  │
│  │     • du -sh *                                       │  │
│  │                                                      │  │
│  │  3. 清理旧数据                                        │  │
│  │     • 调整 GC 参数加速清理                              │  │
│  │     • SET GLOBAL tidb_gc_life_time = '10m';         │  │
│  │                                                      │  │
│  │  4. 扩容集群                                          │  │
│  │     • 添加新 TiKV 节点                                 │  │
│  │     • PD 自动平衡数据                                 │  │
│  │                                                      │  │
│  │  5. 压缩数据                                          │  │
│  │     • 手动触发 Compaction                            │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
└──────────────────────────────────────────────────────────────┘

诊断工具

┌──────────────────────────────────────────────────────────────┐
│                    诊断工具列表                              │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  官方工具:                                                   │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  TiUP                                                │  │
│  │  • 集群管理工具                                      │  │
│  │  • tiup cluster display <cluster-name>              │  │
│  │  • tiup cluster restart <cluster-name>              │  │
│  │                                                      │  │
│  │  pd-ctl                                              │  │
│  │  • PD 命令行工具                                      │  │
│  │  • pd-ctl -u http://pd-host:2379                     │  │
│  │  • store / region / config / scheduler              │  │
│  │                                                      │  │
│  │  tikv-ctl                                            │  │
│  │  • TiKV 命令行工具                                    │  │
│  │  • 诊断和修复工具                                     │  │
│  │                                                      │  │
│  │  TiDB Dashboard                                       │  │
│  │  • Web 可视化界面                                     │  │
│  │  • 监控、诊断、优化一体化                             │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  常用诊断命令:                                               │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  # 查看集群状态                                        │  │
│  │  tiup cluster display <cluster-name>                │  │
│  │                                                      │  │
│  │  # 查看 Region 信息                                     │  │
│  │  pd-ctl region <region_id>                          │  │
│  │                                                      │  │
│  │  # 查看 Store 状态                                      │  │
│  │  pd-ctl store                                       │  │
│  │                                                      │  │
│  │  # 查看调度器状态                                      │  │
│  │  pd-ctl scheduler show                              │  │
│  │                                                      │  │
│  │  # 查看热点 Region                                      │  │
│  │  pd-ctl hot read / hot write                        │  │
│  │                                                      │  │
│  │  # 查看慢查询                                         │  │
│  │  SELECT * FROM information_schema.slow_query        │  │
│  │  ORDER BY query_time DESC LIMIT 10;                 │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
└──────────────────────────────────────────────────────────────┘

3. 应用场景与案例

3.1 典型应用场景

┌──────────────────────────────────────────────────────────────┐
│                    典型应用场景                              │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  1. 金融核心交易系统                                          │
│     ┌────────────────────────────────────────────────────┐  │
│     │                                                    │  │
│     │  场景特点:                                         │  │
│     │  • 高并发写入 (下单、支付)                           │  │
│     │  • 强一致性要求 (资金安全)                           │  │
│     │  • 复杂查询 (报表、对账)                             │  │
│     │                                                    │  │
│     │  TiDB 优势:                                        │  │
│     │  • 分布式事务保证 ACID                              │  │
│     │  • 水平扩展应对交易峰值                             │  │
│     │  • HTAP 支持实时风控和分析                           │  │
│     │                                                    │  │
│     │  典型案例:                                         │  │
│     │  • 某大型银行核心系统 (日交易 1 亿+)                    │  │
│     │  • 某支付公司清算系统                               │  │
│     │                                                    │  │
│     └────────────────────────────────────────────────────┘  │
│                                                              │
│  2. 电商平台                                                  │
│     ┌────────────────────────────────────────────────────┐  │
│     │                                                    │  │
│     │  场景特点:                                         │  │
│     │  • 订单量巨大 (双 11 等大促)                          │  │
│     │  • 库存管理复杂                                     │  │
│     │  • 实时数据分析需求                                 │  │
│     │                                                    │  │
│     │  TiDB 优势:                                        │  │
│     │  • 弹性扩展应对流量洪峰                             │  │
│     │  • 分布式事务保证库存准确                           │  │
│     │  • 一套系统支持 TP+AP                               │  │
│     │                                                    │  │
│     │  典型案例:                                         │  │
│     │  • 某电商平台订单系统 (峰值 50 万 QPS)                 │  │
│     │  • 某零售企业库存管理系统                           │  │
│     │                                                    │  │
│     └────────────────────────────────────────────────────┘  │
│                                                              │
│  3. 游戏行业                                                   │
│     ┌────────────────────────────────────────────────────┐  │
│     │                                                    │  │
│     │  场景特点:                                         │  │
│     │  • 玩家数据海量                                     │  │
│     │  • 实时排行榜                                       │  │
│     │  • 游戏日志分析                                     │  │
│     │                                                    │  │
│     │  TiDB 优势:                                        │  │
│     │  • 高并发读写支持                                   │  │
│     │  • 全局唯一时间戳                                   │  │
│     │  • 实时分析玩家行为                                 │  │
│     │                                                    │  │
│     │  典型案例:                                         │  │
│     │  • 某手游公司玩家数据中心                           │  │
│     │  • 某游戏平台日志分析系统                           │  │
│     │                                                    │  │
│     └────────────────────────────────────────────────────┘  │
│                                                              │
│  4. 物联网 (IoT)                                               │
│     ┌────────────────────────────────────────────────────┐  │
│     │                                                    │  │
│     │  场景特点:                                         │  │
│     │  • 设备数据海量写入                                 │  │
│     │  • 时序数据查询                                     │  │
│     │  • 实时监控告警                                     │  │
│     │                                                    │  │
│     │  TiDB 优势:                                        │  │
│     │  • 高吞吐写入能力                                   │  │
│     │  • 时间范围查询优化                                 │  │
│     │  • 实时计算设备状态                                 │  │
│     │                                                    │  │
│     │  典型案例:                                         │  │
│     │  • 某车企车联网平台 (千万级设备)                     │  │
│     │  • 某工业互联网平台                                 │  │
│     │                                                    │  │
│     └────────────────────────────────────────────────────┘  │
│                                                              │
│  5. SaaS 多租户系统                                            │
│     ┌────────────────────────────────────────────────────┐  │
│     │                                                    │  │
│     │  场景特点:                                         │  │
│     │  • 多租户数据隔离                                   │  │
│     │  • 资源弹性分配                                     │  │
│     │  • 按需扩展                                         │  │
│     │                                                    │  │
│     │  TiDB 优势:                                        │  │
│     │  • 资源组实现租户隔离                               │  │
│     │  • 弹性扩缩容                                       │  │
│     │  • 多租户统一管理                                   │  │
│     │                                                    │  │
│     │  典型案例:                                         │  │
│     │  • 某 CRM SaaS 平台 (万级企业客户)                    │  │
│     │  • 某 ERP 云服务                                     │  │
│     │                                                    │  │
│     └────────────────────────────────────────────────────┘  │
│                                                              │
└──────────────────────────────────────────────────────────────┘

3.2 性能对比测试

TPC-C 测试

┌──────────────────────────────────────────────────────────────┐
│                    TPC-C 性能对比                            │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  测试环境:                                                   │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  • 数据量:1000 Warehouse (约 100GB)                   │  │
│  │  • TiDB 集群:5 TiDB + 9 TiKV + 3 PD                   │  │
│  │  • 对比数据库:MySQL 8.0 (主从架构)                     │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  测试结果:                                                   │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │                    │  TiDB    │  MySQL   │  提升     │  │
│  │  ──────────────────┼──────────┼──────────┼─────────  │  │
│  │  tpmC (事务/分钟)   │  850K    │  120K    │  7.1x     │  │
│  │  平均延迟 (ms)      │  8.5     │  45.2    │  5.3x     │  │
│  │  P99 延迟 (ms)      │  25.3    │  180.5   │  7.1x     │  │
│  │  写入吞吐 (txn/s)   │  15K     │  2K      │  7.5x     │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  结论:                                                       │
│  • TiDB 在分布式场景下性能显著优于单机 MySQL                   │
│  • 延迟更稳定,P99 延迟优势明显                               │  │
│  • 线性扩展能力强,增加节点性能线性提升                       │  │
│                                                              │
└──────────────────────────────────────────────────────────────┘

TPC-H 测试

┌──────────────────────────────────────────────────────────────┐
│                    TPC-H 性能对比                            │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  测试环境:                                                   │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  • 数据量:1TB                                        │  │
│  │  • TiDB 集群:5 TiDB + 9 TiKV + 6 TiFlash + 3 PD       │  │
│  │  • 对比数据库:ClickHouse 21.8                         │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  测试结果 (部分 Query):                                       │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  Query  │  TiDB (s)  │  ClickHouse (s)  │  对比     │  │
│  │  ───────┼───────────┼────────────────┼─────────    │  │
│  │  Q1     │  2.5       │  1.8           │  0.7x      │  │
│  │  Q3     │  3.2       │  2.1           │  0.66x     │  │
│  │  Q6     │  1.8       │  1.2           │  0.67x     │  │
│  │  Q9     │  15.3      │  12.5          │  0.82x     │  │
│  │  Q18    │  25.6      │  18.2          │  0.71x     │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  结论:                                                       │
│  • TiFlash 分析性能接近专业 OLAP 数据库                        │
│  • 优势:同时支持 TP,无需数据同步                            │  │
│  • 适合 HTAP 场景,简化架构                                  │  │
│                                                              │
└──────────────────────────────────────────────────────────────┘

扩展性测试

┌──────────────────────────────────────────────────────────────┐
│                    水平扩展性测试                            │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  测试方法:逐步增加 TiKV 节点,观察性能变化                     │
│                                                              │
│  测试结果:                                                   │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  TiKV 节点数  │  QPS     │  相对提升  │  线性度     │  │
│  │  ───────────┼──────────┼───────────┼────────────  │  │
│  │  3          │  30K     │  基准      │  100%       │  │
│  │  6          │  58K     │  +93%      │  97%        │  │
│  │  9          │  85K     │  +183%     │  94%        │  │
│  │  12         │  110K    │  +267%     │  91%        │  │
│  │  15         │  132K    │  +340%     │  88%        │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  结论:                                                       │
│  • TiDB 具有良好的水平扩展能力                               │
│  • 15 节点内线性度 > 85%                                     │
│  • 扩展收益随节点数增加略有递减                               │  │
│                                                              │
└──────────────────────────────────────────────────────────────┘

3.3 迁移指南

迁移评估

┌──────────────────────────────────────────────────────────────┐
│                    迁移评估清单                              │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  兼容性检查:                                                 │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  ✅ 完全兼容                                          │  │
│  │  • MySQL 协议 (3306 端口)                              │  │
│  │  • 标准 SQL 语法                                       │  │
│  │  • 常用函数和表达式                                   │  │
│  │                                                      │  │
│  │  ⚠️ 部分兼容                                          │  │
│  │  • 存储过程 (支持有限)                                 │  │
│  │  • 触发器 (支持有限)                                   │  │
│  │  • 外键约束 (逻辑支持,非物理强制)                     │  │
│  │                                                      │  │
│  │  ❌ 不支持                                            │  │
│  │  • 某些 MySQL 系统表                                   │  │
│  │  • 某些存储引擎特性                                   │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  性能评估:                                                   │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  • 压测对比原数据库性能                               │  │
│  │  • 识别性能瓶颈 SQL                                   │  │
│  │  • 优化索引和查询                                     │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  容量规划:                                                   │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  • 评估当前数据量和增长率                             │  │
│  │  • 规划集群规模和扩展策略                             │  │
│  │  • 预留 30-50% 容量缓冲                                │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
└──────────────────────────────────────────────────────────────┘

迁移步骤

┌──────────────────────────────────────────────────────────────┐
│                    迁移步骤详解                              │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  Step 1: 环境准备                                            │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  1. 部署 TiDB 集群                                     │  │
│  │     tiup cluster deploy <cluster-name> ...           │  │
│  │                                                      │  │
│  │  2. 配置网络和白名单                                   │  │
│  │  3. 创建数据库和用户                                   │  │
│  │     CREATE DATABASE app_db;                          │  │
│  │     CREATE USER 'app'@'%' IDENTIFIED BY 'xxx';      │  │
│  │     GRANT ALL ON app_db.* TO 'app'@'%';             │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  Step 2: 结构迁移                                            │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  1. 导出原数据库结构                                   │  │
│  │     mysqldump -h old_host -u root -d old_db > schema.sql  │  │
│  │                                                      │  │
│  │  2. 修改不兼容语法 (如有)                               │  │
│  │  3. 导入 TiDB                                           │  │
│  │     mysql -h tidb_host -u root -D app_db < schema.sql│  │
│  │                                                      │  │
│  │  4. 使用 TiDB 迁移工具                                  │  │
│  │     tiup client <cluster-name> pd-ctl                 │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  Step 3: 数据迁移                                            │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  方案 A: Dumpling + Lightning (推荐)                   │  │
│  │  ┌────────────────────────────────────────────────┐  │  │
│  │  │  1. Dumpling 导出                               │  │  │
│  │  │     dumpling -u root -h old_host -o ./output  │  │  │
│  │  │                                                │  │  │
│  │  │  2. Lightning 导入                             │  │  │
│  │  │     tiup tidb-lightning -config lightning.toml│  │  │
│  │  │                                                │  │  │
│  │  │  适用:全量数据迁移,TB 级数据                      │  │  │
│  │  └────────────────────────────────────────────────┘  │  │
│  │                                                      │  │
│  │  方案 B: Sync / Drainer                               │  │
│  │  ┌────────────────────────────────────────────────┐  │  │
│  │  │  1. 配置增量同步                                 │  │  │
│  │  │  2. 全量 + 增量迁移                              │  │  │
│  │  │  3. 数据校验                                     │  │  │
│  │  │                                                │  │  │
│  │  │  适用:在线迁移,要求不停机                       │  │  │
│  │  └────────────────────────────────────────────────┘  │  │
│  │                                                      │  │
│  │  方案 C: DataX / Kettle                              │  │
│  │  ┌────────────────────────────────────────────────┐  │  │
│  │  │  使用第三方 ETL 工具                              │  │  │
│  │  │  适用:复杂转换,异构数据源                       │  │  │
│  │  └────────────────────────────────────────────────┘  │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  Step 4: 数据校验                                            │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  1. 使用 Sync Diff Inspector                         │  │
│  │     tiup tidb-inspector diff --config diff.toml     │  │
│  │                                                      │  │
│  │  2. 抽样校验                                          │  │
│  │     SELECT COUNT(*) FROM table;                     │  │
│  │     SELECT SUM(amount) FROM orders;                 │  │
│  │                                                      │  │
│  │  3. 业务校验                                          │  │
│  │     • 关键业务数据核对                                 │  │
│  │     • 报表数据对比                                     │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  Step 5: 应用切换                                            │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  1. 修改应用数据库连接配置                             │  │
│  │     • 更新 JDBC URL                                   │  │
│  │     • 更新连接池配置                                   │  │
│  │                                                      │  │
│  │  2. 灰度切换                                          │  │
│  │     • 先切换部分流量                                   │  │
│  │     • 观察监控和日志                                   │  │
│  │     • 逐步扩大比例                                     │  │
│  │                                                      │  │
│  │  3. 全量切换                                          │  │
│  │     • 确认无误后切换全部流量                           │  │
│  │     • 保留原数据库一段时间                             │  │
│  │                                                      │  │
│  │  4. 回滚方案                                          │  │
│  │     • 准备回滚脚本                                     │  │
│  │     • 确保可快速切回原数据库                           │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  Step 6: 后续优化                                            │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                                                      │  │
│  │  1. 分析慢查询并优化                                   │  │
│  │  2. 调整统计信息                                      │  │
│  │     ANALYZE TABLE table_name;                        │  │
│  │  3. 优化索引                                          │  │
│  │  4. 调整配置参数                                      │  │
│  │  5. 建立监控告警                                      │  │
│  │                                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
└──────────────────────────────────────────────────────────────┘

迁移工具对比

┌──────────────────────────────────────────────────────────────┐
│                    迁移工具对比                              │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  工具            │  适用场景      │  优点          │  缺点   │
│  ────────────────┼───────────────┼────────────────┼──────── │
│  Dumpling       │  全量导出     │  速度快        │  需配合  │
│  + Lightning    │  TB 级数据     │  并行处理      │  导入工具│
│  ────────────────┼───────────────┼────────────────┼──────── │
│  Sync / Drainer │  增量同步     │  实时同步      │  配置复杂│
│                 │  在线迁移     │  支持断点续传  │         │
│  ────────────────┼───────────────┼────────────────┼──────── │
│  TiDB Data      │  数据迁移     │  可视化界面    │  功能相对│
│  Migration (DM) │  主从同步     │  支持分库分表  │  简单    │
│  ────────────────┼───────────────┼────────────────┼──────── │
│  DataX          │  异构数据源   │  支持多数据源  │  性能一般│
│                 │  复杂转换     │  插件丰富      │         │
│  ────────────────┼───────────────┼────────────────┼──────── │
│  OGG / GoldenGate│  商业方案    │  稳定可靠      │  成本高  │
│                 │  关键业务     │  功能完善      │         │
│  ────────────────┼───────────────┼────────────────┼──────── │
│                                                              │
└──────────────────────────────────────────────────────────────┘

总结

本文作为 NewSQL 技术系列的下篇,全面介绍了 TiDB 的分布式执行框架、最佳实践与运维指南,以及典型应用场景与案例。

核心要点回顾:

  1. 分布式执行框架
  2. 基于成本的优化器生成最优执行计划
  3. 算子下推减少数据传输和计算负载
  4. 多种并行执行策略充分利用集群资源

  5. 最佳实践与运维

  6. 合理的集群规划和硬件配置
  7. SQL 和配置优化提升性能
  8. 完善的监控告警体系
  9. 系统的故障排查方法

  10. 应用场景与案例

  11. 金融、电商、游戏、IoT 等典型场景
  12. TPC-C/TPC-H 性能对比测试
  13. 完整的迁移指南和工具对比

系列总结:

通过上、中、下三篇文章,我们系统地介绍了 NewSQL 和 TiDB 的完整知识体系:

  • 上篇:SQL 演进与架构概述 - 理解 NewSQL 的来龙去脉和 TiDB 整体架构
  • 中篇:存储引擎与调度机制 - 深入 TiKV、TiFlash、PD 的核心原理
  • 下篇:执行框架与实战指南 - 掌握执行优化、运维管理和实际应用

希望本系列文章能够帮助读者全面理解 NewSQL 技术,并在实际工作中更好地应用 TiDB 解决业务问题。


参考文献:

  1. TiDB Documentation. https://docs.pingcap.com/tidb/stable
  2. TiDB Source Code. https://github.com/pingcap/tidb
  3. TiKV Source Code. https://github.com/tikv/tikv
  4. TPC-C Benchmark. https://www.tpc.org/tpcc/
  5. TPC-H Benchmark. https://www.tpc.org/tpch/
  6. PingCAP Blog. https://pingcap.com/blog/
posted @ 2026-03-28 00:10  JackpotHan  阅读(2)  评论(0)    收藏  举报