PingKai Logo下载

物理复制场景下的系统变量检查

使用基于物理复制的主备集群容灾时,物理复制会同步持久化在 mysql.global_variables 中的全局系统变量值。如果主备集群的 TiDB 内存、TiKV 节点数量或整体资源规格不同,主集群上的部分资源相关调参值在备集群作为 standby 提供只读访问时,或切换为 primary 后,都可能不再合适。

本文介绍使用物理复制时需要重点关注的全局系统变量,以及推荐的设置方式。

设置建议

  • 支持百分比的变量,优先使用百分比,避免使用具体容量值。
  • 支持自动调整的变量,优先使用自动值,避免固化主集群上的资源估算值。
  • 主集群已手工设置为具体数值的资源类变量,按备集群资源复核。
  • 主备集群资源规格一致且相关变量都保留默认值时,通常无需调整。

按资源类型检查系统变量

以下列出各变量的默认值、物理复制场景下的关注原因和设置建议。如果主集群已根据业务需求修改这些变量,需要结合备集群资源重新评估。备集群资源评估覆盖备集群作为 standby 提供只读访问,以及切换为 primary 后承载业务两种场景。

内存上限和 OOM 控制

tidb_server_memory_limit

  • 默认值:80%
  • 关注原因:该变量指定 TiDB 实例的内存限制。可以将该变量值设为百分比格式,表示内存用量占总内存的百分比;也可以将变量值设为内存大小。具体容量值会作为固定值同步到备集群。
  • 设置建议:建议保留默认值 80%。如需降低备集群内存使用上限,优先设置为百分比,不建议设置为主集群上的具体容量值。

tidb_server_memory_limit_gc_trigger

  • 默认值:70%
  • 关注原因:该变量控制 TiDB 达到 tidb_server_memory_limit 的指定比例时主动触发 Golang GC 的阈值。
  • 设置建议:如果主集群已调整该阈值,按备集群 TiDB 内存上限和 GC 开销复核。

tidb_server_memory_limit_sess_min_size

  • 默认值:134217728(即 128 MiB)
  • 关注原因:该变量指定 TiDB 内存超限时 SQL 语句被终止的最小内存用量。
  • 设置建议:如果主集群已调整该值,按备集群 TiDB 内存规格和会话内存使用情况复核。

tidb_mem_quota_query

  • 默认值:1073741824 (1 GiB)
  • 关注原因:该变量用来设置单个会话整体的内存使用限制。
  • 设置建议:如果主集群已设置为更大或更小的具体值,按备集群 TiDB 内存规格复核。

tidb_mem_quota_analyze

  • 默认值:-1
  • 关注原因:该变量用来控制 TiDB 更新统计信息时的最大总内存占用。当变量值为负数或零时,TiDB 不对更新统计信息的前后台任务进行内存限制。
  • 设置建议:该变量目前为实验特性,内存统计可能存在误差;如果主集群已设置为具体内存上限,按备集群 TiDB 内存规格和统计信息更新压力复核。

tidb_mem_quota_apply_cache

  • 默认值:33554432 (32 MiB)
  • 关注原因:该变量用来设置 Apply 算子中局部 Cache 的内存使用阈值。
  • 设置建议:如果主集群已调大,按备集群 TiDB 内存规格复核。

tidb_tmp_table_max_size

  • 默认值:67108864
  • 关注原因:该变量用于限制单个临时表的最大大小。
  • 设置建议:如果主集群已调大,按备集群 TiDB 内存和临时表使用情况复核。

tidb_stats_cache_mem_quota

  • 默认值:0,表示自动设置统计信息缓存的内存使用上限为总内存的一半。
  • 关注原因:该变量控制 TiDB 统计信息缓存的内存使用上限。
  • 设置建议:建议保留默认值 0。如果设置为具体字节数,需要按备集群 TiDB 实例内存重新评估。

缓存和 Plan Cache

tidb_mem_quota_binding_cache

  • 默认值:67108864 (64 MiB)
  • 关注原因:该变量用来设置存放 binding 的缓存的内存使用阈值。
  • 设置建议:如果主集群已调大,按备集群 TiDB 内存规格和 binding 数量复核。

tidb_schema_cache_size

  • 默认值:536870912 (512 MiB)
  • 关注原因:该变量用来控制 TiDB schema 信息缓存的大小。设置为 0 表示不打开缓存限制功能。
  • 设置建议:如果主集群已设置为具体缓存大小,按备集群 TiDB 内存规格和 schema 数量复核。

