TiDB v8.5.5 配置文件详解

详解 TiDB v8.5.5 部署涉及的拓扑文件 topology.yaml、pd.toml、tikv.toml、tidb.toml 全部常用参数含义与默认值,基于三节点集群实际生成文件与官方 config.toml.example 逐项解读,覆盖缓存/并发/线程池/事务限制/索引长度/内存配额等,并给出 systemd 资源单元映射与虚拟化适配建议。目标:掌握 TiDB 各组件配置写法、默认值与调优方向。

TiDB分布式数据库Ubuntu 22.04systemd 托管配置详解2026/10/01

TiDB v8.5.5 配置文件详解

目标:全面解读 TiDB v8.5.5 部署相关的四类配置——拓扑文件 topology.yaml(集群定义,唯一事实来源)、pd.toml(PD 元数据/调度)、tikv.toml(数据引擎)、tidb.toml(SQL 层)。文中 .toml 均取自本环境三节点集群 tidb-node1 上 TiUP 实际生成并经 SHOW CONFIG 验证的文件,参数说明对照官方 config.toml.example 与运行时默认值。Compose 单机部署以命令行参数替代配置文件,文中以映射表对照说明。本文档纯服务视角,假定环境为 Ubuntu 22.04 虚拟机节点(非物理服务器),因此给出虚拟化资源裁剪建议;物理机大内存场景可适当放大。

重要前置说明:本环境为虚拟机节点,非物理服务器

请务必知悉:配置梳理基于 虚拟机节点(非物理服务器) 环境,因此下述多数参数为虚拟化资源的显式裁剪,包括通过 resource_control/systemd CPUQuota、MemoryLimit 限定进程资源,以及 TiKV 的 block-cache.capacity、线程池、后台任务等。生产物理机若 CPU 核数与内存充足,这些裁剪值应相应放大,避免人为造成性能瓶颈。各节均会标注「虚拟化裁剪」与「物理机建议 / 默认值」的差异。

一、配置体系总览

配置对象产生方式资产位置修改方式
topology.yaml手工编写,部署的唯一事实来源中控机 /root/topology.yamltiup cluster edit-config <集群名>
pd.tomlTiUP 依据 topology 自动生成/opt/data/tidb/deploy/pd-2379/conf/pd.toml改 topology server_configs.pd → tiup cluster reload
tikv.tomlTiUP 依据 topology 自动生成/opt/data/tidb/deploy/tikv-20160/conf/tikv.toml同理
tidb.tomlTiUP 依据 topology 自动生成/opt/data/tidb/deploy/tidb-4000/conf/tidb.toml同理
Compose 参数docker-compose.yml command:容器命令行参数改 compose 后 docker compose up -d

注意:TiUP 生成的 .toml 文件头标注 "auto-generated, Do not edit",直接改会被覆盖。正确做法是在 topology.yaml 的 server_configs 或组件段补参数,再执行 tiup cluster reload。本文档给出的 .yaml 写法即 topology.yaml 内的 server_configs.* 段(本环境实际使用此写法),与独立的 .toml 文件一一对应。

二、topology.yaml 详解

本环境 /root/topology.yaml 实际内容(含 server_configs):

global:
  user: "root"
  ssh_port: 22
  deploy_dir: /opt/data/tidb/deploy
  data_dir: /opt/data/tidb/data
  log_dir: /opt/data/tidb/log
  os: "linux"
  arch: "amd64"
  resource_control:
    cpu_quota: 2
    memory_limit: "7g"

server_configs:
  pd:
    log.level: "info"
    replication.max-replicas: 3
    schedule.max-snapshot-count: 4
  tikv:
    log.level: "info"
    server.grpc-concurrency: 2
    raftstore.apply-pool-size: 2
    raftstore.store-pool-size: 2
    storage.block-cache.capacity: "1GB"
    rocksdb.max-background-jobs: 4
    raftdb.max-background-jobs: 2
  tidb:
    log.level: "warn"
    performance.max-procs: 2

pd_servers:
  - host: tidb-node1
  - host: tidb-node2
  - host: tidb-node3

tidb_servers:
  - host: tidb-node1
  - host: tidb-node2
  - host: tidb-node3

tikv_servers:
  - host: tidb-node1
  - host: tidb-node2
  - host: tidb-node3

