- 关于 TiDB
- 快速上手
- 应用开发
- 概览
- 快速开始
- 示例程序
- 连接到 TiDB
- 数据库模式设计
- 数据写入
- 数据读取
- 事务
- 优化 SQL 性能
- 故障诊断
- 引用文档
- 云原生开发环境
- 部署标准集群
- 数据迁移
- 运维操作
- 监控与告警
- 故障诊断
- 性能调优
- 优化手册
- 配置调优
- SQL 性能调优
- SQL 性能调优概览
- 理解 TiDB 执行计划
- SQL 优化流程
- 控制执行计划
- 教程
- 同城多中心部署
- 两地三中心部署
- 同城两中心部署
- 读取历史数据
- 使用 Stale Read 功能读取历史数据(推荐)
- 使用系统变量
tidb_snapshot
读取历史数据
- 最佳实践
- Placement Rules 使用文档
- Load Base Split 使用文档
- Store Limit 使用文档
- TiDB 工具
- 功能概览
- 适用场景
- 工具下载
- TiUP
- 文档地图
- 概览
- 术语及核心概念
- TiUP 组件管理
- FAQ
- 故障排查
- TiUP 命令参考手册
- 命令概览
- TiUP 命令
- TiUP Cluster 命令
- TiUP Cluster 命令概览
- tiup cluster audit
- tiup cluster check
- tiup cluster clean
- tiup cluster deploy
- tiup cluster destroy
- tiup cluster disable
- tiup cluster display
- tiup cluster edit-config
- tiup cluster enable
- tiup cluster help
- tiup cluster import
- tiup cluster list
- tiup cluster patch
- tiup cluster prune
- tiup cluster reload
- tiup cluster rename
- tiup cluster replay
- tiup cluster restart
- tiup cluster scale-in
- tiup cluster scale-out
- tiup cluster start
- tiup cluster stop
- tiup cluster template
- tiup cluster upgrade
- TiUP DM 命令
- TiUP DM 命令概览
- tiup dm audit
- tiup dm deploy
- tiup dm destroy
- tiup dm disable
- tiup dm display
- tiup dm edit-config
- tiup dm enable
- tiup dm help
- tiup dm import
- tiup dm list
- tiup dm patch
- tiup dm prune
- tiup dm reload
- tiup dm replay
- tiup dm restart
- tiup dm scale-in
- tiup dm scale-out
- tiup dm start
- tiup dm stop
- tiup dm template
- tiup dm upgrade
- TiDB 集群拓扑文件配置
- DM 集群拓扑文件配置
- TiUP 镜像参考指南
- TiUP 组件文档
- PingCAP Clinic 诊断服务 (Technical Preview)
- TiDB Operator
- Dumpling
- TiDB Lightning
- TiDB Data Migration
- 关于 Data Migration
- 快速开始
- 部署 DM 集群
- 入门指南
- 进阶教程
- 运维管理
- 参考手册
- 使用示例
- 异常解决
- 版本发布历史
- Backup & Restore (BR)
- TiDB Binlog
- TiCDC
- TiUniManager
- sync-diff-inspector
- TiSpark
- 参考指南
- 架构
- 监控指标
- 安全加固
- 权限
- SQL
- SQL 语言结构和语法
- SQL 语句
ADD COLUMN
ADD INDEX
ADMIN
ADMIN CANCEL DDL
ADMIN CHECKSUM TABLE
ADMIN CHECK [TABLE|INDEX]
ADMIN SHOW DDL [JOBS|QUERIES]
ADMIN SHOW TELEMETRY
ALTER DATABASE
ALTER INDEX
ALTER INSTANCE
ALTER PLACEMENT POLICY
ALTER TABLE
ALTER TABLE COMPACT
ALTER USER
ANALYZE TABLE
BACKUP
BATCH
BEGIN
CHANGE COLUMN
CHANGE DRAINER
CHANGE PUMP
COMMIT
CREATE [GLOBAL|SESSION] BINDING
CREATE DATABASE
CREATE INDEX
CREATE PLACEMENT POLICY
CREATE ROLE
CREATE SEQUENCE
CREATE TABLE LIKE
CREATE TABLE
CREATE USER
CREATE VIEW
DEALLOCATE
DELETE
DESC
DESCRIBE
DO
DROP [GLOBAL|SESSION] BINDING
DROP COLUMN
DROP DATABASE
DROP INDEX
DROP PLACEMENT POLICY
DROP ROLE
DROP SEQUENCE
DROP STATS
DROP TABLE
DROP USER
DROP VIEW
EXECUTE
EXPLAIN ANALYZE
EXPLAIN
FLASHBACK TABLE
FLUSH PRIVILEGES
FLUSH STATUS
FLUSH TABLES
GRANT <privileges>
GRANT <role>
INSERT
KILL [TIDB]
LOAD DATA
LOAD STATS
MODIFY COLUMN
PREPARE
RECOVER TABLE
RENAME INDEX
RENAME TABLE
REPLACE
RESTORE
REVOKE <privileges>
REVOKE <role>
ROLLBACK
SELECT
SET DEFAULT ROLE
SET [NAMES|CHARACTER SET]
SET PASSWORD
SET ROLE
SET TRANSACTION
SET [GLOBAL|SESSION] <variable>
SHOW [BACKUPS|RESTORES]
SHOW ANALYZE STATUS
SHOW [GLOBAL|SESSION] BINDINGS
SHOW BUILTINS
SHOW CHARACTER SET
SHOW COLLATION
SHOW [FULL] COLUMNS FROM
SHOW CONFIG
SHOW CREATE PLACEMENT POLICY
SHOW CREATE SEQUENCE
SHOW CREATE TABLE
SHOW CREATE USER
SHOW DATABASES
SHOW DRAINER STATUS
SHOW ENGINES
SHOW ERRORS
SHOW [FULL] FIELDS FROM
SHOW GRANTS
SHOW INDEX [FROM|IN]
SHOW INDEXES [FROM|IN]
SHOW KEYS [FROM|IN]
SHOW MASTER STATUS
SHOW PLACEMENT
SHOW PLACEMENT FOR
SHOW PLACEMENT LABELS
SHOW PLUGINS
SHOW PRIVILEGES
SHOW [FULL] PROCESSSLIST
SHOW PROFILES
SHOW PUMP STATUS
SHOW SCHEMAS
SHOW STATS_HEALTHY
SHOW STATS_HISTOGRAMS
SHOW STATS_META
SHOW STATUS
SHOW TABLE NEXT_ROW_ID
SHOW TABLE REGIONS
SHOW TABLE STATUS
SHOW [FULL] TABLES
SHOW [GLOBAL|SESSION] VARIABLES
SHOW WARNINGS
SHUTDOWN
SPLIT REGION
START TRANSACTION
TABLE
TRACE
TRUNCATE
UPDATE
USE
WITH
- 数据类型
- 函数与操作符
- 聚簇索引
- 约束
- 生成列
- SQL 模式
- 表属性
- 事务
- 视图
- 分区表
- 临时表
- 缓存表
- 字符集和排序
- Placement Rules in SQL
- 系统表
mysql
- INFORMATION_SCHEMA
- Overview
ANALYZE_STATUS
CLIENT_ERRORS_SUMMARY_BY_HOST
CLIENT_ERRORS_SUMMARY_BY_USER
CLIENT_ERRORS_SUMMARY_GLOBAL
CHARACTER_SETS
CLUSTER_CONFIG
CLUSTER_HARDWARE
CLUSTER_INFO
CLUSTER_LOAD
CLUSTER_LOG
CLUSTER_SYSTEMINFO
COLLATIONS
COLLATION_CHARACTER_SET_APPLICABILITY
COLUMNS
DATA_LOCK_WAITS
DDL_JOBS
DEADLOCKS
ENGINES
INSPECTION_RESULT
INSPECTION_RULES
INSPECTION_SUMMARY
KEY_COLUMN_USAGE
METRICS_SUMMARY
METRICS_TABLES
PARTITIONS
PLACEMENT_POLICIES
PROCESSLIST
REFERENTIAL_CONSTRAINTS
SCHEMATA
SEQUENCES
SESSION_VARIABLES
SLOW_QUERY
STATISTICS
TABLES
TABLE_CONSTRAINTS
TABLE_STORAGE_STATS
TIDB_HOT_REGIONS
TIDB_HOT_REGIONS_HISTORY
TIDB_INDEXES
TIDB_SERVERS_INFO
TIDB_TRX
TIFLASH_REPLICA
TIKV_REGION_PEERS
TIKV_REGION_STATUS
TIKV_STORE_STATUS
USER_PRIVILEGES
VIEWS
METRICS_SCHEMA
- UI
- CLI
- 命令行参数
- 配置文件参数
- 系统变量
- 存储引擎
- 遥测
- 错误码
- 通过拓扑 label 进行副本调度
- 常见问题解答 (FAQ)
- 版本发布历史
- 术语表
BR 自动调节 从 v5.4 版本开始引入
在 TiDB v5.4.0 之前,默认情况下,使用 BR 工具进行备份任务时使用的线程数量占总逻辑 CPU 数量的 75%。在没有限速的前提下,备份会消耗大量的集群资源,这会对在线集群的性能造成相当大的影响。虽然你可以通过调节线程池的大小的方式来减少备份对集群性能的影响,但观察负载、手动调节线程池大小也是一件繁琐的事情。
为了减少备份任务对在线集群的影响,从 TiDB v5.4.0 起,BR 引入了自动调节功能,此功能会默认开启。在集群资源占用率较高的情况下,BR 可以通过该功能自动限制备份使用的资源,从而减少对集群的影响。
使用场景
如果你希望减少 BR 备份对集群的影响,那么,你可以开启自动调节功能。开启该功能后,BR 会在不过度影响集群的前提下,以最快的速度进行备份。
或者,你也可以使用 TiKV 配置项 backup.num-threads
或参数 --ratelimit
进行备份限速。
使用方法
自动调节功能默认打开,无需额外配置。
v5.3.x 版本的集群,在升级到 v5.4.0 及以上版本后,自动调节功能默认关闭,需手动开启。
如需开启 BR 自动调节功能,可以通过把 TiKV 配置项 backup.enable-auto-tune
设置为 true
的方式来完成。
TiKV 支持动态配置自动调节功能,因此,在开启或关闭该功能时,无需重启集群。你可以运行以下命令动态启动或停止 BR 自动调节功能:
tikv-ctl modify-tikv-config -n backup.enable-auto-tune -v <true|false>
在离线备份场景中,你也可以使用 tikv-ctl
把 backup.num-threads
修改为更大的数字,从而提升备份速度。
使用限制
自动调节是一个粗粒度的限流方案,它的优势在无需手动调节。但是,由于调节的粒度不够精确,该功能有可能无法彻底移除备份对集群的影响。
该功能的已知问题及其解决方案如下:
问题 1:对于以写负载为主的集群,自动调节可能会让工作负载和备份进入一种“正反馈循环”:备份会占用较多资源,导致工作负载使用的资源变少。此时,自动调节会误以为资源使用率下降,从而让 BR 运行得更加激进。在这种情况下,自动调节实际上失效。
解决方法:手动调节
backup.num-threads
,限制处理备份的工作线程数量。具体原理如下:目前,备份过程会涉及大量的 SST 解码、编码、压缩、解压,而此过程会需要消耗大量的 CPU 资源。另外,以往的测试证明,备份过程中,用于备份的线程池的 CPU 利用率接近 100%。也就是说,备份任务会占用大量 CPU 资源。通过调整备份任务使用的线程数量,TiKV 可以控制备份任务使用的 CPU 核心数,从而减少其任务对集群性能的影响。
问题 2:对于存在热点的集群,产生热点的 TiKV 节点可能会被过度限流,从而拉慢备份的整体进度。
- 解决方法:消除热点节点,或者在热点节点上关闭自动调节(关闭此功能可能会导致集群性能降低)。
问题 3:对于流量抖动非常大的场景,由于自动调节每隔
auto-tune-refresh-interval
(默认为一分钟)才会计算出新的限流,所以可能无法很好地应对流量抖动非常厉害的场景。- 解决方法:关闭自动调节。
实现原理
自动调节会通过调节 BR 备份时使用的工作线程池的大小,保证集群的 CPU 总体使用率不超过某个特定的值。
这个特性还有两个配置项未在 TiKV 文档中列出,仅在内部调试使用,正常备份时无需配置这两个参数。
backup.auto-tune-remain-threads
:- 通过控制备份任务占用的资源,自动调节会保证该节点中至少有该数量的核心会保持空闲的状态。
- 默认值:
round(0.2 * vCPU)
backup.auto-tune-refresh-interval
:- 每隔该值的时间段,自动调节会刷新统计信息并重新计算备份任务使用的 CPU 核心数的上限。
- 默认值:
1m
以下是一个使用自动调节功能的示例,其中 *
代表集群中被备份任务占用的 CPU,^
代表其它任务占用的 CPU,-
代表空闲 CPU。
|--------| 系统总共有 8 颗逻辑 CPU。
|****----| 默认配置 `backup.num-threads` 为 `4`。请注意,在任何时候自动调节都不会让线程池大小大于 `backup.num-threads`。
|^^****--| 默认配置 `auto-tune-remain-threads` = round(8 * 0.2) = 2。自动调节会将备份任务的线程池大小调节至 `4`。
|^^^^**--| 由于集群的工作负载加重,自动调节将备份任务的线程池大小调节至 `2`。调节后,集群中仍有 2 个 CPU 核心数保持空闲。
在监控面板的 “Backup CPU Utilization” 中,可以看到自动限流目前选择的线程池的大小:
图片中,黄色半透明的填充部分为开启自动调节后备份任务可用的线程,即备份任务能使用的所有资源。从中可以看到备份任务的 CPU 使用率不会超过黄色部分。