mysql5.6对kernel_mutex的优化

来源:互联网 发布:php 静态调用 编辑:程序博客网 时间:2024/06/06 05:08
参考自:http://blogs.innodb.com/wp/2011/04/mysql-5-6-innodb-scalability-fix-kernel-mutex-removed/


在mysql5.5以及之前的版本,kernel_mutex一直是性能的大杀器,在innodb层,被广泛的使用。全局锁是大招,杀死一大片的。之前percona将buffer pool mutex进行了拆分,性能得到了很大的提高。

幸运的是,mysql官方已经意识到了这个问题,在5.6里已经把kernel_mutex给干掉了;
不幸的是,离用上生产环境还遥遥无期。


kernel_mutex主要用于保护innodb子系统,主要包括如下几个模块:

1.锁管理
2.事务系统
3.MVCC
当上述子模块的状态发生变化时,都需要持有该锁。


在5.6里根据模块对kernel_mutex进行了拆分,主要分成了以下几个锁:
trx_sys_t::lock (rw_lock)
读写锁,用来保护全局事务链表,该链表在创建read_view或执行类似‘show engine innodb status’这样的命令时会被用到。
当开启事务或结束事务(commit/rollback)时会修改链表

trx_t::mutex
当事务的状态等发生变化时,需要持有该锁(mutex_own(&t->mutex))

lock_sys_t::mutex 和 lock_sys_t::wait_mutex
用于保护全局锁数据结构

通过这种拆分可以提高innodb的并发能力。
原创粉丝点击