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的并发能力。
在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的并发能力。
相关文章推荐
- MySQL5.6基本优化配置
- MySql5.6 my.cnf配置优化
- MySQL5.6基本优化配置
- Mysql 5.6 优化配置方式
- mysql5.6中mrr和icp优化简述
- mysql5.6之key_buffer_size优化设置
- MySQL5.6优化
- 黄聪:MYSQL5.6缓存性能优化my.ini文件配置方案
- mysql5.6性能优化
- MySQL学习笔记(一)Ubuntu16.04中MySQL安装配置(5.6优化、错误日志、DNS解决)
- MySQL5.6优化
- MySQL 5.6 SQL 优化及 5.6手册
- mysql5.6的配置优化my.cnf
- MySql5.6性能优化、
- MySQL5.6优化了派生子查询
- MySQL 5.6的新特性:提升优化器性能
- MySQL5.6优化
- MySQL5.6 如何优化慢查询的SQL语句 -- 慢日志介绍
- mysql5.6版本的优化
- 自建MySQL5.6数据库查询优化