nifyReadPool 线程池:由 Coprocessor 线程池与 Storage Read Pool 合并而来 4.0 版本 storage 和 coprocessor 线程池。所有的读取请求包括 kv get、kv batch get、raw kv get、coprocessor 等都会在这个线程池中执行。
他的相关参数有哪些:
mysql> show config where name like '%unified%';
+------+--------------------+---------------------------------------+-------+
| Type | Instance | Name | Value |
+------+--------------------+---------------------------------------+-------+
| tikv | 172.16.6.194:20160 | readpool.coprocessor.use-unified-pool | true |
| tikv | 172.16.6.194:20160 | readpool.storage.use-unified-pool | true |
| tikv | 172.16.6.194:20160 | readpool.unified.max-tasks-per-worker | 2000 |
| tikv | 172.16.6.194:20160 | readpool.unified.max-thread-count | 6 |
| tikv | 172.16.6.194:20160 | readpool.unified.min-thread-count | 1 |
| tikv | 172.16.6.194:20160 | readpool.unified.stack-size | 10MiB |
stack-size
统一处理读请求的线程池中线程的栈大小。
类型:整数 + 单位
默认值:10MB
单位:KB|MB|GB
最小值:2MB
最大值:在系统中执行 ulimit -sH 命令后,输出的千字节数。
min-thread-count
统一处理读请求的线程池最少的线程数量。
默认值:1
max-thread-count
统一处理读请求的线程池最多的线程数量,即 UnifyReadPool 线程池的大小。调整该线程池的大小时,请参考 TiKV 线程池调优。
默认值:CPU * 0.8,但最少为 4
图片中所有的读请求都会经过UnifyReadPool,注意是读请求不包括写请求,UnifyReadPool中分为 l0,l1,l2 l0的优先级最高优先将资源给l0依次类推,如果读请求在l0中迟迟执行不完,就会调入到l1中再执行不玩的话就会调入到l2中,这样的话点查询执行快占用l0的时间很短,全表扫描的慢sql最后会刷到l2中。
unifyReadPool 常见问题:
如果读请求慢且unified read pool使用率高的话需要调整max-thread-count 参数。