在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

怎么理解MySQL中Innodb DB

119次阅读
没有评论

共计 2226 个字符,预计需要花费 6 分钟才能阅读完成。

本篇内容主要讲解“怎么理解 MySQL 中 Innodb DB_ROLL_PTR 指针”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“怎么理解 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 指针”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-24发表,共计2226字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 亚洲国产精品无码久久一区二区 | 精品亚洲一区二区三区在线观看 | 久久99精品久久久久久园产越南 | 欧美猛少妇色xxxxx | 欧美uc恋夜在线全部视频 | 色先锋在线观看 | 久久综合一区 | 久久久国产99久久国产久 | 免费黄色大片网站 | 四虎影视免费 | 青青草国产精品久久 | 亚洲日本欧美综合在线一 | 久久天天躁狠狠躁夜夜躁2014 | 一区二区三区不卡免费视频97 | 久操免费在线视频 | 又色又污又爽又黄的网站 | 吃奶呻吟张开双腿做受在线播放 | 六月丁香婷婷色狠狠久久 | 九九精品在线视频 | 99久久精品免费看国产免费软件 | 激情偷乱人伦小说视频 | 国产成人精品视频午夜 | 中文字幕一区二区三区日韩精品 | 日产精品卡2卡三卡乱码网站 | 亚洲男人在线天堂 | 国产亚洲精品aa在线看 | 久久99久久精品免费思思6 | 日韩av片无码一区二区三区不卡 | 成人亚洲欧美综合 | 久久久精彩视频 | 宅男666在线永久免费观看 | 日韩国产精品无码一区二区三区 | 国产爆乳无码一区二区麻豆 | 女被男啪到哭的视频网站 | 精产国品一二三产区m553麻豆 | 女人隐私秘视频黄www免费 | 99久久99久久久99精品齐 | 欧美在线播放一区二区 | 女人一级一级毛片 | 67194熟妇在线直接进入 | 欧美videos另类极品 |