tidb_schema_version_cache_limit

  • 默认值:16
  • 关注原因:该变量用于限制 TiDB 实例可以缓存多少个历史版本的表结构信息。
  • 设置建议:如果主集群已调大,按备集群 TiDB 内存规格和 DDL 频率复核。

tidb_session_plan_cache_size

  • 默认值:100
  • 关注原因:该变量用来控制 Plan Cache 最多能够缓存的计划数量。
  • 设置建议:如果主集群已手工调大,按备集群 TiDB 内存复核。

tidb_prepared_plan_cache_size

  • 默认值:100
  • 关注原因:该变量用来控制单个 SESSION 的 Prepared Plan Cache 最多能够缓存的计划数量。
  • 设置建议:该变量已废弃;如需调整 Plan Cache 大小,优先复核 tidb_session_plan_cache_size

tidb_non_prepared_plan_cache_size

  • 默认值:100
  • 关注原因:该变量用来控制非 Prepare 语句执行计划缓存最多能够缓存的计划数量。
  • 设置建议:该变量已废弃;如需调整 Plan Cache 大小,优先复核 tidb_session_plan_cache_size

tidb_plan_cache_max_plan_size

  • 默认值:2097152(即 2 MiB)
  • 关注原因:该变量用来控制可以缓存的 Prepare 或非 Prepare 语句执行计划的最大大小。
  • 设置建议:如果主集群已调大,按备集群 TiDB 内存规格复核。

tidb_prepared_plan_cache_memory_guard_ratio

  • 默认值:0.1
  • 关注原因:该变量用来控制 Prepared Plan Cache 触发内存保护机制的阈值。
  • 设置建议:如果主集群已调整,按备集群 TiDB 内存规格和 Plan Cache 使用情况复核。

tidb_instance_plan_cache_max_size

  • 默认值:125829120(即 120 MiB)
  • 关注原因:该变量用于设置 Instance Plan Cache 的最大内存使用量。
  • 设置建议:Instance Plan Cache 目前为实验特性,不建议在生产环境中使用;如果主集群已启用并调整该值,按备集群 TiDB 内存规格复核。

tidb_instance_plan_cache_reserved_percentage

  • 默认值:0.1
  • 关注原因:该变量用于控制 Instance Plan Cache 内存驱逐后的空闲内存百分比。
  • 设置建议:Instance Plan Cache 目前为实验特性,不建议在生产环境中使用;如果主集群已启用并调整该值,按备集群 TiDB 内存规格复核。

max_prepared_stmt_count

  • 默认值:-1
  • 关注原因:该变量指定当前实例中 PREPARE 语句的最大数量。值为 -1 时表示不限制。
  • 设置建议:如果主集群已设置为较大的具体数量,按备集群 TiDB 内存规格和连接规模复核。

Statement Summary 相关

tidb_stmt_summary_max_stmt_count

  • 默认值:3000
  • 关注原因:该变量设置 statement summary tables 在内存中保存的语句的最大数量。
  • 设置建议:如果主集群已手工调大,按备集群 TiDB 内存复核。

tidb_stmt_summary_history_size

  • 默认值:24
  • 关注原因:该变量设置 statement summary tables 的历史记录容量。
  • 设置建议:如果主集群已手工调大,按备集群 TiDB 内存复核。

tidb_stmt_summary_max_sql_length

  • 默认值:4096
  • 关注原因:该变量用来控制 Statement Summary Tables 和 TiDB Dashboard 中显示的 SQL 字符串长度。
  • 设置建议:如果主集群已手工调大,按备集群 TiDB 内存复核。

GOGC Tuner 相关

tidb_enable_gogc_tuner

  • 默认值:ON
  • 关注原因:该变量用来控制是否开启 GOGC Tuner。
  • 设置建议:如果主集群关闭了该功能,按备集群 TiDB 内存压力复核是否仍需保持关闭。

tidb_gogc_tuner_threshold

  • 默认值:0.6
  • 关注原因:该变量用来控制 GOGC Tuner 自动调节的最大内存阈值,超过阈值后 GOGC Tuner 会停止工作。
  • 设置建议:如果主集群已调整,按备集群 TiDB 内存上限和 GC 开销复核。

