【TiDB 4.0 PCTA 学习笔记】- 2.5.5 TiDB 的 SQL 性能优化指南@1班 - 江坤

课程名称:课程版本(201)+ 2.5.5 SQL Tuning Guide(TiDB 的 SQL 性能优化指南)

学习时长:

60 min

课程收获:

学习 TiDB 中的一些优化规则,和部分优化规则的原理和使用。

课程内容:

TiDB SQL Layer

  • 优化器 - 抽象语法树转为执行算子
  • 统计信息 - 指导优化器选择计划
  • Execution engine - 计算算子

Optimization Tuning Guide

Query Optimizer

Execution Tuning Guide

  • Execution Engine
    • 一组一组的读数据
    • 算子并行化:Hash Join,Index Join,Hash Aggregate,etc.
  • Hash Join
    • tidb_hash_join_concurrency 控制 join work数量,默认为5
  • Index Join
    • tidb_index_lookup_join_concurrency: 默认为5,控制inner workers数量
    • tidb_index_join_batch_size: 默认25000,不需过多改动
  • Merge Join
    • 单线程
    • 数据需要按照join key 有序
    • 内存消耗少
  • NestedLoopApply
  • Hash Aggregate
    • tidb_hashagg_final_concurrency,默认4个,控制 final workers数量
    • tidb_hashagg_partial_concurrency,默认4个,控制partial workers数量
  • Stream Aggregate
    • 单线程
    • 消耗内存少
    • 数据需要按照key排序
  • Index Lookup Reader
    • tidb_index_lookup_concurrency,默认4个,控制table workers 数量
    • tidb_index_lookup_size,默认20000

Control the execution plan

  • Hint
    • Index hint(use/force/igonre index),与mysql相似* 在表名后面使用
    • 注释形式使用 (/+ HINT_NAME(arg1, arg2)/),在Select字段中
  • SQL Plan Management
    • 控制一组SQL,而不是针对某一句SQL
    • CREATE BINDING syntax
    • SHOW BINDING 查看所有BINDING

学习过程中参考的其他资料

TiDB 源码阅读系列文章(七)基于规则的优化 | PingCAP
TiDB 源码阅读系列文章(八)基于代价的优化 | PingCAP