说明:本环境将组件参数写在 server_configs 段(TiUP 据此生成 .toml)。也可写在 global.server_configs 或在对应组件段下逐组件覆盖。下文讲述的 pd.toml/tikv.toml/tidb.toml 均由上表生成。

2.1 global 段

键含义默认值本环境取值/说明
user部署与运行用户tidbroot;需对该用户配置 SSH 免密
ssh_port所有节点 SSH 端口2222;各节点需一致
deploy_dir程序+配置安装根deploy/opt/data/tidb/deploy;每个组件一个子目录
data_dir数据根data/opt/data/tidb/data;落盘持久化
log_dir日志根log/opt/data/tidb/log;落盘持久化
os / arch目标平台自动探测linux / amd64
resource_control.cpu_quota单进程 CPU 配额(核)不限制2;映射 systemd CPUQuota=2
resource_control.memory_limit单进程内存上限不限制7g;映射 systemd MemoryLimit=7g

虚拟机裁剪:resource_control 让 TiUP 生成的 systemd 单元带 CPUQuota=/MemoryLimit=,从进程级严格限制资源,避免同机 PD/TiKV/TiDB 互相争抢。

2.2 组件段

段说明高可用要求
pd_servers集群元数据与全局调度,每个成员一个 PD≥3 才满足 HA;initial-cluster 由 TiUP 自动生成
tikv_servers实际数据存储与读写,建议跨节点分布副本数=3 时≥3 节点
tidb_serversSQL 层,无状态可单节点、可多节点扩容
tiflash_servers列存引擎(HTAP)虚拟化内存受限本环境不部署(注释保留)
monitoring_serversPrometheus/Grafana/Alertmanager虚拟化受限时可暂缓
cdc_serversTiCDC 增量同步按需
pump_servers/drainer_serversTiDB Binlog按需

2.3 组件级可配项(TiUP 写入对应 .toml)

见第三、四、五节;server_configs.pd/tikv/tidb 下的键即对应 .toml 的同名段/键,故下文以 .toml 形式讲解,其等价 yaml 写法为 server_configs.<组件>.<段>.<键> = 值。

三、pd.toml 详解(Placement Driver)

本环境实际生成文件(TiUP 由 server_configs.pd 生成):

[log]
level = "info"

[replication]
max-replicas = 3

[schedule]
max-snapshot-count = 4

3.1 [log] 日志

键含义默认值
level日志级别info(本环境)
format日志格式 json/texttext
disable-timestamp是否禁用时间戳false

3.2 [replication] 副本/标签

键含义默认值本环境 / 说明
max-replicas每个 Region 的副本数33;跨节点 Raft 高可用;改 1 省盘但失容错
location-labels用于感知拓扑的 label 顺序[]多机房/多机架灾难隔离时配置
strictly-match-label是否强制按 label 分布false配合 location-labels 使用

3.3 [schedule] 调度

键含义默认值说明
max-snapshot-count单节点并发接收的 Region 快照上限3本环境 4;调度搬迁时限制并发压力
max-merge-region-size可合并 Region 的大小上限(MiB)20过大可合并不了,过小碎片多
max-merge-region-keys可合并 Region 的 key 数上限200000
merge-schedule-limitRegion 合并调度数8
leader-schedule-limitleader 调度并发数4
region-schedule-limitRegion 调度并发数2048
replica-schedule-limit副本调度并发数64
max-store-down-time判定 store 宕机的时长30m之后标记 Down
low-space-ratio触发低空间调度的空间比例0.8

3.4 [pd-server]/[security]/[dashboard]/[quota]

键所属段含义默认值
namepd-serverPD 名称自动
data-dirpd-serverPD 数据目录data
client-urls / advertise-client-urlspd-server客户端接入http://0.0.0.0:2379
peer-urls / advertise-peer-urlspd-server节点间通信http://0.0.0.0:2380
initial-clusterpd-server初始集群成员TiUP 自动生成
leasepd-server选举租期3s
quota-backend-bytespd-serveretcd 后端存储配额0(不限制)
dashboard.public-path-prefixdashboardDashboard 反代访问路径前缀空(实测 pd 显示该键为空)
cacert-path/cert-path/key-pathsecurityTLS 证书启用 TLS 时设置

