关闭

事务实现原理

2716人阅读 评论(0) 收藏 举报
分类:

1. 每个事务都有个事务id

 2. 最终落到 每一个块的原子性。 

     写一个块,部分写完部分未写完。如何判断是否全写完,如何回滚 如何重写,如何幂等重写?

和mysql的事务比较起来:

1. 对page的写是加锁串行的.  (这样lsn大小判断幂等法才有意义)

2. 回滚操作是要实现的.回滚后才能执行下一个对page的改动.

     每次操作有事务id,放在块最后。重写的时候发现有就不重写。没有,部分写了怎么办?double write。如果大事务回滚,只不过改成原来的操作逆写。对块来说另外一种写。省磁盘,只double write,不备份之前的。


正常思考逻辑.

  

    1. 写undo log

    2. 对字段更新

    3. 如回滚,利用undo回滚

    4. 如提交,不做任何操作.

问题: 回滚到一半宕机了怎么办?

我的理解是

    1. update了就加锁了,  加锁以后就可以串行了, 可以大小判断幂等法进行幂等重试.

    其他点: 查看源代码,是否在rollback的时候修改了事务的持久化信息.

事务一旦到达终态.(commit 或者roll back完毕)就,可以从持久化中删除.


考虑性能问题后的改造以及引发的一致性问题解决--:

解决性能问题,引入redo日志

    不时时刷新. 为了保持持久性,引入redo, 这样就引入了脏页的刷新. 和多次刷新问题. 引入lsn进行幂等刷新.



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:286007次
    • 积分:5064
    • 等级:
    • 排名:第5763名
    • 原创:231篇
    • 转载:38篇
    • 译文:6篇
    • 评论:24条
    最新评论