14.6.6 Configuring Thread Concurrency for InnoDB 配置线程并发

14.6.6 Configuring Thread Concurrency for InnoDB  配置线程并发


InnoDB 使用操作系统线程来处理请求(用户事务) 事务可能执行很多次在它们提交或者回滚前。

在现在的操作系统,具有多核CPU 上下文切换是有效的, 很多的负载运行很好没有任何并发线程数量的限制


在这种情况下 它是用助于最小化上下文切换在线程之间,

InnoDB 使用一些技术来限制并发执行操作系统线程的数量(也就是说请求的数量任何一个时间的处理数量)


当InnoDB 从用户会话接收一个新的请求,如果 并发线程的数量是在一个预定义的限制,

新的请求会sleep一段时间在他再次尝试前。



你可以设置并发线程的数量 通过设置r innodb_thread_concurrency参数


mysql> show variables like '%innodb_thread_concurrency%';
+---------------------------+-------+
| Variable_name             | Value |
+---------------------------+-------+
| innodb_thread_concurrency | 0     |
+---------------------------+-------+
1 row in set (0.00 sec)


一旦并发线程的数量达到这个值, 额外的线程sleep 会等待数微妙

mysql> show variables like '%innodb_thread_sleep_delay%';
+---------------------------+-------+
| Variable_name             | Value |
+---------------------------+-------+
| innodb_thread_sleep_delay | 10000 |
+---------------------------+-------+
1 row in set (0.00 sec)
此前,它需要实验来找出最有的值对于innodb_thread_sleep_delay, 最有的值

可以改变取决于负载。

在MySQL 5.6.3 and higher, 你可以设置配置选项 innodb_adaptive_max_sleep_delay为高的值


InnoDB 自动调整innodb_thread_sleep_delay up或者down 取决于当前线程的活动


默认值对于innodb_thread_concurrency 和说明默认限制在并发线程数量上已经被改变了再各个版本


innodb_thread_concurrency 默认值是0,这样没有没有限制


InnoDB 导致线程sleep 只有当并发线程的数量被限制。

当没有线程限制时,所有的竞争都会被调度。

也就是说,如果 innodb_thread_concurrency设置为0, innodb_thread_sleep_delay 会被忽略


当有一个线程数限制时(当innodb_thread_concurrency is > 0),

InnoDB 减少上下文切换通过运行多个请求在一个SQL语句执行到InnoDB 没有观察限制通过innodb_thread_concurrency. 

原文地址:https://www.cnblogs.com/hzcya1995/p/13350068.html