课程名称:课程版本(101/201/301)+ 3.7.6 TiDB optimization(TiDB Server 优化)
学习时长:30
课程内容:
一、Operating System parametes
- CPU
- Frequency Scaling
- 动态调整CPU频率模块,有五种模式,为了保证服务性能应该使用performance模式,将CPU频率固定在最高频率。动态调节目的是为了节省CPU耗电,对业性能有负面影响
- 如果想设置性能模式通过cpupower frequency-set --governor performance参数实现
- Numa Binding
- 在一个服务器上有多个不同的Numa节点,每个Numa节点的CPU在访问自己内存时延迟很低,远程访问其他Numa节点延迟很高。通过绑定进程和Numa节点来避免性能开销
- 通过numactl命令来进行绑定
- Frequency Scaling
- Memory
- Transparent Huge Page(THP)
- 与其说是优化不如说是避免性能的劣化,当打开THP时,对数据库应用来说是会有明显的的性能降低,建议关闭此参数
- Virtual Memory Parameters
- dirty_ratio当脏的内存总量到达系统内存总量的百分比时,系统将使用PDflash操作,将脏内存写入磁盘,默认值为20%,对于高性能SSD降低持有率可以提高内存回收效率
- dirty_background_ratio当脏的内存总量到达系统内存总量的百分比时,系统将脏内存写入磁盘,默认值为10%,对于高性能SSD降低持有率可以提高内存回收效率
- Transparent Huge Page(THP)
- Disk
- I/O scheduler
I/O调度程序用于确定I/O操作何时在存储设备上运行以及持续多长时间,对于SSD设备建议设置为noop。
echo noop > /sys/block/${SSD_DEV_NAME}/queue/scheduler - Mount Parameters
- 设置noatime参数在避免时读取文件时会更新原数据,因数据库应用不需要对访问时间做更新
- 设置后启用了nodiratime行为,只对读取目录时对原数据更新
- I/O scheduler
二、TiDB system variables
- Concurrency
- tidb_distsql_scan_concurrency
- 影响范围最大的变量并发访问多个TiKV的region的并发请求的数量
- 空闲资源较多时可以设置更高的并发来提升性能
- 默认值为15
- 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数量过多可造成在线业务延迟
- tidb_distsql_scan_concurrency
- 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
乐观事务请求最大重试次数,如果重试次数过大会加剧冲突,过小会造成事务执行成功率下降
- tidb_store_limit
- Backoff
backoff是指请求遇到可以重试错误时,在重试前的等待时间,过大会增加延迟,过小会造成很多无谓的重试- tidb_backoff_weight
设置一个factor,默认值是2,在网络环境较差的情况下适当增加该变量值会有所缓解 - tidb_backoff_lock_fast
用来设置读请求遇到锁的backoff时间
- tidb_backoff_weight
三、 TiDB configuration
- Performance
- max-proc
用来控制TiDB使用的CPU核数,用于单台混用或部署多个TiDBServer - token-limit
用来控制可以执行请求的session数量,避免链接过多造成TiDB压力
- max-proc
- force-priority
用来控制TiDB进程所有请求的优先级 - committer-concurrency
用来控制一个事务在commit阶段的并发度
四、TiKV Client
- grpc-connection-count
控制TiDB和TiKV的连接数量 - Prepared Plan Cache
- enabled
开启此参数,相同类型语句可以直接使用相同的执行计划,当数据或查询条件变化时执行计划可能不是最优 - capacity
开启此参数,限制cache语句数量
- enabled
学习过程中遇到的问题或延伸思考:
- 问题 1:
- 问题 2:
- 延伸思考 1:
- 延伸思考 2: