1、/姚春晖TiDB 社区版主AskTUG ID:有猫万事足TiFlash:提速聚合计算&简化技术栈一、TiDB 四种类型节点的作用&TiDB 架构介绍二、个人实践:选择 TiDB 的理由&不断用好 TiDB三、适合在 TiFlash 上执行的 SQL 类型四、TiFlash 的执行计划与优化五、TiFlash 的内存与并发管理六、TiFlash 架构介绍&HTAP 实现七、TiFlash 应用的优缺点分析TiFlash:提速聚合计算&简化技术栈分享大纲一、TiDB 四种类型节点的作用&TiDB 架构简介TiFlash:提速聚合计算&简化技术栈TiFlash:Raft Learner二、个人实践:
2、选择 TiDB 的理由&不断用好 TiDBTiFlash:提速聚合计算&简化技术栈遇见 TiDB1.上游有多台相同表结构的 MySQL,老系统的 MySQL 维护人员已经不在;跨服务器统计数据难;写入 QPS 不高,几台 MySQL 合在一起 2-300。2.从 2022 年开始学习 TiDB,2023 年打算使用 TiDB 解决以上的问题。3.选择 TiDB 的理由:兼容 MySQL 生态;完善的教学认证;活跃的社区。二、个人实践:选择 TiDB 的理由&不断用好 TiDBTiFlash:提速聚合计算&简化技术栈不断用好 TiDB1.成本:资源有限,一共 6 台 4c8g 的机器部署 PD,
3、TiDB,TiKV。TiFlash 后来添加的,和其他系统的测试服共用 2 台 4c8g 的机器。2.资源紧张的情况下 PD 和 TiDB 放在一起,TiKV 单独一台;TiFlash 后来添加的时候也没有和原来的 6 台挤在一起。3.主要都是写入操作,需要时刻注意写入热点问题。4.简化技术栈三、适合在 TiFlash 上执行的 SQL 类型聚合计算select count(.),avg(.)from a,b,cwhere a.aid=b.aid and b.bid=c.cidgroup by a.xxx带 GROUP BY 的查询带 group by 的聚合计算,在 TiFlash 上,可以
4、轻松比 TiDB+TiKV 上运行快 2-10 倍TiFlash:提速聚合计算&简化技术栈TiFlash 不擅长的场景扫描行数据TiFlash:提速聚合计算&简化技术栈对于不需要聚合的行数据扫描,TiFlash 的性能并不占优。TiKV+合适的索引才是这类问题最好的解决方案。例如:用户需要按行导出大量数据时,TiFlash 的执行速度并不理想,应考虑使用 TiKV 来优化这一过程。如果是导出后还需要后续聚合计算的情况下,不妨考虑直接在 TiFlash 上算好取结果,反而比导出再折腾一番要快很多。TiFlash 的 MPP 模式TiFlash:提速聚合计算&简化技术栈TiFlash 的 MPP
5、模式可以执行 HASH JOIN。不使用 MPP 模式的情况下,HASH JOIN 是在 TiDB 节点上做的。占用的是 TiDB 的内存/CPU01在 MPP 模式下,TiDB 节点其实是直接从 TiFlash 拿到计算好的结果,只有很少的计算,资源占用比较小。02如果没有 MPP 模式,需要TiDB 节点来执行 HASH JOIN。这无法处理大规模的 JOIN,同时会引起到大量数据交换,执行效率很差。03HASH JOIN 在 TiFlash 上的执行四、TiFlash 的执行计划与优化好的执行计划的特征TiFlash:提速聚合计算&简化技术栈计算全在 TiFlash 上完成,TiDB 上
6、只有少量计算。task 这一栏,上面是几行 root,下面全是 mpptiflash四、TiFlash 的执行计划与优化MPP 模式的开启与配置TiFlash:提速聚合计算&简化技术栈配置参数:tidb_allowed_mpp 和 tidb_enforce_mpp在尝试优化执行计划的时候,建议 session 级打开这 2 个参数,看看执行计划是否符合预期。如果表很大,可以考虑先建立一个同结构的小表,用这个表测试是否是因为副本的问题而不能进行 MPP。通过设置 tidb_allowed_mpp 和 tidb_enforce_mpp 参数,可以控制 TiDB 是否允许或强制使用 MPP 模式。四