Skip to content

TiDB 参数调优

TiDB 参数调优是提高 TiDB 集群性能的重要手段。通过调整 TiDB、PD、TiKV 等组件的参数,可以优化集群的性能、稳定性和可靠性。参数调优需要根据集群的规模、业务需求和硬件资源进行调整,没有通用的最优配置。

TiDB 参数调优

1. 服务器配置

参数名默认值调优建议说明
server.port4000根据实际需求调整TiDB 服务器的 SQL 端口
server.max-connections10003000-5000TiDB 服务器允许的最大连接数
server.oom-action"log""cancel"OOM 时的动作,生产环境建议设置为 "cancel"
server.tcp-keep-alivetruetrue是否启用 TCP keep-alive

2. 性能配置

参数名默认值调优建议说明
performance.max-procs0根据 CPU 核心数调整TiDB 服务器使用的最大 CPU 核心数
performance.mem-quota-query10737418244294967296-8589934592单个查询允许使用的最大内存
performance.txn-total-size-limit1048576001073741824-2147483648单个事务允许使用的最大内存
performance.txn-entry-size-limit6291456根据业务需求调整单个事务条目的最大大小

3. 事务配置

参数名默认值调优建议说明
txn.mode"pessimistic"根据业务需求调整事务模式,支持 "pessimistic" 和 "optimistic"
txn.txn-local-latchesfalsetrue是否启用本地锁
txn.enable-1pcfalsetrue是否启用 1PC 事务
txn.retry-limit105-20事务重试次数

4. SQL 优化配置

参数名默认值调优建议说明
tidb_enable_clustered_indextruetrue是否启用聚簇索引
tidb_enable_table_partitiontruetrue是否启用表分区功能
tidb_opt_agg_push_downtruetrue是否启用聚合下推
tidb_opt_distinct_agg_push_downfalsetrue是否启用去重聚合下推

PD 参数调优

1. 调度配置

参数名默认值调优建议说明
schedule.max-snapshot-count36-12单个 TiKV 节点允许的最大 snapshot 数量
schedule.max-pending-peer-count1632-64单个 TiKV 节点允许的最大 pending peer 数量
schedule.split-merge-interval"1h""30m"-"2h"分裂和合并的最小间隔时间
schedule.max-merge-region-size2016-32允许合并的最大 Region 大小
schedule.max-merge-region-keys200000160000-320000允许合并的最大 Region 键数量

2. 副本配置

参数名默认值调优建议说明
replication.max-replicas33-5Region 的最大副本数
replication.location-labels[]["zone", "rack", "host"]用于 Region 副本放置的标签
replication.schedule-limit64根据集群规模调整副本调度的限制

3. 热点调度配置

参数名默认值调优建议说明
schedule.hot-region-schedule-limit48-16热点 Region 调度的限制
schedule.hot-region-cache-hits-threshold3根据业务需求调整热点 Region 缓存命中阈值

TiKV 参数调优

1. 存储配置

参数名默认值调优建议说明
storage.block-cache.capacity"1GB"总内存的 30%-40%Block cache 容量
storage.write-buffer-size"128MB"256MB-512MB写入缓冲区大小
storage.max-write-buffer-number53-8最大写入缓冲区数量
storage.scheduler-worker-pool-size4CPU 核心数的 1/4存储调度器工作线程池大小

2. Raft 配置

参数名默认值调优建议说明
raftstore.raft-base-tick-interval"1s""1s"Raft base tick 间隔
raftstore.raft-election-timeout-ticks1010-20Raft 选举超时时间
raftstore.raft-heartbeat-ticks22-5Raft 心跳间隔
raftstore.raftdb.max-background-jobs24-8RaftDB 最大后台作业数

3. Coprocessor 配置

参数名默认值调优建议说明
coprocessor.end-point-concurrency8根据 CPU 核心数调整Coprocessor 并发数
coprocessor.region-max-size"96MB""64MB"-"128MB"Region 最大大小
coprocessor.region-split-size"64MB""48MB"-"96MB"Region 分裂大小

4. RocksDB 配置

参数名默认值调优建议说明
rocksdb.max-background-jobs44-8RocksDB 最大后台作业数
rocksdb.defaultcf.write-buffer-size"128MB"256MB-512MBDefault CF 写入缓冲区大小
rocksdb.defaultcf.max-write-buffer-number53-8Default CF 最大写入缓冲区数量
rocksdb.defaultcf.level0-slowdown-writes-trigger128-16Default CF Level 0 慢写触发阈值

TiFlash 参数调优

1. 服务器配置

参数名默认值调优建议说明
server.http_port8123根据实际需求调整HTTP 服务端口
server.tcp_port9000根据实际需求调整TCP 服务端口
server.flash_service_port3930根据实际需求调整Flash 服务端口

2. 存储配置

参数名默认值调优建议说明
storage.data_path"./data"独立的 SSD 分区数据存储目录
storage.min_bytes_for_wide_part01048576宽分区的最小字节数

3. 查询配置

