ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle Trancation和Mysql InnoDB在Commit的区别

Oracle Trancation和Mysql InnoDB在Commit的区别

原创 Linux操作系统 作者:kiddwyl 时间:2019-03-22 10:39:06 0 删除 编辑

因为项目的需要,这段时间对MySQL进行了系统化的测试和研究,MySQL InnoDB相信大家都知道,给MySQL带来了很多方便之处,让MySQL这个小海豚拥有了和Oracle同样的商业竞争能力,那么现在我们就来说一下Oracle Trancation和MySQL InnoDB之间的一些心得体会

首先我们先来说一下Oracle执行COMMIT时要做那些工作:

COMMIT是一个非常快的操作,当我们发布commit命令时,真正困难的动作已经完成,
在数据库中已经执行了数据更改,所以已经完成了99%的任务,例如:下列操作已经产生:

      1.在SGA(Buffer Cache)中已经生成了undo块;
      2.在SGA(Buffer Cache)中已经生成了产生改变的数据块和索引块;
      3.在REDO LOG BUFFER生成了前面两项的redo信息;
      4.依赖于前三项产生的数据量大小以及操作需要的时间,buffer中的数据可能已经
         有一部分输出到了磁盘;
      5.所有需要的锁已经获得;
     
      当执行COMMIT命令时,只执行如下操作:
     
      1.为事务生成SCN:SCN是ORACLE数据库的一种计时信息,用以保证事务的顺序性,
         同时还用于失败恢复和保证数据库的读一致性和检查点,无论何时何人提交,SCN
         自动加1;
     
      2.将事务相关的未写入redo log file中的redo信息从redo log buffer写入到redo log
        file,这才是真实的COMMIT,这步操作完成,说明我们已经完成COMMIT,事务从
        V$TRANSACTION中移除;
       
      3.V$LOCK中记录的SESSION关于该事务的锁会释放,其他需要这些锁的事务被唤醒;
     
      4.执行块清理,清理块头保存的事务信息;

然后我们来看一下MySQL:

InnoDB 每次提交事务会刷新日志innodb_log到磁盘,而磁盘的速度,因此,建议不要频繁提交事务

 

以上大致的描述了一下Oracle和MySQL在处理Commit时的区别,从这几句话很明显的可以看出,Oracle不愧为一个商业关系型数据库,在trancation方面做得非常到位,他的这种机制很大程度保障了恢复和高并发的需要

反观MySQL InnoDB,在这方面就比较逊色,在高压下甚至还会造成事务的丢失等不稳定事件的发生

今天在这里只是简单的对比一下2个数据库在commit方面所做的事情,以后的篇章我将会从2个数据库本身的事务设计原理出发,来为大家进行分析

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

请登录后发表评论 登录
全部评论

注册时间:2004-08-27

  • 博文量
    66
  • 访问量
    49009