【TiDB 4.0 PCTA 学习笔记】- 3.7.6 TiDB optimization(TiDB Server 优化)@2班+邱育珍

课程名称:3.7.6 TiDB optimization(TiDB Server 优化)

学习时长:40min

课程收获:

TiDB 性能优化相关的配置和系统变量参数。

课程内容:

1.操作系统参数

处理器——动态节能技术

cpufreq 是一个动态调整 CPU 频率的模块,可支持五种模式。为保证服务性能应选用 performance 模式,将 CPU 频率固定工作在其支持的最高运行频率上,不进行动态调节,操作命令为 cpupower frequency-set --governor performance

NUMA 绑核

为尽可能的避免跨 NUMA 访问内存,可以通过设置线程的 CPU 亲和性来实现 NUMA 绑核。对于普通程序,可使用 numactl 命令来绑定,具体用法请查询 man 手册。

内存——透明大页

对于数据库应用,不推荐使用 THP,因为数据库往往具有稀疏而不是连续的内存访问模式,且当高阶内存碎片化比较严重时,分配 THP 页面会出现较大的延迟。若开启针对 THP 的直接内存规整功能,也会出现系统 CPU 使用率激增的现象,因此建议关闭 THP。

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

内存——虚拟内存参数

  • dirty_ratio 百分比值。当脏的 page cache 总量达到系统内存总量的这一百分比后,系统将开始使用 pdflush 操作将脏的 page cache 写入磁盘。默认值为 20%,通常不需调整。对于高性能 SSD,比如 NVMe 设备来说,降低其值有利于提高内存回收时的效率。
  • dirty_background_ratio 百分比值。当脏的 page cache 总量达到系统内存总量的这一百分比后,系统开始在后台将脏的 page cache 写入磁盘。默认值为 10%,通常不需调整。对于高性能 SSD,比如 NVMe 设备来说,设置较低的值有利于提高内存回收时的效率。

I/O 调度器

I/O 调度程序确定 I/O 操作何时在存储设备上运行以及持续多长时间。也称为 I/O 升降机。对于 SSD 设备,宜设置为 noop。

echo noop > /sys/block/${SSD_DEV_NAME}/queue/scheduler

挂载参数

noatime 读取文件时,将禁用对元数据的更新。它还启用了 nodiratime 行为,该行为会在读取目录时禁用对元数据的更新。

2.TiDB 系统参数

image

Concurrency并发数量

image

tidb_distsql_scan_concurrency

  • 作用域:SESSION | GLOBAL
  • 默认值:15
  • 这个变量用来设置 scan 操作的并发度。
  • AP 类应用适合较大的值,TP 类应用适合较小的值。对于 AP 类应用,最大值建议不要超过所有 TiKV 节点的 CPU 核数。
  • 若表的分区较多可以适当调小该参数,避免 TiKV 内存溢出 (OOM)。

tidb_index_lookup_concurrency

  • 作用域:SESSION | GLOBAL
  • 默认值:4
  • 这个变量用来设置 index lookup 操作的并发度,AP 类应用适合较大的值,TP 类应用适合较小的值。

tidb_build_stats_concurrency

  • 作用域:SESSION
  • 默认值:4
  • 这个变量用来设置 ANALYZE 语句执行时并发度。
  • 当这个变量被设置得更大时,会对其它的查询语句执行性能产生一定影响。
    image

tidb_hash_join_concurrency

  • 作用域:SESSION | GLOBAL
  • 默认值:5
  • 这个变量用来设置 hash join 算法的并发度。

tidb_index_lookup_join_concurrency

  • 作用域:SESSION | GLOBAL
  • 默认值:4
  • 这个变量用来设置 index lookup join 算法的并发度。

tidb_ddl_reorg_worker_cnt

  • 作用域:GLOBAL
  • 默认值:4
  • 这个变量用来设置 DDL 操作 re-organize 阶段的并发度。

Batch Size 批量size

image

