TiDB配置文件调优原创
# 前言
TiDB 是一个开源分布式数据库,兼容 MySQL 协议,具有水平扩展能力和高可用性。在实际生产环境中,合理的配置调优对于充分发挥 TiDB 的性能至关重要。本文以一个典型的硬件配置(5台72核1TB内存的 TiKV 物理机和5台128GB内存32核的 TiDB 虚拟机)为例,详细讲解 TiDB 配置文件的调优方法,并结合参数背后的原理进行深入分析。
# TiDB 配置调优
在 TiDB 的配置文件中,性能、连接池管理和日志记录是优化的重点。以下是推荐的配置及其原因分析。
# YAML 配置代码
log:
level: "info" # 设置日志级别为 info,便于排查问题
slow-threshold: 300 # 慢查询阈值(单位:毫秒)
performance:
max-txn-ttl: 60000 # 最大事务生存时间(单位:毫秒),避免长事务占用资源
txn-total-size-limit: 1073741824 # 单个事务最大大小限制(1GB)
committer-concurrency: 32 # 提交事务的并发度(与 CPU 核数匹配)
max-memory: 21474836480 # 单个 SQL 使用的最大内存(20GB)
prepared-plan-cache:
enabled: true # 启用 SQL 预编译缓存,减少 SQL 解析开销
tidb:
max-connections: 4096 # 最大连接数,适配高并发场景
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 参数解析与调优原理
# 1. 性能相关参数
performance.max-txn-ttl
- 作用:限制事务的最大生存时间,防止长事务占用资源。
- 原理:长事务会导致锁资源被长期占用,进而阻塞其他事务。通过限制事务生存时间,可以及时释放锁资源,提升系统并发能力。
performance.txn-total-size-limit
- 作用:控制单个事务的大小,防止大事务影响系统性能。
- 原理:TiDB 的事务是分布式事务,事务过大会导致网络传输和 TiKV 的压力增大。设置合理的事务大小限制可以避免性能下降。
performance.committer-concurrency
- 作用:提高事务提交时的并发度。
- 原理:事务提交涉及多个 TiKV 节点,增加并发度可以充分利用 CPU 资源,加速事务提交过程,特别是在高并发场景下。
# 2. 连接池相关参数
max-connections
- 作用:限制最大连接数,适配高并发场景。
- 原理:TiDB 的连接池管理可以有效避免资源竞争。当连接数过多时,可能导致 CPU 和内存资源耗尽,影响系统稳定性。
prepared-plan-cache.enabled
- 作用:启用 SQL 预编译缓存,提高查询效率。
- 原理:对于重复执行的 SQL 语句,缓存可以减少解析和优化的时间,显著提升查询性能。
# TiKV 配置调优
TiKV 是 TiDB 的存储层,负责数据存储、分布式事务和 Region 管理。以下是推荐配置及其原因分析。
# YAML 配置代码
log-level: "info" # 设置日志级别为 info,便于排查问题
server:
grpc-concurrency: 8 # gRPC 并发数,建议设置为 CPU 核数的 1/9
storage:
block-cache:
capacity: "300GB" # RocksDB 缓存大小(物理机内存的 30%)
scheduler-worker-pool-size: 16 # 调度线程池大小,建议设置为 CPU 核数的 1/4
raftstore:
sync-log: false # 禁用日志同步以提高写入性能(如需高可靠性可设为 true)
apply-pool-size: 16 # Raft 日志应用线程数(CPU 核数的 1/4)
store-pool-size: 32 # Raft Store 线程数(与 CPU 核数匹配)
rocksdb:
max-background-jobs: 16 # RocksDB 后台线程数(优化磁盘 IO)
target-file-size-base: "128MB" # SST 文件目标大小(单位:MB)
coprocessor:
region-max-size: "512MB" # Region 最大大小(单位:MB)
region-split-size: "480MB" # Region 分裂阈值(单位:MB)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 参数解析与调优原理
# 1. 存储相关参数
storage.block-cache.capacity
- 作用:设置 RocksDB 的缓存大小。
- 原理:RocksDB 使用缓存来加速数据读写操作,合理分配缓存可以减少磁盘 IO,提升性能。但缓存过大可能影响其他组件的内存分配。
raftstore.sync-log
- 作用:禁用日志同步以提高写入性能。
- 原理:日志同步会增加磁盘写入延迟,禁用同步可以显著提高吞吐量。在高性能场景下推荐关闭,但需要根据业务容忍度评估数据可靠性。
# 2. 调度与分裂相关参数
coprocessor.region-max-size
和region-split-size
- 作用:控制 Region 的大小和分裂阈值。
- 原理:Region 是 TiKV 的数据分片,过小的 Region 会增加调度开销,影响性能。通过增大 Region 大小,可以减少分裂频率,提高系统稳定性。
# PD 配置调优
PD 是 TiDB 的调度层,负责全局元信息管理和负载均衡。以下是推荐配置及其原因分析。
# YAML 配置代码
log:
level: "info" # 设置日志级别为 info,便于排查问题
schedule:
max-snapshot-count: 8 # 最大快照数量,防止快照占用过多资源
leader-schedule-limit: 8 # Leader 调度限制
region-schedule-limit: 64 # Region 调度限制
max-merge-region-size: 20 # 允许合并的最大 Region 大小(单位:MB)
max-merge-region-keys: 200000 # 允许合并的最大 Region 键数
replication:
max-replicas: 3 # 副本数量(建议设置为 3)
location-labels: ["zone", "rack", "host"] # 副本分布策略,确保高可用性
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 参数解析与调优原理
# 1. 调度相关参数
schedule.max-snapshot-count
- 作用:限制快照传输数量,防止资源占用过多。
- 原理:快照传输是 Region 调度的重要环节,但过多的快照会占用网络和磁盘资源,影响集群性能。
schedule.leader-schedule-limit
- 作用:限制 Leader 调度频率。
- 原理:频繁的 Leader 调度会影响查询性能,合理限制调度频率可以提升集群稳定性。
上次更新: 4/24/2025