博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql隔离级别与锁,接口并发响应速度的关系(2)
阅读量:5134 次
发布时间:2019-06-13

本文共 743 字,大约阅读时间需要 2 分钟。

 

 

innoDB默认隔离级别

mysql> SELECT @@tx_isolation;+-----------------+| @@tx_isolation  |+-----------------+| REPEATABLE-READ |+-----------------+

 

两个事务同时更新一条数据

右图第二个事务的update增加行锁(表中id有索引), 在未提交之前,左图第一个事务update操作会进入阻塞状态, 左图中仍然可以进行select

右图第二个事务提交之后, 第一个事务会执行update并返回结果,但是还没有提交,  此时右图的查询结果是第二个事务提交的值

 

然后左图第一个事务也提交, 会覆盖右图第二个事务的值。左图操作的是右图变更前的数据,这个在并发时是不正常的

 

 

 

更新数据库的隔离级别为序列化

开启两个事务, 右图进行update操作, 左图事务的select操作会进入阻塞操作

右图提交之后, 左图事务select返回右图提交之后的结果

 

此时左图再update commit, 会覆盖右图的结果。左图操作的是右图变更后的数据, 这个在并发时是正常的.

 

总结: 

可重复读时,有幻读的问题, 使用行写锁

序列化时,  select会阻塞,并发性能极低 == 没有并发, 使用行读锁

 

使用索引select update时,会在行上加锁(具体哪种锁,读,写?),

不能使用索引时在表上加锁, 表锁也会极大的影响并发性能

 索引可以提高并发的原因:1.sql查询的数据量小,sql响应快 2.行锁,提高并发,不影响其他线程

 

TODO:: 分布式最终一致性,为什么可以不使用事务?

转载于:https://www.cnblogs.com/yszzu/p/9296330.html

你可能感兴趣的文章
js学习笔记 chapter5 引用类型
查看>>
前端学习资料汇总(转)
查看>>
网页居中
查看>>
css3 border
查看>>
background
查看>>
返回三级联动的JSON数据
查看>>
【转】Linux內核驅動之GPIO子系統(一)GPIO的使用 _蝸牛
查看>>
【转】No JVM could be found on your system解决方法
查看>>
我爱Java系列---【1.Vue的快速入门案例】
查看>>
黑马程序员:java基础学习——数组
查看>>
自然的网页配色技巧
查看>>
IE9或以上的浏览器flash值为空时,导致domready不触发
查看>>
关于本学期西南交通大学ACM-ICPC校集训队 训练计划(Beta 1.0)
查看>>
全站 HTTPS 来了(转载)
查看>>
【text】 文本组件说明
查看>>
Activity与Fragment的生命周期
查看>>
动态规划(树形DP):HDU 5886 Tower Defence
查看>>
activemq概念介绍
查看>>
[解决方案]WebAPI+SwaggerUI部署服务器后,访问一直报错的问题
查看>>
Python豆瓣书籍信息爬虫
查看>>