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