mysql extent管理_mysql extent \segment\tablespace 详解

在test库下创建了一个分区表bk_user_action_log_1

mysql> show  create table bk_user_action_log_1\G;

*************************** 1. row ***************************

Table: bk_user_action_log_1

Create Table: CREATE TABLE `bk_user_action_log_1` (

`id` int(12) unsigned NOT NULL AUTO_INCREMENT,

`operator_uid` bigint(12) unsigned NOT NULL,

`baike_id` int(11) unsigned NOT NULL,

`score` smallint(6) NOT NULL,

`score_type` tinyint(1) unsigned NOT NULL,

`operator_type` varchar(40) NOT NULL,

`object_id` int(11) unsigned NOT NULL DEFAULT '0',

`object_type` tinyint(1) unsigned NOT NULL,

`object_uid` bigint(12) unsigned NOT NULL,

`operator_time` int(10) unsigned NOT NULL,

PRIMARY KEY (`id`,`operator_time`),

KEY `inx_operator_time` (`operator_time`),

KEY `inx_operator_uid_operator_type_object_id` (`operator_uid`,`operator_type`,`object_id`)

) ENGINE=InnoDB AUTO_INCREMENT=900001 DEFAULT CHARSET=utf8

/*!50100 PARTITION BY RANGE ( operator_time)

(PARTITION p0 VALUES LESS THAN (1356969600) ENGINE = InnoDB,

PARTITION p1 VALUES LESS THAN (1362067200) ENGINE = InnoDB,

PARTITION p2 VALUES LESS THAN (1367337600) ENGINE = InnoDB,

PARTITION p3 VALUES LESS THAN (1372608000) ENGINE = InnoDB,

PARTITION p4 VALUES LESS THAN (1377964800) ENGINE = InnoDB,

PARTITION p5 VALUES LESS THAN (1383235200) ENGINE = InnoDB,

PARTITION p6 VALUES LESS THAN (1388505600) ENGINE = InnoDB,

PARTITION p7 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */

1 row in set (0.00 sec)

------------------------------------

已经打开了每个表使用一个表空间

file:///C:/Users/LENOVO/AppData/Local/Temp/enhtmlclip/Image.png

cd  /data/mysqldata/3306/test

file:///C:/Users/LENOVO/AppData/Local/Temp/enhtmlclip/Image(1).png

创建了7个分区

