Skip to content

TiDB 配置参数

TiDB 配置参数是控制 TiDB 集群运行行为的关键设置,包括 TiDB 服务器、PD 服务器、TiKV 服务器等组件的配置。合理配置这些参数可以优化 TiDB 集群的性能、可靠性和可用性。本文档详细介绍 TiDB 各组件的主要配置参数、默认值、说明和最佳实践。

配置参数分类

TiDB 配置参数可以分为以下几类:

  • TiDB 配置参数:控制 TiDB 服务器的运行行为,如连接管理、SQL 执行、事务处理等
  • PD 配置参数:控制 PD 服务器的运行行为,如集群管理、调度策略、存储配置等
  • TiKV 配置参数:控制 TiKV 服务器的运行行为,如存储管理、Raft 协议、网络通信等
  • TiFlash 配置参数:控制 TiFlash 服务器的运行行为,如存储管理、查询执行等
  • TiCDC 配置参数:控制 TiCDC 服务器的运行行为,如变更数据捕获、同步策略等

配置参数格式

TiDB 配置参数的格式根据组件不同而有所差异:

  • TiDB 配置参数:使用 TOML 格式,配置文件默认为 tidb.toml
  • PD 配置参数:使用 TOML 格式,配置文件默认为 pd.toml
  • TiKV 配置参数:使用 TOML 格式,配置文件默认为 tikv.toml
  • TiFlash 配置参数:使用 TOML 格式,配置文件默认为 tiflash.toml
  • TiCDC 配置参数:使用 TOML 格式,配置文件默认为 ticdc.toml

TiDB 配置参数

1. 服务器配置

参数名默认值说明最佳实践
server.port4000TiDB 服务器的 SQL 端口根据实际需求调整,确保端口不冲突
server.status-port10080TiDB 服务器的状态端口根据实际需求调整,确保端口不冲突
server.host"0.0.0.0"TiDB 服务器监听的 IP 地址生产环境中建议绑定特定的 IP 地址
server.max-connections1000TiDB 服务器允许的最大连接数根据业务需求和服务器资源调整,建议设置为 3000-5000
server.tcp-keep-alivetrue是否启用 TCP keep-alive建议启用,保持连接活跃
server.oom-action"log"OOM 时的动作,可选值:"log"、"cancel"生产环境建议设置为 "cancel",避免 OOM 导致进程退出

2. SQL 配置

参数名默认值说明最佳实践
sql_mode"STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"SQL 模式根据业务需求调整,兼容 MySQL 应用
tidb_enable_table_partitiontrue是否启用表分区功能建议启用,支持分区表
tidb_enable_clustered_indextrue是否启用聚簇索引建议启用,提高查询性能
tidb_skip_utf8_checkfalse是否跳过 UTF8 检查建议保持默认值,确保数据正确性
tidb_constraint_check_in_placefalse是否在原地检查约束建议保持默认值,提高 DML 性能

3. 性能配置

参数名默认值说明最佳实践
performance.max-procs0TiDB 服务器使用的最大 CPU 核心数,0 表示使用所有核心根据服务器资源调整,建议设置为服务器核心数的 70%-80%
performance.mem-quota-query1073741824单个查询允许使用的最大内存,单位:字节根据业务需求调整,建议设置为 4GB-8GB
performance.txn-total-size-limit104857600单个事务允许使用的最大内存,单位:字节根据业务需求调整,建议设置为 1GB-2GB
performance.max-txn-ttl600事务的最大 TTL,单位:秒根据业务需求调整,建议设置为 300-600 秒
performance.force-priority"NO_PRIORITY"查询的默认优先级根据业务需求调整,支持 "LOW_PRIORITY"、"NORMAL_PRIORITY"、"HIGH_PRIORITY"

4. 日志配置

参数名默认值说明最佳实践
log.level"info"日志级别,可选值:"debug"、"info"、"warn"、"error"生产环境建议设置为 "info",调试时设置为 "debug"
log.file""日志文件路径,空字符串表示输出到标准输出生产环境建议设置为具体的日志文件路径
log.max-size300单个日志文件的最大大小,单位:MB根据磁盘空间调整,建议设置为 100-500 MB
log.max-days0日志文件的保留天数,0 表示不自动删除根据磁盘空间调整,建议设置为 7-30 天
log.enable-slow-logtrue是否启用慢查询日志建议启用,便于分析慢查询
log.slow-threshold300慢查询阈值,单位:毫秒根据业务需求调整,建议设置为 100-500 毫秒

5. 事务配置

参数名默认值说明最佳实践
txn.mode"pessimistic"事务模式,可选值:"pessimistic"、"optimistic"生产环境建议使用 "pessimistic" 模式,避免事务冲突
txn.txn-local-latchesfalse是否启用本地锁建议启用,提高事务并发性能
txn.enable-1pcfalse是否启用 1PC 事务建议启用,提高简单事务的性能
txn.retry-limit10事务重试次数根据业务需求调整,建议设置为 5-20 次

PD 配置参数

1. 服务器配置

参数名默认值说明最佳实践
server.port2379PD 服务器的客户端端口根据实际需求调整,确保端口不冲突
server.peer-port2380PD 服务器的 peer 端口根据实际需求调整,确保端口不冲突
server.host"127.0.0.1"PD 服务器监听的 IP 地址生产环境中建议绑定特定的 IP 地址

2. 集群配置

参数名默认值说明最佳实践
cluster.name"pd"PD 集群名称根据实际需求调整,确保唯一
cluster.replication.location-labels[]用于 Region 副本放置的标签根据部署拓扑设置,如 ["zone", "rack", "host"]
cluster.max-replicas3Region 的最大副本数根据高可用性需求调整,建议设置为 3-5 个

3. 调度配置

参数名默认值说明最佳实践
schedule.max-snapshot-count3单个 TiKV 节点允许的最大 snapshot 数量根据集群规模调整,建议设置为 6-12
schedule.max-pending-peer-count16单个 TiKV 节点允许的最大 pending peer 数量根据集群规模调整,建议设置为 32-64
schedule.split-merge-interval"1h"分裂和合并的最小间隔时间根据业务需求调整,建议设置为 30m-2h
schedule.max-merge-region-size20允许合并的最大 Region 大小,单位:MB根据业务需求调整,建议设置为 16-32 MB
schedule.max-merge-region-keys200000允许合并的最大 Region 键数量根据业务需求调整,建议设置为 160000-320000
schedule.enable-cross-table-mergefalse是否允许跨表合并 Region根据业务需求调整,建议启用

4. 安全配置

参数名默认值说明最佳实践
security.enable-sslfalse是否启用 SSL生产环境建议启用,提高通信安全性
security.ssl-cert-path""SSL 证书路径启用 SSL 时必须设置
security.ssl-key-path""SSL 私钥路径启用 SSL 时必须设置
security.ssl-ca-path""SSL CA 证书路径启用 SSL 时必须设置

TiKV 配置参数

1. 服务器配置

参数名默认值说明最佳实践
server.addr"0.0.0.0:20160"TiKV 服务器的监听地址和端口根据实际需求调整,确保端口不冲突
server.status-addr"0.0.0.0:20180"TiKV 服务器的状态地址和端口根据实际需求调整,确保端口不冲突
server.end-point""TiKV 服务器的外部访问地址生产环境中建议设置为外部可访问的地址

2. 存储配置

参数名默认值说明最佳实践
storage.data-dir"./data"数据存储目录生产环境建议设置为独立的磁盘分区
storage.engine"rocksdb"存储引擎,可选值:"rocksdb"目前仅支持 rocksdb
storage.scheduler-worker-pool-size4存储调度器工作线程池大小根据 CPU 核心数调整,建议设置为 CPU 核心数的 1/4
storage.block-cache.capacity"1GB"Block cache 容量根据内存大小调整,建议设置为总内存的 30%-40%
storage.write-buffer-size"128MB"写入缓冲区大小根据内存大小调整,建议设置为 128MB-512MB
storage.max-write-buffer-number5最大写入缓冲区数量根据内存大小调整,建议设置为 3-8

3. Raft 配置

参数名默认值说明最佳实践
raftstore.raft-min-election-timeout-ticks10Raft 最小选举超时时间,单位:tick建议保持默认值,避免频繁选举
raftstore.raft-max-election-timeout-ticks20Raft 最大选举超时时间,单位:tick建议保持默认值,避免频繁选举
raftstore.raft-base-tick-interval"1s"Raft base tick 间隔建议保持默认值
raftstore.raftdb.max-background-jobs2RaftDB 最大后台作业数根据 CPU 核心数调整,建议设置为 4-8
raftstore.raftdb.write-buffer-size"64MB"RaftDB 写入缓冲区大小根据内存大小调整,建议设置为 64MB-256MB

4. Region 配置

