隔离级别RR开的有点高,一般开RC就够了。mysql的RR不是完全基于mvcc的Snapshot Isolation,而是mvcc+lock混合实现的,比如有范围查询,mysql会上gap lock,如果有unindexed row update,即使只有一个row行匹配,RR模式下update也会持有多个lock,直到事务结束。
“还有mysql默认是自动提交,如果不加事务的话,每个select sql都会自动的开启事务和提交事务,开销是不是要比都放在一个事务里要高?” 这个问题要看具体情况,定性的分析下如果pure read,RR或者RC,那么多个select一起提交跟每个select提交一次,性能相差不会太大,每个事物申请txID的时候在mysql内部会有并发冲突,但这个时间跟sql解析,查询优化,磁盘IO跟,可以忽略;读写混合场景,如果多个select放一个事务,要看这个batch读事务,跟包含写操作的事务之间有没有锁冲突;假如是RR(不要以为MVCC了就没有锁冲突,范围查询也有gap lock),冲突的可能性比较大,那最好每个select单独提交,如果RC应该区别不大。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。