Efficiently traversing InnoDB B+Trees with the page directory--slot
Efficientlytraversing InnoDB B+Trees with the page directory
1、the purpose of the page directory
As described in the posts mentioned above,all records in INDEX pages are linked together in a singly-linked list inascending order. However, list traversal through a page with potentiallyseveral hundred records in it is very expensive: every record’s key
must becompared, and this needs to be done at each level of the B+Tree until therecord sought is found on a leaf page.
Index page页中的全部记录都以单链表递增的形式串联。可是在一页中以链表的形式检索记录代价非常大:每个记录的key必须比較,这个动作须要在全部高度的B+树上进行,知道在叶子节点找到记录。
The page directory greatly optimizes thissearch by providing a fixed-width data structure with direct pointers to 1 ofevery 4-8 records, in order. Thus, it can be used for a traditional binarysearch of the records in each page, starting at the mid-point
of the directoryand progressively pruning the directory by half until only a single entryremains, and then linear-scanning from there. Since the directory iseffectively an array, it can be traversed in either ascending or descendingorder, despite the records
being linked in only ascending order.
Page directory通过提供一个固定大小的数据结构(这个结构指向4-8个记录中的一个)优化查询。
因此可以在每一个页中使用二叉查找的方法。依据slot折半查找,知道仅仅剩下一个条目。然后从这个条目开水线性扫描。因为directory是一个高效的数组。可以以递增或者递减的顺序进行扫描。即使记录仅仅是以递增的顺序链接。
2、The physical structure of the pagedirectory
The structure is actually very simple. Thenumber of slots (the page directory length) is specified in the first field ofthe INDEX header of the page. The page directory always contains an entry forthe infimum and supremum system records (so the minimum size
is 2 entries), andmay contain 0 or more additional entries, one for each 4-8 system records. Arecord is said to “own” another record if it represents it in the pagedirectory. Each entry in the page directory “owns” the records between theprevious entry in
the directory, up to and including itself. The count ofrecords “owned” by each record is stored in the record header that precedeseach record.
Slots的个数在该页的index header部分的第一域指定。Page directory至少包括infimum和supremum的slot。
因此directory最少有2个slot。一个记录假设own其它记录,表示在这个slot里。每一个slot管理本身和上一个slot中的记录之间的记录。记录owned的个数存在每一个记录的record header部分。
The page-directory-summary mode of innodb_spacecan be used to view the page directory contents, in this case for a completelyempty table (with the same schema as the 1 million row table used in A quickintroduction to innodb_ruby), showing the minimum possible
page directory:
$ innodb_space -f t_page_directory.ibd -p 3page-directory-summary
slot offset type owned key
0 99 infimum 1
1 112 supremum 1
If we insert a single record, we can seethat it gets owned by the record with a greater key than itself that has anentry in the page directory. In this case, supremum will own the record (aspreviously discussed, supremum represents a record higher than any
possible keyin the page):
$ innodb_space -f t_page_directory.ibd -p 3page-directory-summary
slot offset type owned key
0 99 infimum 1
1 112 supremum 2
The infimum record always owns only itself,since no record can have a lower key. The supremum record always owns itself,but has no minimum record ownership. Each additional entry in the pagedirectory should own a minimum of 4 records (itself plus 3 others)
and amaximum of 8 records (itself plus 7 others).
Infimum记录总是仅仅own自己,由于是最小记录。
Supremum记录总是own自己。
除了infimum和supremum的slot,每一个slot都会至少管理4个记录(itself+3others)。最多管理8个。
To illustrate, each record with an entry inthe page directory (bolded) owns the records immediately prior to it in thesingly-linked list (K = Key, O = Number of Records Owned):
3、Growth of the page directory
Once any page directory slot would exceed 8records owned, the page directory is rebalanced to distribute the records into4-record groups. If we insert 6 additional records into the table, supremumwill now own a total of 8 records:
一旦一个slot管理的记录超过8个,slot就会将之分成4个记录为一组。假设我们个记录。
$ innodb_space -f t_page_directory.ibd -p 3page-directory-summary
slot offset type owned key
0 99 infimum 1
1 112 supremum 8
The next insert will cause are-organization:
在插入一个记录会引起重组
$ innodb_space -f t_page_directory.ibd -p 3page-directory-summary
slot offset type owned key
0 99 infimum 1
1 191 conventional 4
2 112 supremum 5
4、A logical view of the page directory
At a logical level, the page directory (andrecords) for a page with 24 records (with keys from 0 to 23) would look likethis:
Infimum总是仅仅own自己,该slot的n_owned=1
Supremum总是owns一个页中最后几个记录,个数能够小于4.
其它slot至少有4个记录最多8个。
逆序排放。从16376个字节開始。即FIL trailer的開始位置。
Take note that:
Records are singly linked from infimum tosupremum through all 24 user records, as previously discussed.
Approximately each 4th record is enteredinto the page directory, represented in the illustration both by bolding thatrecord and by noting its offset in the page directory array represented at thetop of the illustration.
The page directory is stored “backwards” inthe page, so is reversed in this illustration compared to its ordering on disk.
记录是单链表形式链接
http://blog.jcole.us/2013/01/
Efficiently traversing InnoDB B+Trees with the page directory--slot的更多相关文章
- innodb数据结构
Jeremy Cole on InnoDB architecture : Efficiently traversing InnoDB B+Trees with the page directory ...
- MySql基础入门-mysql体系结构
mysql体系结构: 由:连接池组件.管理服务和工具组件.sql接口组件.查询分析器组件.优化器组件. 缓冲组件.插件式存储引擎.物理文件组成. mysq ...
- MySQL的InnoDB索引原理详解
摘要 本篇介绍下Mysql的InnoDB索引相关知识,从各种树到索引原理到存储的细节. InnoDB是Mysql的默认存储引擎(Mysql5.5.5之前是MyISAM,文档).本着高效学习的目的,本篇 ...
- MySQL内核:InnoDB存储引擎 卷1
MySQL内核:InnoDB存储引擎卷1(MySQL领域Oracle ACE专家力作,众多MySQL Oracle ACE力捧,深入MySQL数据库内核源码分析,InnoDB内核开发与优化必备宝典) ...
- MySQL的InnoDB索引原理详解 (转)
摘要: 本篇介绍下Mysql的InnoDB索引相关知识,从各种树到索引原理到存储的细节. InnoDB是Mysql的默认存储引擎(Mysql5.5.5之前是MyISAM,文档).本着高效学习的目的,本 ...
- innodb的表最大限制
相信大多数人都不知道,innodb的表最大限制为64TB,但是why? Each space is divided into pages, normally 16 kib each (this can ...
- MySQL:InnoDB存储引擎的B+树索引算法
很早之前,就从学校的图书馆借了MySQL技术内幕,InnoDB存储引擎这本书,但一直草草阅读,做的笔记也有些凌乱,趁着现在大四了,课程稍微少了一点,整理一下笔记,按照专题写一些,加深一下印象,不枉读了 ...
- MySQL · 引擎特性 · InnoDB 事务锁简介
https://yq.aliyun.com/articles/4270# zhaiwx_yinfeng 2016-02-02 19:00:43 浏览2194 评论0 mysql innodb lock ...
- innodb结构解析工具---innodb_ruby
1.下载ruby并安装ruby: ftp://ftp.ruby-lang.org/pub/ruby/ ftp://ftp.ruby-lang.org/pub/ruby/ruby-2.3-stable. ...
随机推荐
- java rsa 解密报:javax.crypto.BadPaddingException: Decryption error
Exception in thread "main" javax.crypto.BadPaddingException: Decryption error at sun.se ...
- linux内核情景分析之execve()
用来描述用户态的cpu寄存器在内核栈中保存情况.可以获取用户空间的信息 struct pt_regs { long ebx; //可执行文件路径的指针(regs.ebx中 long ecx; //命令 ...
- off charging mode flow
/system/core/init/init.cpp ..... ..... ..... int main(int argc, char** argv) { ..... ..... ..... // ...
- 利用Com组件产Excel完整操作
最近公司要批次产出报表,是利用控制台应用程序操作Excel,并设置各种样式. 在网上搜索此类的例子,但是感觉一些用法都已经发生了变化,我用的.net 4.0 ,Microsoft.Office.Int ...
- 元素类型 “meta” 必须由匹配的结束标记 “” 终止
报错 org.xml.sax.SAXParseException: 元素类型 “meta” 必须由匹配的结束标记 “” 终止 系统自动创建 <meta charset="UTF-8&q ...
- (4)oracle连接工具和配置监听
一.SQL PLUS sql plus 是oracle最常用的命令行工具,启动sqlplus工具的方法有两种 1. 是在安装好的oracle开始程序的路径下运行程序 点击运行弹出此界面 2 .是在cm ...
- Codeforces Beta Round #91 (Div. 2 Only) A. Lucky Division【暴力/判断是不是幸运数字4,7的倍数】
A. Lucky Division time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- Codeforces Round #446 (Div. 2) C. Pride【】
C. Pride time limit per test 2 seconds memory limit per test 256 megabytes input standard input outp ...
- UVA 1151 Buy or Build MST(最小生成树)
题意: 在平面上有n个点,要让所有n个点都连通,所以你要构造一些边来连通他们,连通的费用等于两个端点的欧几里得距离的平方.另外还有q个套餐,可以购买,如果你购买了第i个套餐,该套餐中的所有结点将变得相 ...
- POJ 1274 The Perfect Stall (二分图匹配)
[题目链接] http://poj.org/problem?id=1274 [题目大意] 给出一些奶牛和他们喜欢的草棚,一个草棚只能待一只奶牛, 问最多可以满足几头奶牛 [题解] 奶牛和喜欢的草棚连线 ...