参数名默认值调优建议说明
query.threads16CPU 核心数的 70%-80%查询执行线程数
query.max_streams128256-512最大流数量
query.max_bytes_before_external_group_by"100Mi""200Mi"-"500Mi"外部分组前的最大字节数

参数调优步骤

1. 分析业务需求

  • 了解业务的读写比例
  • 分析查询类型和复杂度
  • 了解数据量和数据增长趋势
  • 确定性能目标

2. 监控当前性能

  • 使用 Prometheus + Grafana 监控集群性能
  • 关注关键指标,如 QPS、延迟、CPU 使用率、内存使用率等
  • 识别性能瓶颈

3. 制定调优计划

  • 根据监控数据确定需要调整的参数
  • 制定详细的调优计划,包括调整的参数、目标值、调整顺序等
  • 准备回滚计划

4. 逐步调整参数

  • 逐个调整参数,避免同时调整多个参数
  • 每次调整后观察一段时间,评估调优效果
  • 根据调优效果决定是否继续调整或回滚

5. 验证调优效果

  • 对比调优前后的性能指标
  • 测试业务功能是否正常
  • 验证性能目标是否达成

6. 记录调优结果

  • 记录调整的参数、目标值、调整时间和调优效果
  • 建立参数调优的知识库
  • 定期审查和更新调优策略

参数调优最佳实践

1. 从保守到激进

  • 初始调整时,参数值应接近默认值
  • 根据调优效果逐步调整,逐渐接近最优值
  • 避免一次性调整过大,导致集群不稳定

2. 关注整体性能

  • 不要只关注单个指标的优化
  • 要考虑对整体性能的影响
  • 权衡不同参数之间的关系

3. 考虑硬件资源

  • 参数调整应根据硬件资源进行调整
  • 例如,内存较大的服务器可以分配更多的内存给缓存
  • CPU 核心数较多的服务器可以增加线程数

4. 定期回顾和调整

  • 定期回顾参数配置,根据业务变化和集群规模调整
  • 随着数据量的增长,需要调整相关参数
  • 升级 TiDB 版本后,需要重新评估参数配置

5. 结合查询优化

  • 参数调优应与查询优化结合使用
  • 优化查询语句,减少资源消耗
  • 合理设计索引,提高查询性能

常见参数调优场景

场景1:写入密集型业务

调优建议

  • 增加 TiKV 的写入缓冲区大小
  • 增加 TiKV 的最大写入缓冲区数量
  • 调整 RocksDB 的写入参数
  • 启用 TiDB 的 1PC 事务

场景2:查询密集型业务

调优建议

  • 增加 TiDB 的内存配额
  • 增加 TiKV 的 Block cache 容量
  • 优化查询语句,添加合适的索引
  • 考虑使用 TiFlash 加速分析查询

场景3:大事务业务

调优建议

  • 增加 TiDB 的事务大小限制
  • 调整 TiDB 的事务重试次数
  • 考虑将大事务拆分为多个小事务
  • 启用 TiDB 的本地锁

场景4:高并发业务

调优建议

  • 增加 TiDB 的最大连接数
  • 调整 TiDB 的线程池大小
  • 优化查询语句,减少锁竞争
  • 考虑使用连接池

常见问题(FAQ)

Q1: 如何确定参数的最优值?

A1: 参数的最优值取决于集群的规模、业务需求和硬件资源等因素。可以通过以下方式确定:

  • 参考官方文档的调优建议
  • 在测试环境中进行性能测试,找到合适的参数值
  • 逐步调整参数,观察性能变化
  • 监控集群性能,根据实际情况调整

Q2: 参数调优会影响集群的稳定性吗?

A2: 不合理的参数调整可能会影响集群的稳定性。因此,参数调优应遵循以下原则:

  • 从保守到激进,逐步调整
  • 每次只调整少数参数
  • 调整后观察一段时间,评估效果
  • 准备回滚计划,出现问题时及时回滚

Q3: 升级 TiDB 版本后,需要重新调整参数吗?

A3: 升级 TiDB 版本后,建议重新评估参数配置。新版本可能会引入新的参数,或者对现有参数的默认值进行调整。因此,升级后需要根据新版本的特性和建议重新调整参数。

Q4: 如何监控参数调整的效果?

A4: 可以通过以下方式监控参数调整的效果:

  • 使用 Prometheus + Grafana 监控集群性能指标
  • 关注 QPS、延迟、CPU 使用率、内存使用率等关键指标
  • 对比调整前后的性能数据
  • 测试业务功能是否正常

Q5: 所有参数都需要调整吗?

A5: 不需要。大多数默认参数已经针对常见场景进行了优化,只有在特定场景下才需要调整。应根据实际需求和性能瓶颈,针对性地调整相关参数。

Q6: 参数调优的顺序是什么?

A6: 参数调优的顺序建议如下:

  1. 首先调整硬件资源相关的参数
  2. 然后调整核心功能参数
  3. 最后调整高级功能参数
  4. 从影响范围小的参数开始调整,逐步调整影响范围大的参数