Chinaunix首页 | 论坛 | 博客
  • 博客访问: 126158
  • 博文数量: 46
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 335
  • 用 户 组: 普通用户
  • 注册时间: 2014-07-19 19:13
文章分类

全部博文(46)

文章存档

2015年(1)

2014年(45)

我的朋友

分类: Mysql/postgreSQL

2014-09-22 23:03:41

7.2 事务的实现

7.2.1 redo

    ·事务日志通过重做日志文件、InnoDB存储引擎的日志缓冲实现

    ·开始一个事务时,记录该事务的一个日志序列号LSN(log sequence Number)

·当事务执行时,会往InnoDB存储引擎的日志缓冲中插入事务日志

·当事务提交时,必须将InnoDB的日志缓冲写入磁盘

·预写日志方式(WAL),就是写数据前,需要先写日志

    例:

    建立表z,并创建load_test存储过程:

>create table z(a int,primary key(a))engine=innodb;

>DELIMITER//

>create procedure load_test(count int)

>begin

>declare i int unsigned default 0;

>start transaction;

>while i

>insert into z select i;

>set i=i+1;

>end while;

>commit;

>end;

>//

 

通过命令观察当前日志重做情况:

>show engine innodb status\G;

 Log sequence number  304734560

 Log flushed up to      304734560 

 Last checkpoint at      304734560

   

调用存储过程load_test(10000),插入10000条记录

>call load_test(10000);

 

通过命令观察新的日志重做情况,跟第一次情况作对比:

>show engine innodb status\G;

 Log sequence number  304767789

 Log flushed up to      304767789 

 Last checkpoint at     304757460

 

   7.2.2 undo

     ·用于对事物进行回滚撤销

       ·对数据库进行修改时,数据库不但会产生redo,还会产生一定量的undo

       ·redo存放在重做日志文件中,undo存放在数据库内部一个特殊段中(undo段)

       ·undo段位于共享表空间内

 

       ·InnoDB存储引擎回滚时,实际上做的是与先前相反的工Insert-delete,update-update

       

 7.3 事务控制语句

 START TRANSACTION|BEGIN

 COMMIT

 ROLLBACK

 SAVEPOINT identifier

 RELEASE SAVEPOINT identifier

 ROLLBACK TO SAVEPOINT identifier

 SET TRANSACTION [READ UNCOMMITTED,READ COMMITTED,REPEATABLE    READ,SERIALIZABLE]

 

7.5 对于事务操作的统计

   ·show global status like com_commit\G;

   ·show global status like com_rollback\G;

 

7.6事务隔离级别

7.7 分布式事务

·分布式事务由一个或多个资源管理器,一个事务管理器,一个应用程序组成

  资源管理器:提供访问事务资源的方法。通常一个数据库就是一个资源管理器

  事务管理器:协调参与全局事务中的各个事务。需要与参与全局事务中的资源管理器   进行通信

   应用程序:定义事务的边界,指定全局事务中的操作

      

 

java 分布式事务支持 -JTA

 

7.8 不好的事务习惯

   ·在循环中提交事务

   ·使用自动提交

   ·使用自动回滚

   

   

 

阅读(764) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~