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. 
相关文章
相关标签/搜索