外观
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.port | 4000 | TiDB 服务器的 SQL 端口 | 根据实际需求调整,确保端口不冲突 |
server.status-port | 10080 | TiDB 服务器的状态端口 | 根据实际需求调整,确保端口不冲突 |
server.host | "0.0.0.0" | TiDB 服务器监听的 IP 地址 | 生产环境中建议绑定特定的 IP 地址 |
server.max-connections | 1000 | TiDB 服务器允许的最大连接数 | 根据业务需求和服务器资源调整,建议设置为 3000-5000 |
server.tcp-keep-alive | true | 是否启用 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_partition | true | 是否启用表分区功能 | 建议启用,支持分区表 |
tidb_enable_clustered_index | true | 是否启用聚簇索引 | 建议启用,提高查询性能 |
tidb_skip_utf8_check | false | 是否跳过 UTF8 检查 | 建议保持默认值,确保数据正确性 |
tidb_constraint_check_in_place | false | 是否在原地检查约束 | 建议保持默认值,提高 DML 性能 |
3. 性能配置
| 参数名 | 默认值 | 说明 | 最佳实践 |
|---|---|---|---|
performance.max-procs | 0 | TiDB 服务器使用的最大 CPU 核心数,0 表示使用所有核心 | 根据服务器资源调整,建议设置为服务器核心数的 70%-80% |
performance.mem-quota-query | 1073741824 | 单个查询允许使用的最大内存,单位:字节 | 根据业务需求调整,建议设置为 4GB-8GB |
performance.txn-total-size-limit | 104857600 | 单个事务允许使用的最大内存,单位:字节 | 根据业务需求调整,建议设置为 1GB-2GB |
performance.max-txn-ttl | 600 | 事务的最大 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-size | 300 | 单个日志文件的最大大小,单位:MB | 根据磁盘空间调整,建议设置为 100-500 MB |
log.max-days | 0 | 日志文件的保留天数,0 表示不自动删除 | 根据磁盘空间调整,建议设置为 7-30 天 |
log.enable-slow-log | true | 是否启用慢查询日志 | 建议启用,便于分析慢查询 |
log.slow-threshold | 300 | 慢查询阈值,单位:毫秒 | 根据业务需求调整,建议设置为 100-500 毫秒 |
5. 事务配置
| 参数名 | 默认值 | 说明 | 最佳实践 |
|---|---|---|---|
txn.mode | "pessimistic" | 事务模式,可选值:"pessimistic"、"optimistic" | 生产环境建议使用 "pessimistic" 模式,避免事务冲突 |
txn.txn-local-latches | false | 是否启用本地锁 | 建议启用,提高事务并发性能 |
txn.enable-1pc | false | 是否启用 1PC 事务 | 建议启用,提高简单事务的性能 |
txn.retry-limit | 10 | 事务重试次数 | 根据业务需求调整,建议设置为 5-20 次 |
PD 配置参数
1. 服务器配置
| 参数名 | 默认值 | 说明 | 最佳实践 |
|---|---|---|---|
server.port | 2379 | PD 服务器的客户端端口 | 根据实际需求调整,确保端口不冲突 |
server.peer-port | 2380 | PD 服务器的 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-replicas | 3 | Region 的最大副本数 | 根据高可用性需求调整,建议设置为 3-5 个 |
3. 调度配置
| 参数名 | 默认值 | 说明 | 最佳实践 |
|---|---|---|---|
schedule.max-snapshot-count | 3 | 单个 TiKV 节点允许的最大 snapshot 数量 | 根据集群规模调整,建议设置为 6-12 |
schedule.max-pending-peer-count | 16 | 单个 TiKV 节点允许的最大 pending peer 数量 | 根据集群规模调整,建议设置为 32-64 |
schedule.split-merge-interval | "1h" | 分裂和合并的最小间隔时间 | 根据业务需求调整,建议设置为 30m-2h |
schedule.max-merge-region-size | 20 | 允许合并的最大 Region 大小,单位:MB | 根据业务需求调整,建议设置为 16-32 MB |
schedule.max-merge-region-keys | 200000 | 允许合并的最大 Region 键数量 | 根据业务需求调整,建议设置为 160000-320000 |
schedule.enable-cross-table-merge | false | 是否允许跨表合并 Region | 根据业务需求调整,建议启用 |
4. 安全配置
| 参数名 | 默认值 | 说明 | 最佳实践 |
|---|---|---|---|
security.enable-ssl | false | 是否启用 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-size | 4 | 存储调度器工作线程池大小 | 根据 CPU 核心数调整,建议设置为 CPU 核心数的 1/4 |
storage.block-cache.capacity | "1GB" | Block cache 容量 | 根据内存大小调整,建议设置为总内存的 30%-40% |
storage.write-buffer-size | "128MB" | 写入缓冲区大小 | 根据内存大小调整,建议设置为 128MB-512MB |
storage.max-write-buffer-number | 5 | 最大写入缓冲区数量 | 根据内存大小调整,建议设置为 3-8 |
3. Raft 配置
| 参数名 | 默认值 | 说明 | 最佳实践 |
|---|---|---|---|
raftstore.raft-min-election-timeout-ticks | 10 | Raft 最小选举超时时间,单位:tick | 建议保持默认值,避免频繁选举 |
raftstore.raft-max-election-timeout-ticks | 20 | Raft 最大选举超时时间,单位:tick | 建议保持默认值,避免频繁选举 |
raftstore.raft-base-tick-interval | "1s" | Raft base tick 间隔 | 建议保持默认值 |
raftstore.raftdb.max-background-jobs | 2 | RaftDB 最大后台作业数 | 根据 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-keys | 144000 | Region 最大键数量 | 根据业务需求调整,建议设置为 100000-200000 |
raftstore.region-split-keys | 96000 | Region 分裂键数量 | 根据业务需求调整,建议设置为 64000-144000 |
TiFlash 配置参数
1. 服务器配置
| 参数名 | 默认值 | 说明 | 最佳实践 |
|---|---|---|---|
server.http_port | 8123 | HTTP 服务端口 | 根据实际需求调整,确保端口不冲突 |
server.tcp_port | 9000 | TCP 服务端口 | 根据实际需求调整,确保端口不冲突 |
server.flash_service_port | 3930 | Flash 服务端口 | 根据实际需求调整,确保端口不冲突 |
server.grpc_port | 20170 | gRPC 服务端口 | 根据实际需求调整,确保端口不冲突 |
2. 存储配置
| 参数名 | 默认值 | 说明 | 最佳实践 |
|---|---|---|---|
storage.data_path | "./data" | 数据存储目录 | 生产环境建议设置为独立的磁盘分区,推荐使用 SSD |
storage.min_bytes_for_wide_part | 0 | 宽分区的最小字节数 | 根据业务需求调整,建议设置为 1048576 |
3. 查询配置
| 参数名 | 默认值 | 说明 | 最佳实践 |
|---|---|---|---|
query.threads | 16 | 查询执行线程数 | 根据 CPU 核心数调整,建议设置为 CPU 核心数的 70%-80% |
query.max_streams | 128 | 最大流数量 | 根据业务需求调整,建议设置为 256-512 |
query.max_bytes_before_external_group_by | "100Mi" | 外部分组前的最大字节数 | 根据内存大小调整,建议设置为 200Mi-500Mi |
TiCDC 配置参数
1. 服务器配置
| 参数名 | 默认值 | 说明 | 最佳实践 |
|---|---|---|---|
server.addr | "0.0.0.0:8300" | TiCDC 服务器的监听地址和端口 | 根据实际需求调整,确保端口不冲突 |
server.gc-ttl | 86400 | GC TTL,单位:秒 | 根据同步延迟调整,建议设置为 86400-604800 秒 |
server.time-zone | "System" | 时区 | 根据业务需求调整,建议设置为与 TiDB 集群一致的时区 |
2. 同步配置
| 参数名 | 默认值 | 说明 | 最佳实践 |
|---|---|---|---|
cdc.anchor-interval | 300000000000 | Anchor 间隔,单位:纳秒 | 根据业务需求调整,建议设置为 300000000000-600000000000 纳秒 |
cdc.sink-uri | "" | 默认 sink URI | 根据业务需求设置,如 "mysql://root:password@127.0.0.1:3306/" |
cdc.sync-point-interval | 3600000000000 | 同步点间隔,单位:纳秒 | 根据业务需求调整,建议设置为 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 = 102. 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 = false3. 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 版本前,查看版本更新日志,了解配置参数的变化
- 升级后,根据新版本的建议调整配置参数
- 测试新版本的配置参数效果,确保集群性能符合预期
