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.