备份自动调节 从 v5.4 版本开始引入
为了减少备份任务对在线集群的影响,从 TiDB v5.4.0 起,引入了自动调节功能,此功能默认开启。在集群资源占用率较高的情况下,备份功能可以通过该功能自动限制备份使用的资源,从而减少对集群的影响。
如果你希望减少备份对集群的影响,那么,你可以开启自动调节功能。开启该功能后,备份功能会在不过度影响集群的前提下,以最快的速度进行数据备份。
或者,你也可以使用 TiKV 配置项 或参数 进行备份限速。
自动调节功能默认打开,无需额外配置。
注意
v5.3.x 版本的集群,在升级到 v5.4.0 及以上版本后,自动调节功能默认关闭,需手动开启。
TiKV 支持自动调节功能,因此,在开启或关闭该功能时,无需重启集群。你可以运行以下命令动态启动或停止备份自动调节功能:
在离线备份场景中,你也可以使用 tikv-ctl
把 backup.num-threads
修改为更大的数字,从而提升备份速度。
自动调节是一个粗粒度的限流方案,它的优势在无需手动调节。但是,由于调节的粒度不够精确,该功能有可能无法彻底移除备份对集群的影响。
该功能的已知问题及其解决方案如下:
问题 1:对于以写负载为主的集群,自动调节可能会让工作负载和备份进入一种“正反馈循环”:备份会占用较多资源,导致工作负载使用的资源变少。此时,自动调节会误以为资源使用率下降,从而让备份运行得更加激进。在这种情况下,自动调节实际上失效。
解决方法:手动调节
backup.num-threads
,限制处理备份的工作线程数量。具体原理如下:目前,备份过程会涉及大量的 SST 解码、编码、压缩、解压,而此过程会需要消耗大量的 CPU 资源。另外,以往的测试证明,备份过程中,用于备份的线程池的 CPU 利用率接近 100%。也就是说,备份任务会占用大量 CPU 资源。通过调整备份任务使用的线程数量,TiKV 可以控制备份任务使用的 CPU 核心数,从而减少其任务对集群性能的影响。
问题 3:对于流量抖动非常大的场景,由于自动调节每隔 (默认为一分钟)才会计算出新的限流,所以可能无法很好地应对流量抖动非常厉害的场景。
- 解决方法:关闭自动调节。
自动调节会通过调节备份时使用的工作线程池的大小,保证集群的 CPU 总体使用率不超过某个特定的值。
这个特性还有两个配置项未在 TiKV 文档中列出,仅在内部调试使用,正常备份时无需配置这两个参数。
:
- 通过控制备份任务占用的资源,自动调节会保证该节点中至少有该数量的核心会保持空闲的状态。
- 默认值:
round(0.2 * vCPU)
以下是一个使用自动调节功能的示例,其中 *
代表集群中被备份任务占用的 CPU, 代表其它任务占用的 CPU,-
代表空闲 CPU。
|--------| 系统总共有 8 颗逻辑 CPU。
|****----| 默认配置 `backup.num-threads` 为 `4`。请注意,在任何时候自动调节都不会让线程池大小大于 `backup.num-threads`。
|^^****--| 默认配置 `auto-tune-remain-threads` = round(8 * 0.2) = 2。自动调节会将备份任务的线程池大小调节至 `4`。
在监控面板的“Backup CPU Utilization”中,可以看到自动限流目前选择的线程池的大小:
图片中,黄色半透明的填充部分为开启自动调节后备份任务可用的线程,即备份任务能使用的所有资源。从中可以看到备份任务的 CPU 使用率不会超过黄色部分。