其中只有第三个分区(bk_user_action_log_1#P#p3.ibd)中导入了数据

-----------------------------------------------------------------------------------------------------------------------------------------

使用了 innodb_space工具查看具体信息

(1)、查看当前表空间所有的页面记录。每个页面占用一行,

[root@Mysql2 test]#  innodb_space -f  bk_user_action_log_1#P#p3.ibd space-summary|head  -n  10

page        type                prev        next        lsn

0           FSP_HDR             0           0           3429049085

1           IBUF_BITMAP         0           0           3429062361

2           INODE               0           0           3429049085

3           INDEX               0           0           3429049085

4           INDEX               0           0           3428907956

5           INDEX               0           0           3428876590

6           INDEX               0           7           3200646807

7           INDEX               6           8           3200706000

-------------------------------------------------------------------------------------------------------------------------------------------

[root@Mysql2 test]#  innodb_space -f  bk_user_action_log_1#P#p3.ibd space-summary|tail  -n  10

11510       ALLOCATED           0           0           0

11511       ALLOCATED           0           0           0

11512       ALLOCATED           0           0           0

11513       ALLOCATED           0           0           0

11514       ALLOCATED           0           0           0

11515       ALLOCATED           0           0           0

11516       ALLOCATED           0           0           0

11517       ALLOCATED           0           0           0

11518       ALLOCATED           0           0           0

11519       ALLOCATED           0           0           0

可以看到一个分配了11520个页面,每个页面大小为16k,总大小为11520*16*1024=188743680,正好等于第三个分区的文件大小。

(2)、查看当前的所有区间的分配

[root@Mysql2 test]#  innodb_space -f  bk_user_action_log_1#P#p3.ibd space-extents

file:///C:/Users/LENOVO/AppData/Local/Temp/enhtmlclip/Image(2).png

.....

.....

file:///C:/Users/LENOVO/AppData/Local/Temp/enhtmlclip/Image(3).png

从11009开始就是未分配的区

(3)、查看页面所有页面的分配情况,对相同类型的页面进行了整理

file:///C:/Users/LENOVO/AppData/Local/Temp/enhtmlclip/Image(4).png

可以看到第一个未分配的页面是8791,从(2)上面的截图中也可以看出8768是第一个未满的区的首页,从8768-8790为已经分配的页面。

(3)、查看页面在各个列表的情况

[root@Mysql2 test]#  innodb_space -f  bk_user_action_log_1#P#p3.ibd space-lists

file:///C:/Users/LENOVO/AppData/Local/Temp/enhtmlclip/Image(5).png

free..当前已经分配的页面,完全没有被使用

length:1  有1个区

f:first  free列表中的第一个空闲区的情况

f_page:0 需要在第0个页面去查找此区的情况

f_offset:7038 在这个页面的偏移量

l:last  free列表中的最后一个空闲区的情况

l_page:0

l_offset :7308...  类似

第一个页面是属于fsp_header

file:///C:/Users/LENOVO/AppData/Local/Temp/enhtmlclip/Image(6).png

file:///C:/Users/LENOVO/AppData/Local/Temp/enhtmlclip/Image(7).png

上面的第0个页面偏移量为7308对应的xdes的xdes entry 172

{(0,150),(1,190).....(255,10350)},list node for xdes list是从每个xdex entry的第8个字节开始算起。

172*64=110008   11008页面正好是第一个空闲页面(属于第173个区)

同理可以算出

free_frag :xdes entry 165  165*64=10560  ---??这个区确实有空闲的页面,但是不明白干什么用的。

接着查看下free_frag的使用情况如下:

[root@Mysql2 test]#  innodb_space -f  bk_user_action_log_1#P#p3.ibd -L free_frag space-list-iterate

start_page  page_used_bitmap

10560       #######.........................................................

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

full_frag:  xdes entry (0,1) 分别表示第1个区和第2个区

free_nodes :

f_page:2

f_offset:38

file:///C:/Users/LENOVO/AppData/Local/Temp/enhtmlclip/Image(8).png

f_page:2表示第三个页面,正好是file sgement inode page,偏移量为38,就是list node for inode page list的偏移量

而且这个数据结构占用了12个字节,如下所示,所以是代表下一个和上一个innod page的位置。

file:///C:/Users/LENOVO/AppData/Local/Temp/enhtmlclip/Image(9).png

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

(4)、接下来看当前的段情况,当前的存在的索引情况如下:

file:///C:/Users/LENOVO/AppData/Local/Temp/enhtmlclip/Image(10).png

有三个索引,因为每个索引都包括叶子节点和非叶子节点,叶子节点占用一个inode entry,而非叶子节点也占用一个inode entry,所以三个索引共使用了6个inode entry,这些innod 都在file sgement inode page中分配,此环境中是在第三个页面(page 0)中分配。

[root@Mysql2 test]#  innodb_space -f  bk_user_action_log_1#P#p3.ibd space-indexes

file:///C:/Users/LENOVO/AppData/Local/Temp/enhtmlclip/Image(11).png

查看某个索引的非叶子节点的页面情况:

因为page 3是根节点所以首先查看是否有完全为分配的页面

[root@Mysql2 test]#  innodb_space   -f  bk_user_action_log_1#P#p3.ibd -p 3  index-fseg-internal-lists

file:///C:/Users/LENOVO/AppData/Local/Temp/enhtmlclip/Image(12).png

都为0 说明非叶子节点的页面都是属于已经有记录,而且都有空闲空间的情况:

[root@Mysql2 test]#  innodb_space   -f  bk_user_action_log_1#P#p3.ibd -p 3 index-fseg-internal-frag-pages

file:///C:/Users/LENOVO/AppData/Local/Temp/enhtmlclip/Image(13).png

说明此索引一共有7个非叶子节点,其中6个非分支节点(level  1),一个为跟节点(level 2)

同理可以查看其他的两个索引的的情况。

(5)、现在可以看真正数据存放的地方了,也就是叶子节点的使用情况:

[root@Mysql2 test]#  innodb_space   -f  bk_user_action_log_1#P#p3.ibd -p 3 index-fseg-leaf-frag-pages

file:///C:/Users/LENOVO/AppData/Local/Temp/enhtmlclip/Image(14).png

这些页面是还未满的页面。

接着我们看已经被插满数据的页面情况:

[root@Mysql2 test]#  innodb_space   -f  bk_user_action_log_1#P#p3.ibd   -p 3 index-fseg-leaf-lists

file:///C:/Users/LENOVO/AppData/Local/Temp/enhtmlclip/Image(15).png

78个区被插满数据,一个区是not_full,分别查看这两种情况:

a、[root@Mysql2 test]#  innodb_space   -f  bk_user_action_log_1#P#p3.ibd     -p 3 -L full index-fseg-leaf-list-iterate

file:///C:/Users/LENOVO/AppData/Local/Temp/enhtmlclip/Image(16).png

...

...

file:///C:/Users/LENOVO/AppData/Local/Temp/enhtmlclip/Image(17).png

b、查看not_full的区间的情况:

[root@Mysql2 test]# innodb_space   -f  bk_user_action_log_1#P#p3.ibd -p 3  -L not_full index-fseg-leaf-list-iterate

file:///C:/Users/LENOVO/AppData/Local/Temp/enhtmlclip/Image(18).png

那么表中一共有90w条数据:

目前的叶子节点的使用情况是:

1、full extent:78个区,78*64=4992页面

2、not_full: 1个区      33个页面(10800--10912)

3、free_frag:33个page(innodb_space   -f  bk_user_action_log_1#P#p3.ibd -p 3 index-fseg-leaf-frag-pages|wc -l)

1、对于满的区来说没个页面都是178条数据(innodb_space   -f  bk_user_action_log_1#P#p3.ibd   -p 10752   page-dump|grep format|wc -l)

所以一共有数据是178*4992=888576

2、33个页面中从10800--10911数据是插满的,而最后一个页面(10912)的数据为121:

[root@Mysql2 test]# innodb_space   -f  bk_user_action_log_1#P#p3.ibd   -p 10912   page-dump|grep format|wc -l

122

所以一共有数据32*178+121=5817

3、33个page的情况可以从(5)看出来:31*178+89=5607

全部的数据为:888576+5817+5607=900000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值