ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 事务和OWI

事务和OWI

原创 Linux操作系统 作者:keer7737 时间:2011-08-02 15:31:51 0 删除 编辑
 事务和OWI
--------------------------------------------------
摘自 高级owi与oracle性能调整
 事务的概要
 
   完整地理解事务,就等于完整的了解了oracle,所以要理解事务,需要理解oracle所提供的控制功能,内部算法
 而且,在像rac这样的多节点环境下,多个节点需要同步,所以其复杂程度超出想象。本章只对理解等待事件引起的
 性能问题需要的事务机制进行说明,详细的信息请翻阅参考文献。
   
   用户执行DML(即执行事务)操作在oracle内部如下顺序进行
   (1) 相应事务分配回滚段(undo segment),这时优先使用当前联机状态回滚段中一个,回滚段的选择是随机的,若
 另外的事务正在使用重试3次,在此过程中失败,则将未联机的回滚段联机后使用。如果此过程也失败,就会创建新的
 回滚段,通过这个过程也没有分配到回滚段,则使用oracle8i中使用的回滚段算法(rollback segment),即,使用另外
 事务使用中用量最少的回滚段,如果服务器进程在获得回滚段时没有适当的联机状态的回滚段,则等待enq:US-contention
 事件,直到有适当的联机状态的回滚段为止。
   
   (2) 分配回滚段后,在回滚段头上创建事务表 slot(transaction table slot)。
   
   (3)  创建事务表后会生成TXID (Transacion ID),再将此TXID分配给当前事务,TXID通过V$TRANSACION视图的XIDUSN,XIDSLOT
   XIDSQN表现,这个值指向分给事务的回滚段头上存在的事务表的准确位置,事务必须在分配撤销区域后得到TXID。
   
   (4) 事务对象的数据块载入到高速缓冲区,在块头的ITL(interested transacion list)上登记事务条目(transaction entry).如果
   ITL上没有登记条目所需的空间,直到有空间为止,一直等待ENQ:TX-allocate ITL entry事件。
   
   (5) 将需要修改的块的修改信息存储到PGA,存储名为change vector,修改一行时,一般分别创建undo segmet 头块的(change vector#1),
   撤销块(change vector#2),数据块(change vector#3)相应的change vector,进程将pga 的change vector以名为redo record(或redo entry)
   复制到重做缓冲区。再负责到重做缓冲区的过程中,需获得redo copy latch,redo allocation latch ,redo writing latch,在此过程
   中发生latch争用,分别等待latch:redo copy,redo allocation,latch redo writing事件。
   
   (6) 将此前的块的映像信息(before image)记录到撤销块(undo block),继而修改数据块,被修改的数据块变为脏的状态,而且,高速缓冲区
   上创建关于已修改的数据块的CR(consistent read)块,如果需修改的行正在被另外的事务所改变(即修改后事务尚未结束的状态),
   就要等待事务结束,此时会等待enq:TX-row lock contention事件。
   
   (7) 执行提交(commit)后给事务分配SCN。提交信息存储在重做缓冲区(redo buffer)
   
   (8) 回滚段头的事务表中存储已成功提交的信息,解除包括TX锁在内的所有资源占用。
   
   (9) 重做缓冲区的内容记录在重做日志文件上,修改的块之后被DBWR记录到数据文件中。
   

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7194105/viewspace-703824/,如需转载,请注明出处,否则将追究法律责任。

上一篇: oracle 时区
请登录后发表评论 登录
全部评论

注册时间:2008-01-08

  • 博文量
    69
  • 访问量
    117236