Author:
提要
thread_concurrency参数用于向操作系统建议期望的并发线程数,参数在mysqld启动的时候使用。但MySQL 5.6 从源码中删除了这个参数,不再使用。
参数背景
源码:
#ifndef HAVE_THR_SETCONCURRENCY
#define thr_setconcurrency(A) pthread_dummy(0)
#endif
mysqld_main
{
(void) thr_setconcurrency(concurrency); // 10 by default
......
}
可以看到thread_concurrency的限制:
那么并发控制究竟在什么地方进行控制最好,控制为多少合适呢?
并发控制
并发控制点:
并发控制的目的是最大化提高系统的资源利用率,并减少管理和调度开销。在MySQL实例中,主要处理sql请求,所以期望系统资源最大化提供给sql的执行过程。 sql的执行牵涉到server层和引擎层:
Innodb层:比如根据执行计划,查找和更新数据page的过程 所以在MySQL实例中,有两个最佳的并发控制点:
并发控制大小:
设置过大:造成系统调度消耗过大 设置过小:不能完全的使用系统资源,造成资源浪费 经验值:# Try number of CPU’s*2 for thread_concurrency
但还需要配合具体的平台和业务系统进行测试,才能找到最佳值。
Innodb并发控制
Innodb使用参数innodb_thread_concurrency控制并发线程的个数,源码中使用一对函数:
innodb_srv_conc_enter_innodb innodb_srv_conc_exit_innodb Innodb实现语句级的并发控制,在语句执行结束,stmt commit的时候,强制释放资源。
权衡和优化
在执行过程中,依次进行递减,递减到0时,强制退出并发线程,重新抢占。
好处: