天天看點

MySQL InnoDB 行記錄存儲結構分析

作者:馬士兵教育CTO
MySQL InnoDB 行記錄存儲結構分析

??????

?????????????????????????????????MySQL???InnoDB???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

????????????????????????

Mysql?????????????????????Innodb????????????????????????????????????windows?????????Mysql??????data?????????????????????????????????????????????linux?????????/var/lib/mysql????????????

???????????????????????????????????????data????????????????????????????????????????????????????????????opt???frm???ibd???????????????

  • db.opt????????????????????????????????????????????????????????????????????????
  • demo1.frm ???t_order ????????????????????????????????????
  • demo1.ibd???t_order ???????????????????????????????????????????????????????????????????????????????????????????????????ibdata1??????data?????????????????????????????????????????????????????????????????????????????????.ibd???
MySQL InnoDB 行記錄存儲結構分析

????????????????????????

????????????????????????????????????????????????????????????????????????

MySQL InnoDB 行記錄存儲結構分析

???

InnoDB????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????B+???????????????????????????????????????B+????????????????????????????????????????????????????????????

????????????InnoDB ??? B+ ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

???

????????????B+??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????I/O ??????????????????

????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????I/O???

?????????????????????????????????64???????????????InnoDB ???????????????????????? 16KB?????????????????????????????? 64*16KB= 1MB????????????????????????????????????????????????????????????????????????????????????I/O???????????????????????????

??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

???

Innodb???????????????????????????????????????????????????????????????InnoDB ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

  1. InnoDB ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
  2. ??????????????????????????? 16KB??????????????????????????? 16KB ????????????????????????
  3. ?????? InnoDB ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? 16K ????????????????????????

???

MySQL??????????????? row??????????????????????????????????????????????????? COMPACT???????????????????????????????????????????????????????????????????????????????????????????????????

InnoDB ???????????????

????????????????????????????????????????????????????????????????????????

InnoDB ????????????????????? 4 ???????????????????????? Redundant???Compact???Dynamic??? Compressed ???????????????????????????????????????????????????????????????????????????

Redundant ??????????????????????????? MySQL 5.0 ??????????????????????????????????????????????????????????????????????????????????????????

Compact ????????????MySQL 5.0 ??????????????????MySQL5.1???????????????????????????Compact??????????????????????????????????????????????????????????????????????????????????????????????????????????????????

Dynamic ??? Compressed ???????????????????????? Compact ?????????????????? ????????????????????????Compact?????? ???MySQL5.7 ??????????????????????????? Dynamic ????????????

Compact ???????????????

?????????????????????Compact???Dynamic ??? Compressed????????????????????????Compact??????????????????????????????????????????Compact???????????????????????????????????????

MySQL InnoDB 行記錄存儲結構分析

???????????????????????????Compact????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

?????????????????????

??????????????????????????????????????????????????????????????????????????????NULL???????????????????????????

?????????????????????????????????????????????????????????????????????????????????????????? Compact???????????????????????????????????????????????????????????????

sql????????????CREATE TABLE `demo1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `col1` varchar(45) COLLATE utf8_bin DEFAULT NULL,
  `col2` varchar(45) COLLATE utf8_bin DEFAULT NULL,
  `col3` int(11) DEFAULT NULL,
  `col4` char(5) COLLATE utf8_bin DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=ascii ROW_FORMAT=COMPACT;
           

????????????????????????demo1?????????????????????????????????ascii?????????????????????????????????1???????????????????????????

MySQL InnoDB 行記錄存儲結構分析

1????????????????????????

??????VARCHAR???TEXT???BLOB????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????COMPACT????????????????????????????????????????????????????????????????????????????????????????????????

?????????????????????????????????????????????????????????????????????????????????????????????

???demo1???????????????????????????????????????????????????????????????????????????????????? id???col3(int)???col(char)??????????????????????????????

  1. clo1?????????varchar ?????????zs????????????????????????????????????????????? 0x02???
  2. clo2?????????varchar ?????????lsa????????????????????????????????????????????? 0x03???

????????????????????????????????????????????????????????????????????????

MySQL InnoDB 行記錄存儲結構分析
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? CPU Cache Line ??????????????????????????? CPU Cache ????????????

2???NULL?????????

  1. ??????????????????null?????????????????????null?????????
  2. null??????????????????bit?????????????????????????????????????????????????????????bit????????????????????????
  3. ????????????null???bit??????1????????????0
  4. null ????????????????????????????????????????????????1??????8?????????????????????????????????????????????????????????????????????????????????????????? 0

???????????????null???????????????????????????1????????????????????????????????????9?????????????????????null?????????null?????????????????????????????????????????????????????????

?????????????????????????????????????????????????????????null???????????????null??????null???????????????????????????????????????????????????demo1???????????????????????????id??????????????????null?????????????????????????????????null???????????????8??????????????????????????????null??????????????????

??????????????????

MySQL InnoDB 行記錄存儲結構分析

??????????????????

MySQL InnoDB 行記錄存儲結構分析

??????????????????

MySQL InnoDB 行記錄存儲結構分析

3??????????????????

??????????????????????????????????????????????????????????????????????????????????????????????????????

MySQL InnoDB 行記錄存儲結構分析
  • delete_flag ??????????????? 0????????????1???????????????????????? detele ????????????????????????????????????????????????????????????????????????????????? delete_flag ????????? 1??? (???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????)
  • next_record?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
  • record_type?????????????????????????????????0????????????????????????1?????????B+???????????????????????????2?????????????????????(Infimum)???3?????????????????????(Supremum)

?????????????????????

????????????????????? row_id???trx_id???roll_ptr ??????????????????????????????????????????????????????Mysql???MVCC?????????????????????????????????

MySQL InnoDB 行記錄存儲結構分析
  • row_id????????????????????????????????????????????????????????????????????? row_id ????????????????????????????????????????????????????????????????????????InnoDB ????????????????????? row_id ???????????????row_id???????????????????????? 6 ????????????
  • trx_id???????????????????????????/???????????????????????????????????? ID??? trx_id????????????????????? 6 ????????????
  • roll_ptr???????????????????????????????????????????????????????????????roll_ptr ????????????????????? 7 ????????????

????????????????????????????????????????????????????????????????????????

??????

????????????????????????InnoDB???????????????????????????????????????????????????????????????????????????????????????

1????????????????????? TEXT???BLOBs ?????????????????????????????? 65535 ??????????????????????????????????????????

2?????????????????????????????????????????????16kb???16384??????????????????65535 ?????????

3?????????????????????????????????????????????not null???

?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

繼續閱讀