资源串行化的实现方式:
事务
事务隔离级别:
锁机制
事务:
acid
原子性,一致性,隔离性,持久性
事务的隔离级别:
cs cursor stability 具有最高程度的并发性,当CS在行上定位游标时会锁定任何由应用程序所存取的行,此锁定在读取下一行或是终止该事务之前有效。然而改变了某一行上的任何数据,则在对数据库更改之前必须持有该锁。
对于具有CS的应用程序以检索的行,当该行上有任何可更新的游标时,任何其他应用程序都不能更新或是删除该行。CS的应用程序不能查看其他程序uncommitted的行。但是在同一程序单元内,一个游标被处理两次,可能返回不同的结果。如扫描一个10000行的表,如果采用CS方式,将之锁定当前游标之下的行,当游标移去该行时,接触该锁。除非更新改行,。
rr repeatable read
锁定应用程序在工作单元中所引用的所有行,知道commit。其它程序不能访问该数据,同同一程序单元内,如果数据被访问两次,返回相同结果。利用RR,不会出现丢失更新现象。。但是由于RR锁定的不仅仅是检索的哪一行数据,而是工作单元引用的每一行,这意味着如果用户扫描10000行数据,尽管只过滤出了10行,但仍然会锁定10000行,其他工作单元不能访问该事务所引用的数据,并发度大大降低。同时采用RR会获得和持有大量的锁,有可能超过系统定义的持有锁数量的限制。
rs read stablit
只会锁定应用程序在事务中检索的那些行,但是其他应用程序可以对其执行insert操作。在同一程序单元
如果数据被访问两次,那么可能返回新插入的数据,但是返回的旧数据不会变化。与RR锁定10000行不同,RS仅锁定10行,锁定的数量大大减少,并发度得到提高。
适合: 在并发环境下运行,在事务中不会多次发出相同的查询。或是在同一事务中发出多次查询但是并不要求获得相同查询结果的应用程序。
ur uncommited read 它不会持有任何锁,也就是所谓的脏读,可以读取数据库 中的任何内容,包括已经修改但是尚未提交的,最常用与表的查询。
隔离级别的选择:
需高高的数据稳定性 不需要高的数据稳定性
读写事务 RS cs
只读事务 RR /RS ur
阅读(1483) | 评论(0) | 转发(0) |