设为首页 收藏本站
查看: 325|回复: 0

[经验分享] 浅析分析mysql表空间

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-9-18 09:15:09 | 显示全部楼层 |阅读模式
1.1.   分析表空间
[iyunv@gflinuxpy_innodb_page_info]# ./py_innodb_page_info.py -v  
/opt/mysql/mysql/test/mytest.ibd
pageoffset 00000000, page type <File Space Header>
pageoffset 00000001, page type <Insert Buffer Bitmap>
pageoffset 00000002, page type <File Segment inode>
pageoffset 00000003, page type <B-tree Node>, page level <0000>
pageoffset 00000000, page type <Freshly Allocated Page>
pageoffset 00000000, page type <Freshly Allocated Page>
Totalnumber of page: 6:
FreshlyAllocated Page: 2
InsertBuffer Bitmap: 1
FileSpace Header: 1
B-treeNode: 1
FileSegment inode: 1
[iyunv@gflinuxpy_innodb_page_info]#

mysql>show table status like 'mytest'G;
***************************1. row ***************************
           Name: mytest
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 3
Avg_row_length: 5461
    Data_length: 16384
Max_data_length:0
   Index_length: 0
      Data_free: 0
Auto_increment: NULL
    Create_time: 2014-08-05 16:31:06
    Update_time: NULL
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
Create_options: row_format=COMPACT
        Comment:
1 row inset (0.00 sec)
1.1.1.      compact行记录格式
  
变长字段长度列表
  

NULL标志位


记录头信息


列1


列2


...


事务id


回滚指针


Rowid


列的顺序逆序占1字节,最大2字节(>255)


1表示行有null;0表示无


占用5字节,40位





6字节


7字节


6字节


         null   除了占用null标识位,不占用任何空间。
         每行数据除了用户定义的列外,还有两个隐藏列,事务id列和回滚指针列;如果表没有定义主键,每行还会增加一个6字节的rowid列。

mysql>desc mytest;
+-------+-------------+------+-----+---------+-------+
| Field |Type        | Null | Key | Default |Extra |
+-------+-------------+------+-----+---------+-------+
| t1    | varchar(10) | YES  |     |NULL    |       |
| t2    | varchar(10) | YES  |     |NULL    |       |
| t3    | char(10)    | YES |     | NULL    |      |
| t4    | varchar(10) | YES  |     |NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows inset (0.01 sec)

mysql>select * from mytest;
+------+------+------+------+
| t1   | t2  | t3   | t4   |
+------+------+------+------+
| a    | bb  | bb   | ccc  |
| d    | ee  | ee   | fff  |
| d    | NULL | NULL | fff  |
+------+------+------+------+
3 rows inset (0.00 sec)
         打开表空间文件方式:
[iyunv@gflinuxpy_innodb_page_info]# ./py_innodb_page_info.py -C -v  
/opt/mysql/mysql/test/mytest.ibd> mytest.txt

0000c070  73 75 70 72 65 6d 75 6d  03 02 01 00 00 00 10 00  |supremum........|
0000c080  2c 00 00 00 3e 75 00 00 00 00 83 ba 6b e3 00 00 |,...>u......k...|
0000c090  03 ca 01 10 61 62 62 62  62 20 20 20 20 2020 20  |....abbbb       |
0000c0a0  20 63 63 6303 02 01 00  00 00 18 00 2b 00 00 00  | ccc........+...|
0000c0b0  3e 75 01 00 00 00 83 ba  6c e4 00 00 03 44 01 10  |>u......l....D..|
0000c0c0  64 65 65 65 65 20 20 20  20 20 20 20 20 66 66 66  |deeee       fff|
0000c0d0  03 01 06 00 00 20 ff 98  00 00 00 3e 75 02 00 00  |..... .....>u...|
0000c0e0  00 83 ba 6d e5 00 00 04  24 01 10 64 66 66 66 00  |...m....$..dfff.|