tidb_gogc_tuner_max_value

  • 默认值:500
  • 关注原因:该变量用来控制 GOGC Tuner 可调节 GOGC 的最大值。
  • 设置建议:如果主集群已调整,按备集群 TiDB 内存压力和 GC 开销复核。

tidb_gogc_tuner_min_value

  • 默认值:100
  • 关注原因:该变量用来控制 GOGC Tuner 可调节 GOGC 的最小值。
  • 设置建议:如果主集群已调整,按备集群 TiDB 内存压力和 GC 开销复核。

CPU / 并发相关

tidb_gc_concurrency

  • 默认值:-1
  • 关注原因:该变量用于控制垃圾回收 (GC) 过程中的并发线程数。默认情况下,该变量值为 -1,TiDB 将根据负载情况自动决定适当的线程数。
  • 设置建议:建议保留默认值 -1。如果设置为具体线程数,需要按备集群 TiKV 节点数量、CPU 和业务负载重新评估。

tidb_executor_concurrency

  • 默认值:5
  • 关注原因:该变量用来统一设置各个 SQL 算子的并发度。
  • 设置建议:如果主集群已手工调大,按备集群 CPU 资源复核。

tidb_distsql_scan_concurrency

  • 默认值:15
  • 关注原因:该变量用来设置 scan 操作的并发度。
  • 设置建议:如果主集群已手工调大,按备集群 CPU 和 TiKV 承载能力复核。

tidb_analyze_distsql_scan_concurrency

  • 默认值:4
  • 关注原因:该变量用来设置执行 ANALYZEscan 操作的并发度。当设置为 0 时,TiDB 会根据集群规模自适应调整并发度。
  • 设置建议:如果主集群已手工设置为更大的具体值,按备集群规模复核。

tidb_index_lookup_concurrency

  • 默认值:-1
  • 关注原因:该变量用来设置 index lookup 操作的并发度。默认值 -1 表示使用 tidb_executor_concurrency 的值。
  • 设置建议:该变量已废弃;如需调整相关并发度,优先复核 tidb_executor_concurrency

tidb_index_lookup_join_concurrency

  • 默认值:-1
  • 关注原因:该变量用来设置 index lookup join 算法的并发度。默认值 -1 表示使用 tidb_executor_concurrency 的值。
  • 设置建议:该变量已废弃;如需调整相关并发度,优先复核 tidb_executor_concurrency

tidb_index_serial_scan_concurrency

  • 默认值:1
  • 关注原因:该变量用来设置顺序 scan 操作的并发度。
  • 设置建议:如果主集群已手工调大,按备集群 CPU 和 TiKV 承载能力复核。

tidb_sysproc_scan_concurrency

  • 默认值:1
  • 关注原因:该变量用来设置 TiDB 执行内部 SQL 语句时 scan 操作的并发度。当设置为 0 时,TiDB 会根据集群规模自适应调整并发度。
  • 设置建议:如果主集群已手工设置为更大的具体值,按备集群规模复核。

tidb_committer_concurrency

  • 默认值:128
  • 关注原因:该变量用于控制单个事务提交阶段执行提交相关请求的 goroutine 数量。
  • 设置建议:如果主集群已手工调大,按备集群 CPU 和 TiKV 写入能力复核。

tidb_auto_analyze_concurrency

  • 默认值:1
  • 关注原因:该变量用来设置单个自动统计信息收集任务内部的并发度。
  • 设置建议:如果主集群已手工调大,按备集群 CPU 和统计信息收集压力复核。

tidb_auto_build_stats_concurrency

  • 默认值:1
  • 关注原因:该变量用来设置执行统计信息自动更新的并发度。
  • 设置建议:如果主集群已手工调大,按备集群 CPU 和统计信息更新压力复核。

tidb_build_stats_concurrency

  • 默认值:2
  • 关注原因:该变量用来设置 ANALYZE 语句执行时并发度。
  • 设置建议:如果主集群已手工调大,按备集群 CPU 和业务查询压力复核。

tidb_build_sampling_stats_concurrency

  • 默认值:2
  • 关注原因:该变量用来设置 ANALYZE 过程中的采样并发度。
  • 设置建议:如果主集群已手工调大,按备集群 CPU 和业务查询压力复核。

tidb_analyze_partition_concurrency

  • 默认值:2
  • 关注原因:该变量用于 TiDB analyze 分区表时,写入分区表统计信息的并发度。
  • 设置建议:如果主集群已手工调大,按备集群 CPU 和统计信息更新压力复核。