3.5 [raftstore](PD 内嵌的 Raft 相关)

键含义默认值
raftdb.loglevelPD 内嵌 Raft 日志级别info
raftdb.max-background-jobsRaft DB 后台任务8

四、tikv.toml 详解(数据引擎)

本环境实际生成文件:

[log]
level = "info"

[raftdb]
max-background-jobs = 2

[raftstore]
apply-pool-size = 2
store-pool-size = 2

[rocksdb]
max-background-jobs = 4

[server]
grpc-concurrency = 2

[storage]
[storage.block-cache]
capacity = "1GB"

4.1 顶层与 [server]

键所属段含义默认值本环境 / 说明
addr顶层/server监听地址127.0.0.1:201600.0.0.0:20160
status-addr顶层状态/metrics HTTP127.0.0.1:201800.0.0.0:20180
advertise-addr顶层通告给 PD 的地址同 addrhostname:20160
grpc-concurrencyservergRPC 处理并发1虚拟化裁剪 2;物理机 CPU≥8 设 8
grpc-concurrent-streamservergRPC 并发流数1024实测 1024
grpc-memory-pool-quotaservergRPC 内存池配额不限制控制内存
status.server-metrics-interval-secsserver状态上报间隔60s
log.levellog日志级别info本环境 info
log.formatlog日志格式text

4.2 [storage] 与 [storage.block-cache]

键所属段含义默认值本环境 / 说明
storage.data-dirstorage数据目录.//opt/data/tidb/data/tikv-20160
storage.capacitystorage单机存储容量上限磁盘容量超过判定磁盘满(Compose 用 --capacity)
storage.block-cache.capacitystorage.block-cacheRocksDB block cache 上限总内存 45%虚拟化裁剪 1GB;直接决定常驻内存
storage.block-cache.sharedstorage.block-cache是否所有 CF 共享缓存true
storage.scheduler-concurrencystorage调度器并发数524288大量并发写时调高
storage.scheduler-worker-pool-sizestorage调度写线程池核数的 80%

block-cache.capacity 实测经 SHOW CONFIG 无独立输出(本环境 1GB 生效)。物理机建议为总内存 30-40%,避免与 TiDB/PD 竞争。

4.3 [raftstore]

键含义默认值本环境 / 说明
apply-pool-size应用 Raft 日志到 KV 的线程数2虚拟化 2;磁盘写入吞吐关键,物理机≥3
store-pool-size批量提交线程数2本环境 2
raft-max-inflight-msgs最大在途 Raft 消息256
raft-entry-max-size单条 Raft 日志上限(MB)8超过会拆分事务
raft-log-gc-count-limit单 Region 懒删日志数51200
prevote是否启用 PreVotetrue防分区脑裂
raftdb.max-background-jobsraftdbRaft 日志 RocksDB 后台任务8

4.4 [rocksdb](KV 引擎)与 [raftdb]

键所属段含义默认值本环境 / 说明
max-background-jobsrocksdbKV RocksDB 后台任务(压缩/刷盘)8虚拟化 4;物理机约核数 50%
compaction.stylerocksdb压缩策略level一般不动
block-sizerocksdb块大小(KB)64
max-open-filesrocksdb可打开 SST 文件数40960
write-buffer-sizerocksdb单个 memtable 大小(MB)64
max-write-buffer-numberrocksdbmemtable 最大数量5
min-write-buffer-number-to-mergerocksdb需合并的 memtable 数1
max-background-jobsraftdbRaft 日志 DB 后台任务8虚拟化 2

4.5 [readpool]/[coprocessor]/[pessimistic-txn]

键所属段含义默认值说明
readpool.unified.max-thread-countreadpool统一读取线程池大小小内存环境可调低
coprocessor.region-max-sizecoprocessor单 Region 处理上限(MiB)384
pessimistic-txn.enabledpessimistic-txn是否启用悲观事务true建议保持开启
pessimistic-txn.wait-for-lock-timeoutpessimistic-txn悲观锁等待超时(ms)3000高锁争用时调大

五、tidb.toml 详解(SQL 层)

本环境实际生成文件:

[log]
level = "warn"

[performance]
max-procs = 2

5.1 [log]

