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.yaml | tiup cluster edit-config <集群名> |
pd.toml | TiUP 依据 topology 自动生成 | /opt/data/tidb/deploy/pd-2379/conf/pd.toml | 改 topology server_configs.pd → tiup cluster reload |
tikv.toml | TiUP 依据 topology 自动生成 | /opt/data/tidb/deploy/tikv-20160/conf/tikv.toml | 同理 |
tidb.toml | TiUP 依据 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 文件一一对应。
本环境 /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 均由上表生成。
| 键 | 含义 | 默认值 | 本环境取值/说明 |
|---|
user | 部署与运行用户 | tidb | root;需对该用户配置 SSH 免密 |
ssh_port | 所有节点 SSH 端口 | 22 | 22;各节点需一致 |
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 互相争抢。
| 段 | 说明 | 高可用要求 |
|---|
pd_servers | 集群元数据与全局调度,每个成员一个 PD | ≥3 才满足 HA;initial-cluster 由 TiUP 自动生成 |
tikv_servers | 实际数据存储与读写,建议跨节点分布 | 副本数=3 时≥3 节点 |
tidb_servers | SQL 层,无状态 | 可单节点、可多节点扩容 |
tiflash_servers | 列存引擎(HTAP) | 虚拟化内存受限本环境不部署(注释保留) |
monitoring_servers | Prometheus/Grafana/Alertmanager | 虚拟化受限时可暂缓 |
cdc_servers | TiCDC 增量同步 | 按需 |
pump_servers/drainer_servers | TiDB Binlog | 按需 |
见第三、四、五节;server_configs.pd/tikv/tidb 下的键即对应 .toml 的同名段/键,故下文以 .toml 形式讲解,其等价 yaml 写法为 server_configs.<组件>.<段>.<键> = 值。
本环境实际生成文件(TiUP 由 server_configs.pd 生成):
[log]
level = "info"
[replication]
max-replicas = 3
[schedule]
max-snapshot-count = 4
| 键 | 含义 | 默认值 |
|---|
level | 日志级别 | info(本环境) |
format | 日志格式 json/text | text |
disable-timestamp | 是否禁用时间戳 | false |
| 键 | 含义 | 默认值 | 本环境 / 说明 |
|---|
max-replicas | 每个 Region 的副本数 | 3 | 3;跨节点 Raft 高可用;改 1 省盘但失容错 |
location-labels | 用于感知拓扑的 label 顺序 | [] | 多机房/多机架灾难隔离时配置 |
strictly-match-label | 是否强制按 label 分布 | false | 配合 location-labels 使用 |
| 键 | 含义 | 默认值 | 说明 |
|---|
max-snapshot-count | 单节点并发接收的 Region 快照上限 | 3 | 本环境 4;调度搬迁时限制并发压力 |
max-merge-region-size | 可合并 Region 的大小上限(MiB) | 20 | 过大可合并不了,过小碎片多 |
max-merge-region-keys | 可合并 Region 的 key 数上限 | 200000 | |
merge-schedule-limit | Region 合并调度数 | 8 | |
leader-schedule-limit | leader 调度并发数 | 4 | |
region-schedule-limit | Region 调度并发数 | 2048 | |
replica-schedule-limit | 副本调度并发数 | 64 | |
max-store-down-time | 判定 store 宕机的时长 | 30m | 之后标记 Down |
low-space-ratio | 触发低空间调度的空间比例 | 0.8 | |
| 键 | 所属段 | 含义 | 默认值 |
|---|
name | pd-server | PD 名称 | 自动 |
data-dir | pd-server | PD 数据目录 | data |
client-urls / advertise-client-urls | pd-server | 客户端接入 | http://0.0.0.0:2379 |
peer-urls / advertise-peer-urls | pd-server | 节点间通信 | http://0.0.0.0:2380 |
initial-cluster | pd-server | 初始集群成员 | TiUP 自动生成 |
lease | pd-server | 选举租期 | 3s |
quota-backend-bytes | pd-server | etcd 后端存储配额 | 0(不限制) |
dashboard.public-path-prefix | dashboard | Dashboard 反代访问路径前缀 | 空(实测 pd 显示该键为空) |
cacert-path/cert-path/key-path | security | TLS 证书 | 启用 TLS 时设置 |
| 键 | 含义 | 默认值 |
|---|
raftdb.loglevel | PD 内嵌 Raft 日志级别 | info |
raftdb.max-background-jobs | Raft DB 后台任务 | 8 |
本环境实际生成文件:
[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"
| 键 | 所属段 | 含义 | 默认值 | 本环境 / 说明 |
|---|
addr | 顶层/server | 监听地址 | 127.0.0.1:20160 | 0.0.0.0:20160 |
status-addr | 顶层 | 状态/metrics HTTP | 127.0.0.1:20180 | 0.0.0.0:20180 |
advertise-addr | 顶层 | 通告给 PD 的地址 | 同 addr | hostname:20160 |
grpc-concurrency | server | gRPC 处理并发 | 1 | 虚拟化裁剪 2;物理机 CPU≥8 设 8 |
grpc-concurrent-stream | server | gRPC 并发流数 | 1024 | 实测 1024 |
grpc-memory-pool-quota | server | gRPC 内存池配额 | 不限制 | 控制内存 |
status.server-metrics-interval-secs | server | 状态上报间隔 | 60s | |
log.level | log | 日志级别 | info | 本环境 info |
log.format | log | 日志格式 | text | |
| 键 | 所属段 | 含义 | 默认值 | 本环境 / 说明 |
|---|
storage.data-dir | storage | 数据目录 | ./ | /opt/data/tidb/data/tikv-20160 |
storage.capacity | storage | 单机存储容量上限 | 磁盘容量 | 超过判定磁盘满(Compose 用 --capacity) |
storage.block-cache.capacity | storage.block-cache | RocksDB block cache 上限 | 总内存 45% | 虚拟化裁剪 1GB;直接决定常驻内存 |
storage.block-cache.shared | storage.block-cache | 是否所有 CF 共享缓存 | true | |
storage.scheduler-concurrency | storage | 调度器并发数 | 524288 | 大量并发写时调高 |
storage.scheduler-worker-pool-size | storage | 调度写线程池 | 核数的 80% | |
block-cache.capacity 实测经 SHOW CONFIG 无独立输出(本环境 1GB 生效)。物理机建议为总内存 30-40%,避免与 TiDB/PD 竞争。
| 键 | 含义 | 默认值 | 本环境 / 说明 |
|---|
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 | 是否启用 PreVote | true | 防分区脑裂 |
raftdb.max-background-jobs | raftdb | Raft 日志 RocksDB 后台任务 | 8 |
| 键 | 所属段 | 含义 | 默认值 | 本环境 / 说明 |
|---|
max-background-jobs | rocksdb | KV RocksDB 后台任务(压缩/刷盘) | 8 | 虚拟化 4;物理机约核数 50% |
compaction.style | rocksdb | 压缩策略 | level | 一般不动 |
block-size | rocksdb | 块大小(KB) | 64 | |
max-open-files | rocksdb | 可打开 SST 文件数 | 40960 | |
write-buffer-size | rocksdb | 单个 memtable 大小(MB) | 64 | |
max-write-buffer-number | rocksdb | memtable 最大数量 | 5 | |
min-write-buffer-number-to-merge | rocksdb | 需合并的 memtable 数 | 1 | |
max-background-jobs | raftdb | Raft 日志 DB 后台任务 | 8 | 虚拟化 2 |
| 键 | 所属段 | 含义 | 默认值 | 说明 |
|---|
readpool.unified.max-thread-count | readpool | 统一读取线程池大小 | | 小内存环境可调低 |
coprocessor.region-max-size | coprocessor | 单 Region 处理上限(MiB) | 384 | |
pessimistic-txn.enabled | pessimistic-txn | 是否启用悲观事务 | true | 建议保持开启 |
pessimistic-txn.wait-for-lock-timeout | pessimistic-txn | 悲观锁等待超时(ms) | 3000 | 高锁争用时调大 |
本环境实际生成文件:
[log]
level = "warn"
[performance]
max-procs = 2
| 键 | 含义 | 默认值 |
|---|
level | SQL 层日志级别 | info→TiUP 默认 warn;本环境 warn |
format | 日志格式 | text |
slow-threshold | 慢查询阈值(ms) | 300 |
timestamp | 日志是否带时间戳 | true |
| 键 | 含义 | 默认值 | 本环境 / 说明 |
|---|
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_concurrency | distsql 并发 | -1(自动) | 大查询并发控制 |
index-lookup-size-limit | 单索引回表扫描行上限 | 20000 | 实测 tidb_index_lookup_size=20000 |
| 键/变量 | 含义 | 默认值 |
|---|
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_cache | apply cache 内存 | 33554432 |
tidb_mem_quota_binding_cache | binding cache 内存 | 67108864 |
tidb_index_lookup_concurrency | 索引回表并发 | -1 |
tidb_index_lookup_join_concurrency | 索引 join 并发 | -1 |
tidb_index_lookup_pushdown_policy | 回表下推策略 | hint-only |
performance.topn | TOPN 优化 | — |
performance.cross-join | 是否阻止全表交叉连接 | true |
内存类变量(tidb_mem_quota_query 等)可用 SET SESSION/GLOBAL 在线调整,无需改配置文件;见《命令与运维指南》。
Compose 部署无 .toml,等价项通过 command: 传参。映射关系:
| 命令行参数 | 等价 .toml / 项 | 含义 |
|---|
--capacity=60GB | tikv storage.capacity | 声明该 TiKV 可用存储上限,防 "disk full" 误判 |
--pd-endpoints=tidb-pd:2379 | tikv --pd | 指定 PD 集群地址 |
--client-urls/--peer-urls/--advertise-* | pd pd-server | 定义 PD 入口与通报地址 |
--store=tikv --path=tidb-pd:2379 | tidb 连接方式 | TiDB 连 PD,store 为 tikv |
--addr/--status-addr | tikv addr/status-addr | TiKV 监听地址 |
--data-dir=/data/pd | pd data-dir | PD 数据目录 |
Compose 架构为 1 PD + 3 TiKV 的"小集群",PD 单点、副本默认 3。生产追求 PD 高可用请用三节点 topology 部署。
tiup cluster edit-config tidb-prod
tiup cluster reload tidb-prod
tiup cluster reload tidb-prod -R tikv
tiup cluster reload tidb-prod -N tidb-node1:2379
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(自动重建变更服务)。
| 参数 | 默认值 | 虚拟机(本环境) | 物理机目标 |
|---|
resource_control.cpu_quota | 不限 | 2 | CPU 核数 |
resource_control.memory_limit | 不限 | 7g | 总内存 |
TiKV storage.block-cache.capacity | 总内存 45% | 1GB | 总内存 30-40% |
TiKV server.grpc-concurrency | 1 | 2 | 8 |
TiKV raftstore.apply-pool-size | 2 | 2 | ≥3 |
TiKV rocksdb.max-background-jobs | 8 | 4 | CPU 核数 50% |
TiDB performance.max-procs | 自动 | 2 | CPU 核数 |
TiDB performance.txn-total-size-limit | 100M | 100M | 按业务事务大小调(需 ≤ 内存) |
TiDB max-index-length | 3072 | 3072 | 3072~12288 |
TiDB tidb_mem_quota_query | 1GiB | 1GiB | 按查询集大小 |
PD replication.max-replicas | 3 | 3 | 3(跨机容错) |
PD schedule.max-snapshot-count | 3 | 4 | 4 |