更换隔离级别,提高innodb性能
2013-02-26 12:14
197 查看
大家都知道innodb的间隙锁的纯在是为了防止幻读,因为其默认隔离级别是REPEATABLE READ ,
不加间隙锁的话没法保证这个隔离级别。
====================================================
“当我们用范围条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁;对于键值在条件范围内但并不存在的记录,叫做“间隙(GAP)”,InnoDB也会对这个“间隙”加锁,这种锁机制就是所谓的间隙锁(Next-Key锁)。
====================================================
其实我们shopex旗下的产品都没有用到事务编程,很多表默认都是myisam的,转innodb引擎纯粹是为了并发性能,使用行锁,像类似的情况很多,REPEATABLE READ这个隔离级别有些高,很容易产生next-key 间隙锁,从而影响性能。
倒不如把隔离级别改成READ COMMITTED ,完全满足条件又不会产生间隙锁。oracle 和postgresql 的默认级别也是这个。当然使用行锁也是有前提的,必须在利用索引的情况下才用到行锁,否则则还是表锁。这个跟他的实现有关。
=============================
InnoDB行锁是通过给索引上的索引项加锁来实现的。
=============================
不加间隙锁的话没法保证这个隔离级别。
====================================================
“当我们用范围条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁;对于键值在条件范围内但并不存在的记录,叫做“间隙(GAP)”,InnoDB也会对这个“间隙”加锁,这种锁机制就是所谓的间隙锁(Next-Key锁)。
====================================================
其实我们shopex旗下的产品都没有用到事务编程,很多表默认都是myisam的,转innodb引擎纯粹是为了并发性能,使用行锁,像类似的情况很多,REPEATABLE READ这个隔离级别有些高,很容易产生next-key 间隙锁,从而影响性能。
倒不如把隔离级别改成READ COMMITTED ,完全满足条件又不会产生间隙锁。oracle 和postgresql 的默认级别也是这个。当然使用行锁也是有前提的,必须在利用索引的情况下才用到行锁,否则则还是表锁。这个跟他的实现有关。
=============================
InnoDB行锁是通过给索引上的索引项加锁来实现的。
=============================
相关文章推荐
- InnoDB---读未提交隔离级别的实现
- mysql innodb事务的隔离级别和锁的关系
- 关于InnoDB事务的一个“诡异”现象:RR隔离级别下的幻读现象
- InnoDB 隔离模式对 MySQL 性能的影响
- [InnoDB系列] - 实例解析Innodb的隔离级别以及锁模式
- MySQL---InnoDB引擎隔离级别详解
- Innodb隔离级别的实现原理
- InnoDB 在不同隔离级别下的一致性读及锁的差异
- 高性能MySQL--innodb中事务的隔离级别与锁的关系
- [InnoDB系列] - 实例解析Innodb的隔离级别以及锁模式
- 反驳"MySQL InnoDB (不行)的性能问题",千万级别记录来测试说明
- 几种事务的隔离级别,InnoDB如何实现?
- Mysql InnoDB事务的隔离级别
- innodb存储引擎中不同sql在不同隔离级别下锁的比较
- 反驳"MySQL InnoDB (不行)的性能问题",千万级别记录来测试说明
- InnoDB隔离级别与锁机制.txt
- MySQLInnoDB引擎事物隔离级别RC和RR
- InnoDB 锁与隔离级别
- Innodb 的事物隔离级别实现原理(一)
- 非隔离的总线转换器降低成本,提高性能,灵活性