键含义默认值
levelSQL 层日志级别info→TiUP 默认 warn;本环境 warn
format日志格式text
slow-threshold慢查询阈值(ms)300
timestamp日志是否带时间戳true

5.2 [performance]

键含义默认值本环境 / 说明
max-procs使用的 CPU 核数(GOMAXPROCS)自动识别虚拟化 2
txn-total-size-limit单个事务总大小上限(字节)104857600(100M)实测 104857600;报错 Transaction is too large 时调高
txn-entry-size-limit单条 KV 大小上限(字节)6291456(6M)实测 6291456
enable-stats-cache-mem-quota启用统计信息缓存配额true实测 true
tidb_max_distsql_concurrencydistsql 并发-1(自动)大查询并发控制
index-lookup-size-limit单索引回表扫描行上限20000实测 tidb_index_lookup_size=20000

5.3 常用补充项(写 server_configs.tidb 或运行时变量)

键/变量含义默认值
max-index-length新建索引长度上限(Byte)3072(合法范围 [3072, 3072*4=12288],超长报 key was too long)
tidb_mem_quota_query单查询内存配额1073741824(1GiB),实测默认 1GiB;可 session/global 动态调
tidb_mem_quota_analyze统计信息收集内存-1(不限)
tidb_mem_quota_apply_cacheapply cache 内存33554432
tidb_mem_quota_binding_cachebinding cache 内存67108864
tidb_index_lookup_concurrency索引回表并发-1
tidb_index_lookup_join_concurrency索引 join 并发-1
tidb_index_lookup_pushdown_policy回表下推策略hint-only
performance.topnTOPN 优化—
performance.cross-join是否阻止全表交叉连接true

内存类变量(tidb_mem_quota_query 等)可用 SET SESSION/GLOBAL 在线调整,无需改配置文件;见《命令与运维指南》。

六、Compose 单机:配置以命令行参数承载

Compose 部署无 .toml,等价项通过 command: 传参。映射关系:

命令行参数等价 .toml / 项含义
--capacity=60GBtikv storage.capacity声明该 TiKV 可用存储上限,防 "disk full" 误判
--pd-endpoints=tidb-pd:2379tikv --pd指定 PD 集群地址
--client-urls/--peer-urls/--advertise-*pd pd-server定义 PD 入口与通报地址
--store=tikv --path=tidb-pd:2379tidb 连接方式TiDB 连 PD,store 为 tikv
--addr/--status-addrtikv addr/status-addrTiKV 监听地址
--data-dir=/data/pdpd data-dirPD 数据目录

Compose 架构为 1 PD + 3 TiKV 的"小集群",PD 单点、副本默认 3。生产追求 PD 高可用请用三节点 topology 部署。

七、修改配置的正确流程

# 1. 编辑集群配置(写入 server_configs 或组件段)
tiup cluster edit-config tidb-prod

# 2. 重新部署使配置生效(滚动,可限定组件/实例)
tiup cluster reload tidb-prod
tiup cluster reload tidb-prod -R tikv        # 只重载 tikv
tiup cluster reload tidb-prod -N tidb-node1:2379

# 3. 确认生效
tiup cluster display tidb-prod
# 或直接查看目标文件 / 运行时配置
cat /opt/data/tidb/deploy/tikv-20160/conf/tikv.toml
mysql -h127.0.0.1 -P4000 -u root -e "SHOW CONFIG WHERE Name='performance.txn-total-size-limit';"

Compose 则:改 docker-compose.yml → docker compose up -d(自动重建变更服务)。

八、调优速查(虚拟机 vs 物理机)

参数默认值虚拟机(本环境)物理机目标
resource_control.cpu_quota不限2CPU 核数
resource_control.memory_limit不限7g总内存
TiKV storage.block-cache.capacity总内存 45%1GB总内存 30-40%
TiKV server.grpc-concurrency128
TiKV raftstore.apply-pool-size22≥3
TiKV rocksdb.max-background-jobs84CPU 核数 50%
TiDB performance.max-procs自动2CPU 核数
TiDB performance.txn-total-size-limit100M100M按业务事务大小调(需 ≤ 内存)
TiDB max-index-length307230723072~12288
TiDB tidb_mem_quota_query1GiB1GiB按查询集大小
PD replication.max-replicas333(跨机容错)
PD schedule.max-snapshot-count344