innodb 通过undo构造出老版本记录流程
来源:互联网 发布:录像软件 编辑:程序博客网 时间:2024/04/29 03:17
trx_undo_prev_version_build:roll_ptr = row_get_rec_roll_ptr(rec, index, offsets);//rec为新记录rec_trx_id = row_get_rec_trx_id(rec, index, offsets);//获取记录里面的事务idtrx_undo_get_undo_rec(roll_ptr, rec_trx_id, &undo_rec, heap);//根据roll_ptr获取undo recptr = trx_undo_rec_get_pars(undo_rec, &type, &cmpl_info,//解析出type、cmpl_info等 &dummy_extern, &undo_no, &table_id);//解析出老记录的trx_id和roll_ptr和info_bitsptr = trx_undo_update_rec_get_sys_cols(ptr, &trx_id, &roll_ptr,&info_bits);//update的结构:{info_bits = 0, n_fields = 3, fields = 0xa368bb8}// {field_no = 3, orig_len = 0, exp = 0x0, new_val = {data = 0xa368ba2, ext = 0, len = 4, type = // {prtype = 1027, mtype = 6, len = 4, mbminmaxlen = 0}}}ptr = trx_undo_rec_skip_row_ref(ptr, index);//跳过主键列//构建update vector,即更新的老记录列值.将trx_id和roll_ptr放到update最后ptr = trx_undo_update_rec_get_update(ptr, index, type, trx_id, roll_ptr, info_bits, NULL, heap, &update);buf = static_cast<byte*>(mem_heap_alloc(heap, rec_offs_size(offsets)));//将新记录拷贝到新申请的buf中*old_vers = rec_copy(buf, rec, offsets);rec_offs_make_valid(*old_vers, index, offsets);//替换新记录临时记录的update vectorrow_upd_rec_in_place(*old_vers, index, offsets, update, NULL);
问题:
1、通过undo log和新版本的记录就可以构造出老版本记录了,而且mvcc中也是通过这个方法构造出的老版本记录,并没有直接访问打上delete标签的老版本,那么为什么页内打上delete标签的记录并不直接删除呢?为了回滚?
阅读全文
0 0
- innodb 通过undo构造出老版本记录流程
- InnoDB记录结构浅析(摘自老杨)
- innodb undo--insert undo log
- innodb undo--update undo log
- 新老版本的驱动注册流程
- 如何通过dom4j构造出xml格式文件
- innodb undo--undo page(补充)
- innodb undo --update undo log补充2
- Mysql Innodb中undo-log和MVCC多版本一致性读的实现(源码分析)
- Mysql Innodb中undo-log和MVCC多版本一致性读 的实现
- Mysql Innodb中undo-log和MVCC多版本一致性读 的实现
- Innodb Multi version(undo logs)
- mysql-innodb-undo和redo
- Innodb独立的undo tablespace
- InnoDB的Redo Undo Log
- InnoDB MVCC实现、Undo作用
- 14.2.5 InnoDB Undo Logs
- InnoDB undo log 漫游5.7
- Java 8——Stream API
- thinkphp5.0开发实战基础--如何使用框架
- 构造函数,拷贝构造,析构函数,运算符重载。
- MVC框架-mentawai(9)
- JZOJ__Day 1:【NOIP普及模拟】JABUKE
- innodb 通过undo构造出老版本记录流程
- 【实验七】MPEG音频编码实验
- Android自动跳转页面和自杀页面的方法
- 复习---Linux系统调用
- Aandroid 动画
- SQLite增删查改语句
- JSON字符串转JSON对象
- 点击跳转网址
- 多线程通信( wait(),notify(),notifyAll() )