03 02 01/*变长字段长度列表,逆序*/
00/*null标识位,第一行没有null值*/
00 00 10 00 2c/*固定五字节长度*/
00 00 00 3e 75 00/*rowid自动创建,6字节*/
00  00 00 83 ba 6b/*事务id,6字节*/
e3 00 00 03 ca 01 10/*回滚指针,7字节*/
61/*列1数据a*/
62 62/*列2数据bb*/
62 62 20 20 20 20 20 20 20 20/*列3数据bb*/
63 63 63/*列4数据ccc*/
1.1.2.      redundant行记录格式
         redundant是mysql5.0之前innodb行记录存储方式。
  
变长字段偏移列表
  

NULL标志位


记录头信息


列1


列2


...


事务id


回滚指针


Rowid


列的顺序逆序占1字节,最大2字节(>255)


1表示行有null;0表示无


占用6字节,48位





6字节


7字节


6字节


mysql>create table mytest2 engine=innodb row_format=redundant as select * frommytest;
Query OK,3 rows affected (0.04 sec)
Records:3  Duplicates: 0  Warnings: 0


mysql>show table status like 'mytest2'G;
***************************1. row ***************************
           Name: mytest2
         Engine: InnoDB
        Version: 10
     Row_format: Redundant
           Rows: 3
Avg_row_length: 5461
    Data_length: 16384
Max_data_length:0
   Index_length: 0
      Data_free: 0
Auto_increment: NULL
    Create_time: 2014-08-06 10:24:20
    Update_time: NULL
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
Create_options: row_format=REDUNDANT
        Comment:
1 row inset (0.00 sec)

mysql>
mysql>select * from mytest2;
+------+------+------+------+
| t1   | t2  | t3   | t4   |
+------+------+------+------+
| a    | bb  | bb   | ccc  |
| d    | ee  | ee   | fff  |
| d    | NULL | NULL | fff  |
+------+------+------+------+
3 rows inset (0.00 sec)
[iyunv@gflinux test]# hexdump -C -vmytest2.ibd > mytest2.txt
0000c070  08 03 00 00 73 75 70 72  65 6d 75 6d 00 23 20 16  |....supremum.# .|
0000c080  14 13 0c 06 00 00 10 0f  00 ba00 00 00 3e 75 03  |.............>u.|
0000c090  00 0000 83 ba 74 e800  00 03 9f 01 10 61 6262  |.....t.......abb|
0000c0a0  62 62 20 20 20 20 20 20 20 20 63 63 63 23 20 16 |bb        ccc# .|
0000c0b0  14 13 0c 06 00 00 18 0f  00 ea 00 00 00 3e 75 04  |.............>u.|
0000c0c0  00 00 00 83 ba 74 e8 00  00 03 9f 01 1f 64 65 65  |.....t.......dee|
0000c0d0  65 65 20 20 20 20 20 20  20 20 66 66 66 21 9e 94  |ee       fff!..|
0000c0e0  14 13 0c 06 00 00 20 0f  00 74 00 00 00 3e 75 05  |...... ..t...>u.|
0000c0f0  00 00 00 83 ba 74 e8 00  00 03 9f 01 2e 64 00 00  |.....t.......d..|
0000c100  00 00 00 00 00 00 00 00  66 66 66 00 00 00 00 00  |........fff.....|

23 20 16 1413 0c 06/*长度偏移表,逆序*/
00 00 100f  00 ba /*固定六字节长度*/
00 00 00 3e 75 00/*rowid自动创建,6字节*/
00 00 0083 ba 74/*事务id,6字节*/
e8 00  00 03 9f 01 10/*回滚指针,7字节*/
61/*列1数据a*/
62 62/*列2数据bb*/
62 62 20 20 20 20 20 20 20 20/*列3数据bb*/
63 63 63/*列4数据ccc*/

         对于redundant行记录格式,varchar类型的null值不占用任何空间,char类型的null占用空间。

mysql>show variables like '%sql_mode%';
+---------------+------------------------+
|Variable_name | Value                  |
+---------------+------------------------+
|sql_mode      | NO_ENGINE_SUBSTITUTION |
+---------------+------------------------+
1 row inset (0.00 sec)

#不设置该参数为严格模式,有些表可以建立,但是会抛出warnings,自动将varchar类型转#换为text类型。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-25008-1-1.html 上篇帖子: binlog日志增量备份 下篇帖子: 实时检查MySQL数据库延迟状况复制中断数据延迟 mysql 空间
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表