阿里云上的rds 的隔离级别read committed 而不是repeatable-read设置原因
阿里云上的rds 的隔离级别 是read committed ,而不是原生mysql的“可重复读(repeatable-read)”,他们是基于什么原因这样设置的?
show variables like 'transaction_isolation'; --结果如下
Variable_name Value
transaction_isolation READ-COMMITTED
我们都知道:
提交读(不可重复读)和可重复读的区别在于:
- 提交读 : 在本事务未提交之前其他事务的增删改操作提交后会影响读的结果。 读的是最新结果 。
- 可重复读 : 在读的过程中数据始终是事务启动时的数据状态,未提交之前其他事物的增删改操作提交后都不会影响读的结果。 读的是快照结果
也就是说,read committed 隔离级别下, 同一个事务中,多次读取数据,可能是不一样的, 因为数据有可能已经被别的事务修改了。难到阿里云的rds不怕读的事务中,数据被修改吗?
为此,我咨询以前的ali内部同事,得到的回复是,需要研发在代码中控制好。这样是为了提高并发性。
read committed 到底是怎样提供并发性的呢?
1、事务隔离级别为 读提交 时,写数据 只会锁住相应的行
2、事务隔离级别为 可重复读(更容易死锁) 时,如果 检索条件有索引 (包括主键索引)的时候,默认 加锁方式是next-key 锁 ;如果 检索条件没有索引 ,更新数据时 会锁住整张表 。一个间隙被事务加了锁,其他事务是不能在这个间隙插入记录的,这样可以防止幻读。
3、事务隔离级别为 串行化 时,读写数据都会 锁住整张表
4、隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大
接下来是代码中要怎样控制的问题了?
对于上面出现的问题,可以使用乐观锁和悲观锁来避免。
– 悲观锁 :悲观锁假定当多个事务同时访问一个资源时,会出现以上问题。因而为了避免这些问题,每个事务在操作一个资源时,都先把资源锁起来,这样就完全排除了当前事务受其他事务的影响,但是使用悲观锁影响并发性能,所以应该谨慎。
– 乐观锁 :乐观锁假定多个并发事务访问一个资源时,靠数据库管理系统自身的锁机制就可以有效地避免这些问题。因而它主要依靠数据库的隔离级别来自动管理锁的工作。一旦出现以上问题,乐观锁会使用版本控制的手段来发现这些问题,并抛出异常,从而有效地避免不良后果的发生。
参考:
MySQL数据库事务各隔离级别加锁情况--read committed && MVCC
MySQL的四种事务隔离级别
https://www.cnblogs.com/huanongying/p/7021555.html
阿里云上的rds 的隔离级别read committed 而不是repeatable-read设置原因的更多相关文章
- 云计算之路-阿里云上:RDS数据库连接数过万引发故障,主备库切换后恢复正常
非常抱歉!今天 12:03-12:52 ,由于数据库连接数异常突增超过1万,达到了阿里云RDS的最大连接数限制,影响了全站的正常访问.由此给您带来麻烦,请您谅解. 在发现数据库连接数突增的问题后,我们 ...
- 云计算之路-阿里云上: RDS实例CPU跑满引发的故障
今天上午 10: 40 左右,我们所使用的阿里云 RDS 实例的 CPU 突然飙高到近 100% ,造成大量数据库查询操作缓慢.超时,在这个恶劣条件下大量 memcached 缓存无法建立,这样的雪上 ...
- 云计算之路-阿里云上:RDS用户的烦恼
http://www.cnblogs.com/cmt/p/3586029.html *博主注:阿里云数据库真的这么可笑?
- 如何将阿里云上的RDS 备份的mysql数据还原到windows环境中
一.本地mysql数据库创建与备份库一致的数据库名,如testdb: 二.本地创建与备份库一致的数据库表,记得设置ALTER TABLE tableName1 ROW_FORMAT = compact ...
- 从运维的角度分析使用阿里云数据库RDS的必要性--你不应该在阿里云上使用自建的MySQL/SQL Server/Oracle/PostgreSQL数据库
开宗明义,你不应该在阿里云上使用自建的MySQL or SQL Server数据库,对了,还有Oracle or PostgreSQL数据库. 云数据库 RDS(Relational Database ...
- 阿里云重磅发布RDS for SQL Server AlwaysOn集群版
2018年双十一刚过,阿里云数据库发布RDS for SQL Server AlwaysOn集群版,这是业界除微软云SQL Database外,首家云计算公司基于SQL Server最新AlwaysO ...
- 阿里云上部署了zabbix,突然无法收到报警邮件的解决办法
在阿里云上部署了zabbix,一直能正常接收到zbx发来的报警邮件(报警邮箱是163的),不知是什么原因,突然无法接收到报警邮件了. 但在服务器上手动执行echo "hello"| ...
- 在阿里云上进行Docker集群的自动弹性伸缩
摘要: 在刚刚结束的云栖大会上,阿里云容器服务演示了容器的自动弹性伸缩,能够从容应对互联网应用的峰值流量.阿里云容器服务不仅支持容器级别的自动弹性伸缩,也支持集群节点级别的自动弹性伸缩.从而真正做到从 ...
- 在阿里云上遇见更好的Oracle(二)
从上一篇文章的反馈来看,大家还是喜欢八卦多过技术细节,那这一篇继续一些题外话,说说我对“去IOE”的看法. 对同一件事情,参与的没参与的人,讨论起来,都会有各自的立场.所以这里先申明一下,以下内容只是 ...
- 云计算之路-阿里云上:OCS问题的进展以及11:30-11:50遇到的问题
(上图是今天出问题期间Web服务器性能监控图,紫色表示的是Request Execution Time) 昨天我们发布了一篇博客分享了我们这两天遇到的OCS(开放缓存服务)问题,详见云计算之路-阿里云 ...
随机推荐
- 效率回归,工具库之美「GitHub 热点速览」
刚开源就变成新星的 igl,不仅获得了 2k+ star,也能提高你开发游戏的效率,摆平一切和图形有关的问题.如果这个没有那么惊艳的话,还有 The-Art-of-Linear-Algebra,重燃了 ...
- nrm工具
nrm 工具 nrm(npm registry manager)是npm镜像源管理工具.可快速帮助查看.切换.管理npm镜像源. 安装 npm install -g nrm 查看 nrm ls 切换 ...
- python安装后pip用不了 cmd命令窗口提示:Did not provide a command
遇到的问题: 解决方法: 首先,使用where pip找到我的pip的安装目录 其次,配置环境变量 环境变量已经配置,但是仍是使用的时候直接输入pip提示"Did not provide a ...
- quarkus依赖注入之四:选择注入bean的高级手段
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是<quarkus依赖注入> ...
- 青少年CTF平台-Web-Flag在哪里
平台名称:青少年CTF训练平台 题目名称:Flag在哪里? 解题过程: 启动环境,需要等待大概20秒左右的时间. 访问,页面显示Flag反正不在这. 右键网页,发现无法使用右键. 那么我们直接F12 ...
- 【go笔记】TCP编程
前言 TCP服务端的处理流程 监听端口 接收客户端请求建立连接 创建goroutine处理链接 示例代码:TCP服务端 package main import ( "net" &q ...
- Room组件的用法
一.Android官方ORM数据库Room Android采用Sqlite作为数据库存储.但由于Sqlite代码写起来繁琐且容易出错,因此Google推出了Room,其实Room就是在Sqlite上面 ...
- 角度新奇!第一次看到这样使用MyBatis的,看得我一愣一愣的。
你好呀,我是歪歪. 这期给大家分享一个读者给我分享的一个关于 MyBatis 的"编程小技巧",说真的,这骚操作,直接把我看得一愣一愣的. 我更情愿叫它:坑你没商量之埋雷大法. D ...
- 《小白WEB安全入门》02. 开发篇
@ 目录 初识HTML潜在漏洞 初识CSS潜在漏洞 初识JS潜在漏洞 初识后端潜在漏洞 后端能做什么 后端种类 后端框架 潜在漏洞 本系列文章只叙述一些超级基础理论知识,极少有实践部分 本文涉及到的语 ...
- (洛谷P4213)杜教筛
https://www.cnblogs.com/Mychael/p/8744633.html #pragma GCC optimize(3, "Ofast", "inli ...