灯下哥谭 灯下哥谭
首页
关于
  • Hermes Agent 平台
  • Claude Code
  • OpenClaw
  • GPU 推理节点运维
  • DeepSeek Harness
  • MySQL 运维知识地图
  • Elasticsearch 运维知识地图
  • Redis 运维知识地图
  • TiDB 体系
  • DBA 常用 SQL 与命令
  • Nginx 运维知识地图
  • Prometheus 监控
  • Docker
  • Systemd
  • Iptables
  • Firewalld
  • Sshd
  • MySQL8 运维 SOP 手册
  • MySQL 实战 45 讲(读书笔记)
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

灯下哥谭

灯还亮着
首页
关于
  • Hermes Agent 平台
  • Claude Code
  • OpenClaw
  • GPU 推理节点运维
  • DeepSeek Harness
  • MySQL 运维知识地图
  • Elasticsearch 运维知识地图
  • Redis 运维知识地图
  • TiDB 体系
  • DBA 常用 SQL 与命令
  • Nginx 运维知识地图
  • Prometheus 监控
  • Docker
  • Systemd
  • Iptables
  • Firewalld
  • Sshd
  • MySQL8 运维 SOP 手册
  • MySQL 实战 45 讲(读书笔记)
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • MySQL

  • Redis

  • 高性能KV

  • TiDB

    • TiCDC同步数据到Kafka
    • 对TiDB中算子的深入理解
    • TiDB使用 TTL (Time to Live) 定期删除过期数据
    • 如何移除TiDB中的表分区
    • TiDB配置文件调优
    • 深入解析TiFlash:原理、适用场景与调优实践
      • 引言
      • 一、TiFlash 的核心原理
        • 1. 列式存储与 DeltaTree
        • 2. MPP 模式
        • 3. 数据同步与一致性
      • 二、TiFlash 的适用场景
        • 1. 分析型查询(OLAP)
        • 2. 简单查询(OLTP)
        • 3. 索引的使用
      • 三、TiFlash 的调优实践
        • 1. MPP 模式优化
        • 2. 查询下推优化
        • 3. 内存与磁盘优化
        • 4. 查询优化与索引选择
        • 5. 监控与调优工具
      • 四、常见问题解答
        • 1. TiFlash 是否用不到索引?
        • 2. 简单查询用 TiFlash 是否合适?
    • tidb fast ddl
    • TiKV 运行满 2 年会 panic:795 天单调时钟溢出 bug(tikv#11940)复盘与预警建设
    • TiKV 节点 CPU 周期性打满,进程却只占 4%:一次热点 Region 的逆向排查
  • Elasticsearch

  • 数据管道

  • 其他数据库

  • 数据库
  • TiDB
灯下哥谭
2025-04-02
目录

深入解析TiFlash:原理、适用场景与调优实践原创

# 引言

TiFlash 是 TiDB HTAP(混合事务/分析处理)架构中的关键组件,它通过列式存储和 MPP(大规模并行处理)模式,为分析型查询提供了强大的加速能力。然而,在实际使用中,许多用户对 TiFlash 的适用场景、性能调优以及与传统索引的关系存在疑问。本文将围绕这些核心问题展开,深入解析 TiFlash 的原理、适用场景以及调优实践。


# 一、TiFlash 的核心原理

# 1. 列式存储与 DeltaTree

TiFlash 采用列式存储,数据按列而非按行组织,这种设计非常适合分析型查询,因为它可以只读取查询所需的列,减少 I/O 开销。为了支持实时更新和高性能读取,TiFlash 使用了 DeltaTree 数据结构,它结合了列式存储和日志结构合并树(LSM-Tree)的优点,能够在高 TPS 写入的同时保持良好的读性能。

# 2. MPP 模式

TiFlash 支持 MPP 模式,能够将查询任务并行分发到多个节点执行,充分利用多核 CPU 的计算能力。这种模式在处理大规模数据扫描和复杂聚合计算时,性能提升尤为显著。

# 3. 数据同步与一致性

TiFlash 通过 Raft Learner 协议从 TiKV 异步复制数据,同时提供与 TiKV 一致的快照隔离级别。这种设计确保了 HTAP 场景下事务处理和分析查询的强一致性。


# 二、TiFlash 的适用场景

# 1. 分析型查询(OLAP)

TiFlash 最适合处理分析型查询,例如大规模数据扫描、复杂聚合计算(如 GROUP BY、SUM、COUNT 等)。在这些场景下,TiFlash 的性能通常比 TiKV 快 2-10 倍。

# 2. 简单查询(OLTP)

对于简单查询(如点查或范围查询),TiKV 的行式存储和索引机制通常更高效。TiFlash 的列式存储和 MPP 模式在这种场景下可能无法提供显著的性能提升,甚至可能因为额外的计算开销而变慢。

# 3. 索引的使用

TiFlash 本身不依赖传统索引,而是通过列式存储和 DeltaTree 结构来优化分析型查询的性能。然而,在需要依赖索引的场景(如点查或范围查询)中,TiKV 仍然是更合适的选择。


# 三、TiFlash 的调优实践

# 1. MPP 模式优化

  • 强制开启 MPP 模式:通过设置 tidb_enforce_mpp 参数,确保查询优先使用 MPP 模式。
  • 调整 MPP 任务并发度:根据 CPU 核心数,合理设置 tidb_mpp_concurrency 参数,避免资源争用或浪费。

# 2. 查询下推优化

  • 开启聚合下推:通过设置 tidb_opt_agg_pushdown 参数,将聚合操作下推到 TiFlash。
  • 开启 Join 和 Union 下推:确保复杂查询中的 Join 和 Union 操作能够下推到 TiFlash 执行。

# 3. 内存与磁盘优化

  • 调整内存分配:根据内存总量,合理配置 TiFlash 的 memory_usage_limit 参数。
  • 利用 SSD 性能:适当增加 TiFlash 的 storage.block_cache_size 参数,提升数据缓存效率。

# 4. 查询优化与索引选择

  • 避免全表扫描:通过优化查询语句,减少不必要的全表扫描操作。
  • 合理选择存储引擎:对于简单查询或点查,优先使用 TiKV。

# 5. 监控与调优工具

  • 监控关键指标:通过 TiDB Dashboard 或 Prometheus 监控 TiFlash 的 CPU、内存、磁盘 I/O 等关键指标。
  • 使用 Optimizer Hints:通过 Optimizer Hints 手动指定查询的执行计划,避免优化器误判。

# 四、常见问题解答

# 1. TiFlash 是否用不到索引?

TiFlash 本身不依赖传统索引,而是通过列式存储和 DeltaTree 结构来优化分析型查询的性能。然而,在需要依赖索引的场景(如点查或范围查询)中,TiKV 仍然是更合适的选择。

# 2. 简单查询用 TiFlash 是否合适?

对于简单查询(如点查或范围查询),TiKV 的行式存储和索引机制通常更高效。TiFlash 的列式存储和 MPP 模式在这种场景下可能无法提供显著的性能提升,甚至可能因为额外的计算开销而变慢。


#架构设计#性能优化#TiFlash
上次更新: 9/11/2026

← TiDB配置文件调优 tidb fast ddl→

最近更新
01
DeepSeek Harness 实战 06|学习笔记:插件、工具、技能不在同一个维度上 原创
09-11
02
DeepSeek Harness 实战 05|让两个编码 Agent 共用一份长期记忆 原创
09-09
03
DeepSeek Harness 实战 04|学习笔记:从「已知限制」里读出三处设计张力 原创
09-08
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式