tidb_merge_partition_stats_concurrency

  • 默认值:1
  • 关注原因:该变量用于 TiDB analyze 分区表时,对分区表统计信息进行合并时的并发度。
  • 设置建议:如果主集群已手工调大,按备集群 CPU 和统计信息更新压力复核。

tidb_ddl_flashback_concurrency

  • 默认值:64
  • 关注原因:该变量用来控制 FLASHBACK CLUSTER 的并发数。
  • 设置建议:如果主集群已手工调大,按备集群 CPU、TiKV 节点数量和磁盘能力复核。

tidb_ddl_reorg_worker_cnt

  • 默认值:4
  • 关注原因:该变量用来设置 DDL 操作 re-organize 阶段的并发度。
  • 设置建议:如果主集群已手工调大,按备集群 CPU、TiKV 节点数量和写入能力复核。

TiKV / TTL / DDL / I/O 相关

tidb_store_limit

  • 默认值:0
  • 关注原因:该变量用于限制 TiDB 同时向 TiKV 发送的请求的最大数量,0 表示没有限制。
  • 设置建议:如果主集群已设置为具体限制,按备集群 TiKV 节点数量和请求压力复核。

tidb_txn_commit_batch_size

  • 默认值:16384
  • 关注原因:该变量用于控制 TiDB 向 TiKV 发送的事务提交请求的批量大小。
  • 设置建议:如果主集群已手工调大,按备集群 TiKV 写入能力和 raft entry 大小限制复核。

tidb_ddl_reorg_batch_size

  • 默认值:256
  • 关注原因:该变量用来设置 DDL 操作 re-organize 阶段的 batch size。
  • 设置建议:如果主集群已手工调大,按备集群 TiKV 写入能力和 DDL 回填压力复核。

tidb_ddl_reorg_max_write_speed

  • 默认值:0
  • 关注原因:该变量用于限制每个 TiKV 节点写入的带宽,仅在开启添加索引加速功能时生效。默认值 0 表示不限制写入带宽。
  • 设置建议:如果主集群已调整,按备集群 TiKV 写入能力和 tidb_ddl_enable_fast_reorg 设置复核。

tidb_ddl_disk_quota

  • 默认值:107374182400 (100 GiB)
  • 关注原因:该变量用于设置创建索引的回填过程中本地存储空间的使用限制,仅在开启添加索引加速功能时生效。
  • 设置建议:如果主集群已调大,按备集群 TiDB 本地磁盘空间和 tidb_ddl_enable_fast_reorg 设置复核。

tidb_ttl_running_tasks

  • 默认值:-1
  • 关注原因:该变量用于限制整个集群内 TTL 任务的并发量。-1 表示与 TiKV 节点的数量相同。
  • 设置建议:建议保留默认值 -1。如果设置为具体任务数,需要按备集群 TiKV 节点数量和 TTL 清理压力重新评估。

tidb_ttl_scan_worker_count

  • 默认值:4
  • 关注原因:该变量用于设置每个 TiDB 节点 TTL 扫描任务的最大并发数。
  • 设置建议:如果主集群已手工调大,按备集群 TTL 清理压力复核。

tidb_ttl_delete_worker_count

  • 默认值:4
  • 关注原因:该变量用于设置每个 TiDB 节点上 TTL 删除任务的最大并发数。
  • 设置建议:如果主集群已手工调大,按备集群 TTL 清理压力复核。

tidb_ttl_scan_batch_size

  • 默认值:500
  • 关注原因:该变量用于设置 TTL 任务中用来扫描过期数据的每个 SELECT 语句的 LIMIT 的值。
  • 设置建议:如果主集群已手工调大,按备集群 TiKV 扫描能力和 TTL 清理压力复核。

tidb_ttl_delete_batch_size

  • 默认值:100
  • 关注原因:该变量用于设置 TTL 任务中单个删除事务中允许删除的最大行数。
  • 设置建议:如果主集群已手工调大,按备集群 TiKV 写入能力和 TTL 清理压力复核。

tidb_ttl_delete_rate_limit

  • 默认值:0
  • 关注原因:该变量用来对每个 TiDB 节点的 TTL 删除操作进行限流。设置为 0 时表示不做限制。
  • 设置建议:如果主集群已调整,按备集群 TiKV 写入能力和 TTL 清理压力复核。