您的位置:首页 > 数据库 > MySQL

mysql5.6对kernel_mutex的优化

2011-12-28 13:17 316 查看
参考自: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的并发能力。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: