Carry の Blog Carry の Blog
首页
  • Nginx
  • Prometheus
  • Iptables
  • Systemd
  • Firewalld
  • Docker
  • Sshd
  • DBA工作笔记
  • MySQL
  • Redis
  • TiDB
  • Elasticsearch
  • Python
  • Shell
  • MySQL8-SOP手册
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Carry の Blog

好记性不如烂键盘
首页
  • Nginx
  • Prometheus
  • Iptables
  • Systemd
  • Firewalld
  • Docker
  • Sshd
  • DBA工作笔记
  • MySQL
  • Redis
  • TiDB
  • Elasticsearch
  • Python
  • Shell
  • MySQL8-SOP手册
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • MySQL

  • Redis

  • Keydb

  • TiDB

    • TiCDC同步数据到Kafka
    • 对TiDB中算子的深入理解
    • TiDB使用 TTL (Time to Live) 定期删除过期数据
    • 如何移除TiDB中的表分区
    • TiDB配置文件调优
      • 前言
      • TiDB 配置调优
        • YAML 配置代码
        • 参数解析与调优原理
      • TiKV 配置调优
        • YAML 配置代码
        • 参数解析与调优原理
      • PD 配置调优
        • YAML 配置代码
        • 参数解析与调优原理
    • 深入解析TiFlash:原理、适用场景与调优实践
    • tidb fast ddl
  • MongoDB

  • Elasticsearch

  • Kafka

  • victoriametrics

  • BigData

  • Sqlserver

  • 数据库
  • TiDB
Carry の Blog
2025-04-03
目录

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

# 参数解析与调优原理

# 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

# 参数解析与调优原理

# 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

# 参数解析与调优原理

# 1. 调度相关参数

  • schedule.max-snapshot-count

    • 作用:限制快照传输数量,防止资源占用过多。
    • 原理:快照传输是 Region 调度的重要环节,但过多的快照会占用网络和磁盘资源,影响集群性能。
  • schedule.leader-schedule-limit

    • 作用:限制 Leader 调度频率。
    • 原理:频繁的 Leader 调度会影响查询性能,合理限制调度频率可以提升集群稳定性。
#配置优化#SQL性能#分布式存储
上次更新: 4/24/2025

← 如何移除TiDB中的表分区 深入解析TiFlash:原理、适用场景与调优实践→

最近更新
01
tidb fast ddl
04-04
02
如何移除TiDB中的表分区 原创
04-03
03
深入解析TiFlash:原理、适用场景与调优实践 原创
04-02
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式