备份自动调节 从 v5.4 版本开始引入

    为了减少备份任务对在线集群的影响,从 TiDB v5.4.0 起,引入了自动调节功能,此功能默认开启。在集群资源占用率较高的情况下,备份功能可以通过该功能自动限制备份使用的资源,从而减少对集群的影响。

    如果你希望减少备份对集群的影响,那么,你可以开启自动调节功能。开启该功能后,备份功能会在不过度影响集群的前提下,以最快的速度进行数据备份。

    或者,你也可以使用 TiKV 配置项 或参数 进行备份限速。

    自动调节功能默认打开,无需额外配置。

    注意

    v5.3.x 版本的集群,在升级到 v5.4.0 及以上版本后,自动调节功能默认关闭,需手动开启。

    TiKV 支持自动调节功能,因此,在开启或关闭该功能时,无需重启集群。你可以运行以下命令动态启动或停止备份自动调节功能:

    在离线备份场景中,你也可以使用 tikv-ctlbackup.num-threads 修改为更大的数字,从而提升备份速度。

    自动调节是一个粗粒度的限流方案,它的优势在无需手动调节。但是,由于调节的粒度不够精确,该功能有可能无法彻底移除备份对集群的影响。

    该功能的已知问题及其解决方案如下:

    • 问题 1:对于以写负载为主的集群,自动调节可能会让工作负载和备份进入一种“正反馈循环”:备份会占用较多资源,导致工作负载使用的资源变少。此时,自动调节会误以为资源使用率下降,从而让备份运行得更加激进。在这种情况下,自动调节实际上失效。

      • 解决方法:手动调节 backup.num-threads,限制处理备份的工作线程数量。具体原理如下:

        目前,备份过程会涉及大量的 SST 解码、编码、压缩、解压,而此过程会需要消耗大量的 CPU 资源。另外,以往的测试证明,备份过程中,用于备份的线程池的 CPU 利用率接近 100%。也就是说,备份任务会占用大量 CPU 资源。通过调整备份任务使用的线程数量,TiKV 可以控制备份任务使用的 CPU 核心数,从而减少其任务对集群性能的影响。

    • 问题 3:对于流量抖动非常大的场景,由于自动调节每隔 (默认为一分钟)才会计算出新的限流,所以可能无法很好地应对流量抖动非常厉害的场景。

      • 解决方法:关闭自动调节。

    自动调节会通过调节备份时使用的工作线程池的大小,保证集群的 CPU 总体使用率不超过某个特定的值。

    这个特性还有两个配置项未在 TiKV 文档中列出,仅在内部调试使用,正常备份时无需配置这两个参数。

      • 通过控制备份任务占用的资源,自动调节会保证该节点中至少有该数量的核心会保持空闲的状态。
      • 默认值:round(0.2 * vCPU)

    以下是一个使用自动调节功能的示例,其中 * 代表集群中被备份任务占用的 CPU, 代表其它任务占用的 CPU,- 代表空闲 CPU。

    1. |--------| 系统总共有 8 颗逻辑 CPU
    2. |****----| 默认配置 `backup.num-threads` `4`。请注意,在任何时候自动调节都不会让线程池大小大于 `backup.num-threads`
    3. |^^****--| 默认配置 `auto-tune-remain-threads` = round(8 * 0.2) = 2。自动调节会将备份任务的线程池大小调节至 `4`

    在监控面板的“Backup CPU Utilization”中,可以看到自动限流目前选择的线程池的大小:

    图片中,黄色半透明的填充部分为开启自动调节后备份任务可用的线程,即备份任务能使用的所有资源。从中可以看到备份任务的 CPU 使用率不会超过黄色部分。