欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

【转】informix的事宜、并发控制、锁机制、隔离级别

更新时间: 2014-01-05 02:19:52 责任编辑: Author_N1

 

【转】informix的事务、并发控制、锁机制、隔离级别

1、事务

      事务是指作为单个逻辑工作单元执行的一系列操作。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单 元,可以简化错误恢复并使应用程序更加可靠。数据库服务器保证在事务范围内执行的操作完整且正确地提交至磁盘,否则数据库会复原至事务启动之前的状态。
     一个逻辑工作单元要成为事务,必须满足所谓的ACID属性。ACID的具体含义如下:
     1)A(Atomicity):操作序列要么完整的执行,否则什么都不做;
     2)C(Consistency):一致性,事务执行后,保证数据库从一个一致性状态到另外一个一致性状态;
     3)I(Isolation):隔离,一个事务的中间状态对其他事务不可见,即每个用户都感觉他们在单独使用数据库。隔离级别用来定义多大程度的隔离多个不同的事务;
     4)D(Durability):持久性,事务的有效性,不会应用硬件或软件的失败而丢失。
2、并发控制
      1)相关概念
       i)隔离(+一致性) => 并发控制;
       ii)多个事务可以访问或修改相同的资源;
       iii)只要多个进程共享资源,就需要对访问进程进行排队控制;
       iv)在进行并发控制时,数据库内部将生成多个并发事务访问资源的操作序列表,并且每一个事务内部的各个操作都需要序列化。
       2)串行调度存在的问题
       在串行调度中,采用操作序列,一个事务完成了再完成另外一个,即使两个事务T1、T2更新的是数据库中不同的对象。此种方式从并发和性能角度考虑,都不能很好的利用计算机资源。
       为了改善性能,需要采用非串行调度,即允许事务并发执行,即一个事务内的操作可以在其他事务提交前开始执行。
        3)并发调度的常见问题
        i)脏读:事务T2读取到了事务T1没有提交的结果
         例如如下的操作序列会导致脏读:
         事务T1读取记录,然后更新记录;
         事务T2读取了更新后的记录;
         若T1后续操作失败,会导致更新的记录回滚,而同时事务T2已经使用了这个没有提交的值。
         ii)不可重复读:事务T1中多个读操作返回不同的结果
         事务T1读取一个对象;
         事务T2读取并更新同一个对象;
         事务T1再次读取同一个对象返回了不同的值。
         iii)幻影读:如果事务T1在同样的情况下多次执行select读取的结果不同
         事务T1从一个表中检索满足特定条件的记录返回m条记录;
         事务T2往该表中insert/delete其他满足相同条件的记录;
         事务T1再次以相同的条件检索该表的数据返回的数据记录不为m条。
3、锁机制
       1)相关概念
        i)用户可以锁定一个对象,可以防止 其它用户修改锁定的对象;
        ii)在多个用户并发访问数据库的情况下,为保证数据完整性,锁是很有必要的;
        iii)程序可以显式的对数据枷锁,数据库系统可以隐式的对对象进行加锁。
       2)锁的类型
       i)共享锁(Shared locks) :多个用户可以读取相同的记录
       如果一个对象上没有排他锁,则共享锁可以加在该对象上,它可以防止其他事务更新数据,但同时,其他事务可以读取该数据,多个事务可以在同一个对象上加多个共享锁。
       ii)排他锁(Exclusive locks) :同一时间仅仅有一个用户可以读取相同的记录
       如果一个对象上没有任何锁,排他锁才可以加在该对象上。一旦在记录上加了排他锁,则不能在该记录上增加任何锁了,直至锁释放。它可以防止其他事务读取和更新数据。
       iii)提升/更新锁(Promotable/Update lock) :可以对锁进行升级或者降级
       在更新游标时使用,由游标在含有“for update”选项执行时产生,只能在没有排他锁或其他更新锁的记录上加更新锁。当锁定的记录真正执行的时候,更新锁将提升为排他锁。
       iv)专一锁(Intent lock) :是一种表级锁,标识在该表上有一个游标在读取数据
       由IDS自动分配,如果一条记录上的记录被更新,一个排他锁将分配在该记录上,同时将该记录的表上自动加上专一锁,这能保证没有session可以在该表上增加排他锁,只要该表中有记录被增加了排他锁。
       3)锁的有效期
        i)程序可以控制数据库锁的有效期;
        ii)当数据库关闭后,数据库锁将被释放;
        iii)根据数据库使用了事务的情况,表锁的有效期不同。如果数据没有使用事务(没有使用事务日志,也不使用commit work语句),显式对一个表lock,当执行unload table时,锁将被释放;
        iv)当数据库使用了事务,事务结束时,将释放事务所有的锁。
        4)不同粒度的锁
         i)数据库级别的锁 :数据库管理活动,比如imports和exports。例如:

       2)查看用户进程锁等待情况
       使用: onstat –u。
       3)查看锁使用和等待情况
       使用: onstat -k
       4)监控数据库事务及其状态
       使用: onstat -x

上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:19:52
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/8549/
本文WWW.DOC100.NET DOC100.NET版权所有。