参数名默认值说明最佳实践
raftstore.region-max-size"96MB"Region 最大大小根据业务需求调整,建议设置为 64MB-128MB
raftstore.region-split-size"64MB"Region 分裂大小根据业务需求调整,建议设置为 48MB-96MB
raftstore.region-max-keys144000Region 最大键数量根据业务需求调整,建议设置为 100000-200000
raftstore.region-split-keys96000Region 分裂键数量根据业务需求调整,建议设置为 64000-144000

TiFlash 配置参数

1. 服务器配置

参数名默认值说明最佳实践
server.http_port8123HTTP 服务端口根据实际需求调整,确保端口不冲突
server.tcp_port9000TCP 服务端口根据实际需求调整,确保端口不冲突
server.flash_service_port3930Flash 服务端口根据实际需求调整,确保端口不冲突
server.grpc_port20170gRPC 服务端口根据实际需求调整,确保端口不冲突

2. 存储配置

参数名默认值说明最佳实践
storage.data_path"./data"数据存储目录生产环境建议设置为独立的磁盘分区,推荐使用 SSD
storage.min_bytes_for_wide_part0宽分区的最小字节数根据业务需求调整,建议设置为 1048576

3. 查询配置

参数名默认值说明最佳实践
query.threads16查询执行线程数根据 CPU 核心数调整,建议设置为 CPU 核心数的 70%-80%
query.max_streams128最大流数量根据业务需求调整,建议设置为 256-512
query.max_bytes_before_external_group_by"100Mi"外部分组前的最大字节数根据内存大小调整,建议设置为 200Mi-500Mi

TiCDC 配置参数

1. 服务器配置

参数名默认值说明最佳实践
server.addr"0.0.0.0:8300"TiCDC 服务器的监听地址和端口根据实际需求调整,确保端口不冲突
server.gc-ttl86400GC TTL,单位:秒根据同步延迟调整,建议设置为 86400-604800 秒
server.time-zone"System"时区根据业务需求调整,建议设置为与 TiDB 集群一致的时区

2. 同步配置

参数名默认值说明最佳实践
cdc.anchor-interval300000000000Anchor 间隔,单位:纳秒根据业务需求调整,建议设置为 300000000000-600000000000 纳秒
cdc.sink-uri""默认 sink URI根据业务需求设置,如 "mysql://root:password@127.0.0.1:3306/"
cdc.sync-point-interval3600000000000同步点间隔,单位:纳秒根据业务需求调整,建议设置为 3600000000000-7200000000000 纳秒

配置文件示例

1. TiDB 配置文件示例

toml
# tidb.toml
[server]
port = 4000
status-port = 10080
host = "0.0.0.0"
max-connections = 3000
tcp-keep-alive = true
oom-action = "cancel"

[sql]
sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
tidb_enable_table_partition = true
tidb_enable_clustered_index = true

[performance]
max-procs = 0
mem-quota-query = 4294967296
txn-total-size-limit = 1073741824
txn-entry-size-limit = 6291456

[log]
level = "info"
file = "/tidb-deploy/tidb-4000/log/tidb.log"
max-size = 100
max-days = 7
enable-slow-log = true
slow-threshold = 300

[txn]
mode = "pessimistic"
txn-local-latches = true
enable-1pc = true
retry-limit = 10

2. PD 配置文件示例

toml
# pd.toml
[server]
port = 2379
peer-port = 2380
host = "192.168.0.1"

[cluster]
name = "pd-cluster"
replication.location-labels = ["zone", "rack", "host"]
max-replicas = 3

[schedule]
max-snapshot-count = 6
max-pending-peer-count = 32
split-merge-interval = "1h"
max-merge-region-size = 20
max-merge-region-keys = 200000
enable-cross-table-merge = true

[security]
enable-ssl = false

3. TiKV 配置文件示例

toml
# tikv.toml
[server]
addr = "0.0.0.0:20160"
status-addr = "0.0.0.0:20180"
end-point = "192.168.0.2:20160"

[storage]
data-dir = "/tikv-deploy/tikv-20160/data"
engine = "rocksdb"
scheduler-worker-pool-size = 4
block-cache.capacity = "4GB"
write-buffer-size = "256MB"
max-write-buffer-number = 5

[raftstore]
raft-min-election-timeout-ticks = 10
raft-max-election-timeout-ticks = 20
raft-base-tick-interval = "1s"
raftdb.max-background-jobs = 4

[raftstore.proxy]
peer-max-wait-duration = "10s"

[coprocessor]
end-point-concurrency = 8

[readpool]
coprocessor.use-unified-pool = true
coprocessor.unified-max-thread-count = 8

[rocksdb]
max-background-jobs = 4

