怎么理解MySQL中Innodb DB_ROLL_PTR指针
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容主要讲解"怎么理解MySQL中Innodb DB_ROLL_PTR指针",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么理解MySQL中Innod
千家信息网最后更新 2026年11月03日怎么理解MySQL中Innodb DB_ROLL_PTR指针
本篇内容主要讲解"怎么理解MySQL中Innodb DB_ROLL_PTR指针",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么理解MySQL中Innodb DB_ROLL_PTR指针"吧!
一、引入
我们知道每一条记录在聚集索引上都有如下的分布:
rowid(主键)+DB_TRX_ID+DB_ROLL_PTR+其他字段
这样格式其中DB_TRX_ID+DB_ROLL_PTR作为一致性读的关键信息存储下来,其中DB_TRX_ID在存储上占用6字节,DB_ROLL_PTR在存储上占用7字节。那么DB_ROLL_PTR是如何解析到undo上的呢,这也是一位朋友问的问题。
下面是trx0types.h中对这部分的定义
/** Row identifier (DB_ROW_ID, DATA_ROW_ID) */typedef ib_id_t row_id_t;/** Transaction identifier (DB_TRX_ID, DATA_TRX_ID) */typedef ib_id_t trx_id_t;/** Rollback pointer (DB_ROLL_PTR, DATA_ROLL_PTR) */ typedef ib_id_t roll_ptr_t;
而ib_id_t实际上都是64位非负整数
typedef unsigned __int64 ib_uint64_t;
二、函数流程
我大概看了一下流程如下:
trx_undo_prev_version_build //Build a previous version of a clustered index record ->roll_ptr = row_get_rec_roll_ptr(rec, index, offsets); //获取rollback 指针 ->rec_trx_id = row_get_rec_trx_id(rec, index, offsets); //获取TRX_ID ->trx_undo_get_undo_rec(roll_ptr, rec_trx_id, heap, is_redo_rseg,index->table->name, &undo_rec))//此处获取前版本,获取后放到undo_rec中 ->trx_undo_get_undo_rec_low(roll_ptr, heap, is_redo_rseg); //undo_rec作为传出参数。传出访问到的undo ->trx_undo_decode_roll_ptr //做roll_ptr的解析工作获取segment id\page no\offset ->开MTR获取latch准备拷贝 ->拷贝trx_undo_rec_copy ->提交MTR
实际上解析工具由trx_undo_decode_roll_ptr 完成。
三、实际解析
其实解析挺简单,都是写死了的。
/***********************************************************************//**Decodes a roll pointer. */ //从高位到低位依次是 第1位是否是insert //第2到8位是segmentid//第9到40位为page no //第41位到56位为OFFSETUNIV_INLINEvoidtrx_undo_decode_roll_ptr(/*=====================*/ roll_ptr_t roll_ptr, /*!< in: roll pointer */ ibool* is_insert, /*!< out: TRUE if insert undo log */ ulint* rseg_id, /*!< out: rollback segment id */ ulint* page_no, /*!< out: page number */ ulint* offset) /*!< out: offset of the undo entry within page */{#if DATA_ROLL_PTR_LEN != 7# error "DATA_ROLL_PTR_LEN != 7"#endif#if TRUE != 1# error "TRUE != 1"#endif ut_ad(roll_ptr < (1ULL << 56)); *offset = (ulint) roll_ptr & 0xFFFF; //获取低16位 为OFFSET roll_ptr >>= 16; //右移16位 *page_no = (ulint) roll_ptr & 0xFFFFFFFF;//获取32位为 page no roll_ptr >>= 32;//右移32位 *rseg_id = (ulint) roll_ptr & 0x7F;//获取7位为segment id roll_ptr >>= 7;//右移7位 *is_insert = (ibool) roll_ptr; /* TRUE==1 *///最后一位}到此,相信大家对"怎么理解MySQL中Innodb DB_ROLL_PTR指针"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
指针
实际
存储
内容
字节
实际上
拷贝
朋友
流程
学习
实用
更深
一致
一致性
低位
信息
关键
兴趣
函数
参数
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网金融科技
新华互联网科技
广东猪兼强互联网科技有限公司
科技创新与互联网经济
融势互联网科技
互联网科技的未来发展
镁科技互联网资讯平台
济南和联互联网科技有限公司
青岛中康互联网医疗科技有限公司
北京大学互联网科技怎么样
贵州叶脉互联网科技有限公司所属行业
和信科技工业互联网
互联网科技商业
消费医药和互联网科技
烟台灵鸽互联网科技有限公司
工业互联网展湾科技股份有限公司
上海科技产业互联网平台
黑科技 体验场景 互联网大会
电子商务与互联网科技的关系
国产互联网科技公司
互联网科技名片
河南云网互联网络科技有限公司
凡科互联网科技
互联网科技网站
新华互联网科技校企合作
阿里巴巴算科技企业还是互联网
来此购互联网科技有限公司
爱医互联网络科技
南博望互联网科技有限公司
科技互联网专业务虚会材料