innoDb 的多线程并发调优

时间:2021-07-14 07:07:43

  innodb  本来就好似对高并发设计的,但是不是能应对所有的高并发,你可以对部分就像调优

   首先说明3个参数

  innodb_thread_concurrency  :并发线程数量

innodb _thread_sleep_delay

innodb_concurrency_tickets

innodb用自己的线程调度机制来控制线程如何进入innodb  内核工作,并执行相关的操作。  innodb_thread_concurrency变量就控制了进入内核的线程数量。0表示不限制进入内核的数量。如果innodb内核中已经有很多线程进入,达到一定数量后就不能再进入了。innodb使用了一种两阶段的方式控制线程进入内核,这终机制减少了操作系统因为线程之间的上下文切换带来的开销。

2阶段如下

线程首先睡眠innodb _thread_sleep_delay所规定的时间(微妙),然后再次尝试进入,如果还是不能进入,就会就进入一个等待队列并且把控制权限交给操作系统。


一旦线程进入了内核,他就会得到一个去定的数据作为凭证,它再次进入内核时因为凭证就会减少一些操作,innodb_concurrency_tickets变量就是控制了凭据的数量,凭据是对线程授权。

同时 innodb_commit_concurrency也控制了多线程并发提交的数量。如果 innodb_thread_concurrency  设置的有点大innodb_commit_concurrency应该做出相应的调整,否则会造成大量线程阻塞。


关于多线程并发可以参考该文

http://hi.baidu.com/tangchaoql/blog/item/db7a2959770a967b84352449.html