SinoDB的事务和会话的隔离级别

什么是隔离

1:多个同时运行的事务之间不会互相影响彼此的执行
2:每个用户感觉自己的事务都是排他的执行,同时发生的其他事务应该出现在当前事务的前或者后,类似一个事务中的“序列”
3:隔离级别用来定义多大程度的隔离多个不同的事务
Dirty read / Read Uncommitted:脏读
Last committed read(Optimistic):一种乐观的方式,读取最后提交的数据
Committed read:提交读,只读已提交的数据
Cursor stability:游标,游标稳定性
Serializable:序列
Repeatable read:可重复读
4:如果数据库支持事务的并发控制能力,用户和程序员就可以不用担心多个事务的同时运行了。

隔离级别:Dirty Read

ANSI:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

SinoDB:

SET ISOLATION TO DIRTY READ;

1:采用这种隔离级别,数据库服务器不会分配任何锁
2:查询过程中,可以查询到任何数据row,甚至那些被修改但尚未提交的记录
3:Dirty-read隔离级别将产生幻影读,不可重复读的问题
4:非日志数据库中只有Dirty-read一种隔离级别
5:应用场景:
静态表(no updates,read-only tables)
速度比100%准确更重要的情况
不能等待锁的释放
6:优缺点:
优点:并发性高,不需要锁资源
缺点:脏读、幻影读、不可重复读

隔离级别:Committed Read

ANSI:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

SinoDB:

SET ISOLATION TO COMMITTED READ;

1:non-ANSI数据库的默认隔离级别
2:确保读取的所有记录都是提交到数据库:能避免读到脏数据,读到的所有记录都是已提交的,当一个进程读完记录后,其他进程就可以修改
3:committed read,在读取数据前,数据库server尝试在记录上加共享锁。加锁前,需要先检查是否可以对对象加共享锁,但是不加。如果可以加锁,则要保证要加锁的记录没有其他进程正在更新。当记录正在更新时,记录上有排他锁,此时我们不能对这些记录加共享锁
4:优缺点
优点:相对dirty read能避免脏读的问题
缺点:并发性较dirty read有所降低,容易出现锁等待引起的问题。不能解决幻影读,不可重复读

隔离级别:Cursor Stability

ANSI数据库无此隔离级别

SinoDB:

SET ISOLATION TO CURSOR STABILITY;
1:更新CURSOR,游标读的所有记录加上共享锁。共享锁一致将保持,直到下一行记录被读取。通过游标检索数据,共享锁将一直保持到执行下一个FETCH语句
2:不仅可以看到提交的记录,也可以保证看到的记录不会被更新:。其他进程不能更新(UPDATE or DELETE)你所看到的记录。当移动到下一行时,锁才会释放,记录就可以进行修改

隔离级别:Repeatable Read

ANSI:

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

SinoDB:

SET ISOLATION TO REPEATABLE READ;
1:ANSI数据库的默认隔离级别
2:数据库在读取的记录上加共享锁,验证是否可以读取数据。直到数据提交,锁才能释放。其他用户可以读取数据,但是不能修改
3:可以保证在同一事务中,前后两次读取记录是一致的
4:当你必须要信任所有读取的记录,保证记录不被修改,我们可以采用repeatable read,例如统计数据(银行账号的余额情况)、关联查询多个表等。
5:优缺点
优点:能够解决脏读、幻影读和不可重复读的问题
缺点:只能串行执行,并发性低,需要对读取的记录加S-LOCK,容易引起锁相关的问题


隔离级别:Last Committed Read

ANSI数据库无此隔离级别

SinoDB:

SET ISOLATION TO COMMITTED READ LAST COMMITTED;
1:Last Committed Read是一种乐观锁,常被应用在基于WEB的应用程序中:。电子商务的一个例子:站点允许你可以选择商品增加到购物篮中,但是,此时后台可能正在对商品的价格进行更新。当你再次检查的时候,可能发现商品的价格已经发生变化。
2:相对Committed Read而言,提高了并发量和系统的吞吐量
3:返回最新提交的记录版本信息,尽管其他并发的session正在修改记录。这保证修改数据者不会误导其他读数据者。只是可以读取数据,但是不可以delete,update记录
4:可以通过onconfig文件的参数设置为默认的隔离级别:USELASTCOMMITTED
5:表需要设置为行级锁(row-level),不能是页级锁(page-level Locking)
6:Last Committed介于dirty read和committed read隔离级别之间的一种隔离级别
优点:能解决脏读问题,并发性高;不需要锁资源,能避免committed read带来的锁问题。
缺点:幻影读,不可重复读








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值