课程名称:3.7.6 TiDB optimization(TiDB Server 优化)
学习时长:
60分钟
课程收获:
全面了解 TiDB 性能优化涉及到的可以调节的配置和参数
课程内容:
一、Operating System parametes
- CPU
- Frequency Scaling
- 动态调整CPU频率模块,有五种模式,为了保证服务性能应该使用performance模式,将CPU频率固定在最高频率
- 动态调节目的是为了节省CPU耗电,对业性能有负面影响
- 如果想设置性能模式通过cpupower frequency-set --governor performance参数实现
- Numa Binding
- 在一个服务器上有多个不同的Numa节点,每个Numa节点的CPU在访问自己内存时延迟很低,远程访问其他Numa节点延迟很高
- 通过绑定进程和Numa节点来避免性能开销
- 通过numactl命令来进行绑定
- Memory
- Transparent Huge Page(THP)
- 与其说是优化不如说是避免性能的劣化,当打开THP时,对数据库应用来说是会有明显的的性能降低,建议关闭此参数
- 数据库有明显的的稀疏而非连续的内存访问模式,当高阶内存碎片化严重时分配THP pages将会出现较大延迟,开启THP直接内存规整功能也会出现CPU使用率激增的现象
- Virtual Memory Parameters
- dirty_ratio当脏的内存总量到达系统内存总量的百分比时,系统将使用PDflash操作,将脏内存写入磁盘,默认值为20%,对于高性能SSD降低持有率可以提高内存回收效率
- dirty_background_ratio当脏的内存总量到达系统内存总量的百分比时,系统将脏内存写入磁盘,默认值为10%,对于高性能SSD降低持有率可以提高内存回收效率
- Disk
- I/O scheduler
- I/O调度程序用于确定I/O操作何时在存储设备上运行以及持续多长时间,对于SSD设备建议设置为noop
- echo noop > /sys/block/${SSD_DEV_NAME}/queue/scheduler
- Mount Parameters
- 设置noatime参数在避免时读取文件时会更新原数据,因数据库应用不需要对访问时间做更新
- 设置后启用了nodiratime行为,只对读取目录时对原数据更新
二、TiDB system variables
- Concurrency
- tidb_distsql_scan_concurrency
- 影响范围最大的变量并发访问多个TiKV的region的并发请求的数量
- 空闲资源较多时可以设置更高的并发来让资源利用更加充分提升性能
- 默认值为15,分析请求高默认值会相对偏低,但TP为主可以调小默认值
- tidb_index_lookup_concurrency
- 仅影响IndexLookUp operator
- tidb_build_stats_concurrency
- 控制Analyze语句并发度,如需要更快完成可以把值设置更大,但代价是影响在线业务,增大在线业务延迟
- tidb_hash_join_concurrency
- 用来控制hash join算子并发数,在系统资源充足且对hash join性能有更高要求时,可以尝试调节这个参数优化
- tidb_index_lookup_join_concurrency
- 用来控制lookup join算子,通常通过索引访问,结果相对hash join要小一些,对延迟要求较高
- tidb_ddl_reorg_worker_cnt
- 在线添加online index通过一个或多个后台worker线程将整个表的数据读出来建立所以,worker数量过多可造成在线业务延迟
- Batch Size
- chunk概念:在TiDB中执行查询语句时结果并不是以一条为单位处理,而是一批一批,每批的存储结构为一个chunk,设置chunk size可以影响到查询性能
- tidb_init_chunk_size
- 在查询语句第一批返回结果申请的chunk大小
- tidb_max_chunk_size
- 有后续查询结果时最大可获取的chunk大小,逐步达到最大值
- tidb_index_join_batch_size
- 影响的index join的批量处理大小
- Limit
- tidb_store_limit
- 一个TiKV节点上并发请求的数量,设置此参数为了避免极端情况,如果限制太小无法充分利用系统资源,过大将导致TiKV压力过高
- tidb_retry_limit
- 乐观事务请求最大重试次数,如果重试次数过大会加剧冲突,过小会造成事务执行成功率下降
- Backoff
- backoff是指请求遇到可以重试错误时,在重试前的等待时间,过大会增加延迟,过小会造成很多无谓的重试消耗更多系统资源
- tidb_backoff_weight
- 设置一个factor,默认值是2,在网络环境较差的情况下适当增加该变量值会有所缓解
- tidb_backoff_lock_fast
- 用来设置读请求遇到锁的backoff时间
三、TiDB configuration
- Performance
- max-proc
- 用来控制TiDB使用的CPU核数,用于单台混用或部署多个TiDBServer
- token-limit
- 用来控制可以执行请求的session数量,避免链接过多造成TiDB压力
- force-priority
- 用来控制TiDB进程所有请求的优先级
- committer-concurrency
- 用来控制一个事务在commit阶段的并发度
- TiKV Client
- grpc-connection-count
- 控制TiDB和TiKV的连接数量
- Prepared Plan Cache
- enabled
- 开启此参数,相同类型语句可以直接使用相同的执行计划,当数据或查询条件变化时执行计划可能不是最优
- capacity
- 开启此参数,限制cache语句数量