[rocksdb.defaultcf]
write-buffer-size = "256MB"
max-write-buffer-number = 5
level0-slowdown-writes-trigger = 12
level0-stop-writes-trigger = 20
max-bytes-for-level-base = "256MB"

[rocksdb.writecf]
write-buffer-size = "256MB"
max-write-buffer-number = 5

[rocksdb-lockcf]
write-buffer-size = "256MB"
max-write-buffer-number = 5

配置参数管理

1. 修改配置文件

使用 tiup cluster edit-config 命令修改 TiDB 集群的配置文件:

bash
# 编辑集群配置文件
tiup cluster edit-config <cluster-name>

2. 应用配置变更

使用 tiup cluster reload 命令应用配置变更:

bash
# 应用所有组件的配置变更
tiup cluster reload <cluster-name>

# 只应用 PD 组件的配置变更
tiup cluster reload <cluster-name> -R pd

# 只应用特定节点的配置变更
tiup cluster reload <cluster-name> -N <node1-ip>:<node1-port>,<node2-ip>:<node2-port>

3. 查看当前配置

使用 tiup cluster config 命令查看 TiDB 集群的当前配置:

bash
# 查看集群配置
tiup cluster config <cluster-name>

配置参数最佳实践

1. 根据业务需求调整

不同的业务场景对配置参数的要求不同,应根据实际业务需求调整配置参数。例如:

  • 对于写入密集型业务,应增加 TiKV 的写入缓冲区大小和最大写入缓冲区数量
  • 对于查询密集型业务,应增加 TiDB 的内存配额和 TiKV 的 Block cache 容量
  • 对于大事务业务,应增加 TiDB 的事务大小限制

2. 根据服务器资源调整

配置参数应根据服务器的 CPU、内存、磁盘等资源情况进行调整。例如:

  • CPU 核心数较多的服务器,可以增加 TiDB 的 max-procs 和 TiKV 的工作线程数
  • 内存较大的服务器,可以增加 TiDB 的内存配额和 TiKV 的 Block cache 容量
  • 使用 SSD 磁盘的服务器,可以调整 TiKV 的存储配置,提高写入性能

3. 逐步调整,持续优化

配置参数的调整应逐步进行,每次调整后观察集群的性能变化,根据实际效果进行优化。建议:

  • 在测试环境中验证配置参数的效果后,再应用到生产环境
  • 记录每次配置调整的内容和效果,便于后续分析和优化
  • 定期审查配置参数,根据业务变化和集群规模调整配置

4. 参考官方文档和最佳实践

TiDB 官方文档提供了详细的配置参数说明和最佳实践,建议定期查看官方文档,了解最新的配置建议。

常见问题(FAQ)

Q1: 如何确定配置参数的最佳值?

A1: 配置参数的最佳值取决于业务场景、集群规模和服务器资源等因素。建议:

  • 参考官方文档的最佳实践
  • 在测试环境中进行性能测试,找到适合自己业务的配置参数
  • 逐步调整配置参数,观察集群性能变化

Q2: 修改配置参数后是否需要重启集群?

A2: 大多数配置参数修改后需要重启相应的组件才能生效,但也有一些参数支持在线修改。可以通过 tiup cluster reload 命令应用配置变更,该命令会自动重启需要重启的组件。

Q3: 如何监控配置参数的效果?

A3: 可以通过以下方式监控配置参数的效果:

  • 使用 Grafana 监控面板查看集群的性能指标
  • 查看 TiDB、PD、TiKV 等组件的日志
  • 执行性能测试,比较配置参数修改前后的性能变化

Q4: 配置参数过多,如何快速找到需要调整的参数?

A4: 可以根据业务需求和性能瓶颈,重点关注以下几类配置参数:

  • 服务器配置:端口、连接数等
  • 性能配置:内存配额、CPU 核心数等
  • 存储配置:缓冲区大小、Block cache 容量等
  • 调度配置:Region 大小、副本数等

Q5: 如何备份和恢复配置参数?

A5: 可以通过以下方式备份和恢复配置参数:

  • 使用 tiup cluster config 命令导出配置文件
  • 手动备份配置文件
  • 在需要恢复时,使用 tiup cluster edit-config 命令修改配置文件,然后应用配置变更

Q6: 不同版本的 TiDB 配置参数有什么差异?

A6: 不同版本的 TiDB 可能会新增、修改或删除一些配置参数。建议:

  • 在升级 TiDB 版本前,查看版本更新日志,了解配置参数的变化
  • 升级后,根据新版本的建议调整配置参数
  • 测试新版本的配置参数效果,确保集群性能符合预期