tidb_init_chunk_size

  • 作用域:SESSION | GLOBAL
  • 默认值:32
  • 这个变量用来设置执行过程中初始 chunk 的行数。默认值是 32,可设置的范围是 1~32。

tidb_max_chunk_size

  • 作用域:SESSION | GLOBAL
  • 默认值:1024
  • 最小值:32
  • 这个变量用来设置执行过程中一个 chunk 最大的行数,设置过大可能引起缓存局部性的问题。

tidb_index_join_batch_size

  • 作用域:SESSION | GLOBAL
  • 默认值:25000
  • 这个变量用来设置 index lookup join 操作的 batch 大小,AP 类应用适合较大的值,TP 类应用适合较小的值。

Limit 限制

image

tidb_store_limit 从 v3.0.4 和 v4.0 版本开始引入

  • 作用域:INSTANCE | GLOBAL
  • 默认值:0
  • 这个变量用于限制 TiDB 同时向 TiKV 发送的请求的最大数量,0 表示没有限制。

tidb_retry_limit

针对乐观事务,建议使用悲观事务

  • 作用域:SESSION | GLOBAL
  • 默认值:10
  • 这个变量用来设置最大重试次数。一个事务执行中遇到可重试的错误(例如事务冲突、事务提交过慢或表结构变更)时,会根据该变量的设置进行重试。注意当 tidb_retry_limit = 0 时,也会禁用自动重试。

Backoff 遇到错误时重试的等待时间

image

tidb_backoff_lock_fast

  • 作用域:SESSION | GLOBAL
  • 默认值:100
  • 这个变量用来设置读请求遇到锁的 backoff 时间。

tidb_backoff_weight

  • 作用域:SESSION | GLOBAL
  • 默认值:2
  • 这个变量用来给 TiDB 的 backoff 最大时间增加权重,即内部遇到网络或其他组件(TiKV、PD)故障时,发送重试请求的最大重试时间。可以通过这个变量来调整最大重试时间,最小值为 1。例如,TiDB 向 PD 取 TSO 的基础超时时间是 15 秒,当 tidb_backoff_weight = 2 时,取 TSO 的最大超时时间为:基础时间 * 2 等于 30 秒。在网络环境较差的情况下,适当增大该变量值可以有效缓解因为超时而向应用端报错的情况;而如果应用端希望更快地接到报错信息,则应该尽量减小该变量的值。

3. TiDB 配置

image

performance 性能相关配置。

max-procs

  • TiDB 的 CPU 使用数量。
  • 默认值:0
  • 默认值为 0 表示使用机器上所有的 CPU;如果设置成 n,那么 TiDB 会使用 n 个 CPU 数量。

token-limit

  • 可以同时执行请求的 session 个数
  • 默认值:1000

force-priority

  • 把所有的语句优先级设置为 force-priority 的值。
  • 默认值:NO_PRIORITY
  • 可选值:NO_PRIORITY, LOW_PRIORITY, HIGH_PRIORITY, DELAYED。

committer-concurrency

keep using origin goroutine when doing retry in commit phase
committer-concurrency 配置项,用于控制 retry commit 阶段的 goroutine 数量。
主要影响是大事务,TiKV节点。

image

grpc-connection-count

  • 跟每个 TiKV 之间建立的最大连接数。
  • 默认值:16
    image

prepared-plan-cache

prepare 语句的 Plan cache 设置。

警告:
当前该功能为实验特性,不建议在生产环境中使用。

enabled
  • 开启 prepare 语句的 plan cache。
  • 默认值:false

capacity

  • 缓存语句的数量。
  • 默认值:100
  • 类型为 uint,小于 0 的值会被转化为大整数。

学习过程中参考的其他资料

同学你好,感谢参与 TiDB 4.0 课程的学习!

本篇笔记逻辑清晰、内容丰富,被评选为优质笔记,将额外获得 20 积分,并在 「TiDB 培训」分类下获得“置顶”权益,积分兑换规则将于近期开放,敬请关注!

期待您继续产出优质内容!

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。