设置隔离界别
<隔离级别>=Read Uncommitted、read committed、Repeatable read、Serializable
注:SQL server只能改当前会话,不能改全局。
查询锁表
查询死锁语句
查看当前事务的隔离级别
设置当前事务的隔离级别
<隔离级别>=Read Uncommitted、read committed、Repeatable read、Serializable
MySQL默认:REPEATABLE READ
查看隔离级别
设置当前一个事务的隔离级别
设置整个会话的隔离级别:
数据库事务的隔离级别有4种,由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。而且,在事务的并发 *** 作中可能会出现脏读,不可重复读,幻读。
1、Read uncommitted
读未提交,顾名思义,就是一个事务可以读取另一个未提交事务的数据。
2、Read committed
读提交,顾名思义,就是一个事务要等另一个事务提交后才能读取数据。
3、Repeatable read
重复读,就是在开始读取数据(事务开启)时,不再允许修改 *** 作。
4、Serializable 序列化
Serializable 是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。
为了给程序配置资源隔离,通常我们会到 cgroup 层级树下的控制器⾥,创建或者修改控制组⽂件。
修改方法
有两种方法可以对配置了 systemd 的程序进行资源隔离:1. 命令行修改:通过执行 systemctl set-property 命令实现,形式为 systemctl set-property name parameter=value;修改默认即时生效。2. 手工修改文件:直接编辑程序的 systemd unit file 文件,完成之后需手工执行 systemctl daemon-reload 更新配置,并重启服务 systemctl restart name.service。
systemd unit file 里支持的资源隔离配置项,如常见的:
CPUQuota=value
该参数表示服务可以获取的最大 CPU 时间,value 为百分数形式,高于 100% 表示可使用 1 核以上的 CPU。与 cgroup cpu 控制器 cpu.cfs_quota_us 配置项对应。
MemoryLimit=value
该参数表示服务可以使用的最大内存量,value 可以使用 K, M, G, T 等后缀表示值的大小。与 cgroup memory 控制器 memory.limit_in_bytes 配置项对应。
事务的4种隔离级别
READ UNCOMMITTED 未提交读,可以读取未提交的数据。
READ COMMITTED 已提交读,对于锁定读(select with for update 或者 for share)、update 和 delete 语句,InnoDB 仅锁定索引记录,而不锁定它们之间的间隙,因此允许在锁定的记录旁边自由插入新记录。
Gap locking 仅用于外键约束检查和重复键检查。
REPEATABLE READ 可重复读,事务中的一致性读取读取的是事务第一次读取所建立的快照。
SERIALIZABLE 序列化在了解了 4 种隔离级别的需求后,在采用锁控制隔离级别的基础上,我们需要了解加锁的对象(数据本身&间隙),以及了解整个数据范围的全集组成。
数据范围全集组成
SQL 语句根据条件判断不需要扫描的数据范围(不加锁);
SQL 语句根据条件扫描到的可能需要加锁的数据范围;
以单个数据范围为例,数据范围全集包含:(数据范围不一定是连续的值,也可能是间隔的值组成)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)