时间:2021-07-01 10:21:17 帮助过:14人阅读
3.详细描述commit命令发出后,binlog日志从内存写到磁盘的过程序?
一个extent区是1M
问题:linux下查看一个ibd文件,大小是96K,也就是6个页,那么32个页不是一次性给完而是用多少给多少?
-rw-rw----. 1 mysql mysql 8.6K Feb 12 08:38 t3.frm -rw-rw----. 1 mysql mysql 96K Feb 12 08:38 t3.ibd
32个page是524288字节,差不多是512KB,插入数据使文件达到500多kb时,下一次增长为1M的整数倍
+------+------------+------------+-------+--------+-------+ | id | name1 | name2 | name3 | name4 | name5 | +------+------------+------------+-------+--------+-------+ | 1 | A | BB | CCC | DDDD | NULL | | 1 | aaaaaaaaaa | bbbbbbbbbb | ccccc | | NULL | | 4 | aaaaaaaaaa | bbbbbbbbbb | ccccc | dddddd | e | | 4 | aaaaaaaaaa | bbbbbbbbbb | NULL | dddddd | e | +------+------------+------------+-------+--------+-------+ create table t3 (id int,name1 varchar(10),name2 varchar(10),name3 varchar(10),name4 varchar(10),name5 varchar(10)); insert into t3 (id,name1,name2,name3,name4) values(1,‘A‘,‘BB‘,‘CCC‘,‘DDDD‘); insert into t3 (id,name1,name2,name3,name4) values(1,‘aaaaaaaaaa‘,‘bbbbbbbbbb‘,‘ccccc‘,‘‘); insert into t3 (id,name1,name2,name3,name4,name5) values(4,‘aaaaaaaaaa‘,‘bbbbbbbbbb‘,‘ccccc‘,‘dddddd‘,‘e‘); insert into t3 (id,name1,name2,name4,name5) values(4,‘aaaaaaaaaa‘,‘bbbbbbbbbb‘,‘dddddd‘,‘e‘);
问题:NULL如何标志哪些列是NULL的?
《MySQL技术内幕InnoDB存储引擎》106页及网上大部分都是提了一下,参考http://blog.csdn.net/linux_ever/article/details/64124868
第三行有NULL值,因为NULL标志位不再是00而是06,转换成二进制00000110,为1的值表示第2列和第3列的数据为NULL。其后存储列数据的部分,没有存储NULL列,而只存储了第1列和第4列的非NULL的值
*************************** 3. row ***************************
t1: d
t2: NULL
t3: NULL
t4: fff
3 rows in set (0.00 sec)
这里的第2和第3列为NULL,NULL标志位为06,二进制是00000110,是怎么算出来2、3列的?
本次作业的第1、2行数据第5列为NULL,标志位是20,二进制是00100000
第4行数据第4列为NULL,标志位是08,二进制是00001000
int长度是4字节,其他可变长name长度是10字节,用多少长多少
https://www.cnblogs.com/wade-luffy/p/6289183.html
http://blog.csdn.net/beiigang/article/details/42175995
内容 | 16进制地址 |
---|---|
File Space Header | 0x0008 |
Insert Buffer Bitmap | 0x0005 |
File Segment Inode | 0x0003 |
Used Page | 0x45BF |
…… | 第N-4个块 |
Used Page | 第N-3个块 |
Free Page | 第N-2个块 |
…… | 第N-2个块 |
Free Page | 第N-2个块 |
https://dev.mysql.com/doc/internals/en/innodb-page-overview.html
https://www.cnblogs.com/crossapply/p/5455620.html
hexdump -C -v t3.ibd > /tmp/t3.ibd.txt [root@docker01 tmp]# cat t3.ibd.txt |head -n 2 00000000 24 0a 12 cf 00 00 00 00 00 00 00 00 00 00 00 00 |$...............| 00000010 00 00 00 00 00 1a 25 e3 00 08 00 00 00 00 00 00 |......%.........| [root@docker01 tmp]# cat t3.ibd.txt |head -n 2048| tail -n 1024 |head -n 2 00004000 99 5f 47 61 00 00 00 01 00 00 00 00 00 00 00 00 |._Ga............| 00004010 00 00 00 00 00 1a 16 27 00 05 00 00 00 00 00 00 |.......‘........| [root@docker01 tmp]# cat t3.ibd.txt |head -n 3072| tail -n 1024 |head -n 2 00008000 c2 25 6e 67 00 00 00 02 00 00 00 00 00 00 00 00 |.%ng............| 00008010 00 00 00 00 00 1a 25 e3 00 03 00 00 00 00 00 00 |......%.........| [root@docker01 tmp]# cat t3.ibd.txt |head -n 4096| tail -n 1024 |head -n 2 0000c000 48 81 1b 2c 00 00 00 03 ff ff ff ff ff ff ff ff |H..,............| 0000c010 00 00 00 00 00 1a 3e 2e 45 bf 00 00 00 00 00 00 |......>.E.......| 截取第4页 0000c000 48 81 1b 2c 00 00 00 03 ff ff ff ff ff ff ff ff |H..,............| 0000c010 00 00 00 00 00 1a 3e 2e 45 bf 00 00 00 00 00 00 |......>.E.......| 0000c020 00 00 00 00 00 0d 00 02 01 5b 80 06 00 00 00 00 |.........[......| 0000c030 01 29 00 02 00 03 00 04 00 00 00 00 00 00 00 00 |.)..............| 0000c040 00 00 00 00 00 00 00 00 00 1b 00 00 00 0d 00 00 |................| 0000c050 00 02 00 f2 00 00 00 0d 00 00 00 02 00 32 01 00 |.............2..| 0000c060 02 00 1f 69 6e 66 69 6d 75 6d 00 05 00 0b 00 00 |...infimum......| 0000c070 73 75 70 72 65 6d 75 6d 04 03 02 01 20 00 00 10 |supremum.... ...| 0000c080 00 2b 00 00 00 00 03 10 00 00 00 00 0b 52 b7 00 |.+...........R..| 0000c090 00 01 6b 01 10 80 00 00 01 41 42 42 43 43 43 44 |..k......ABBCCCD| 0000c0a0 44 44 44 00 05 0a 0a 20 00 00 18 00 3b 00 00 00 |DDD.... ....;...| 0000c0b0 00 03 11 00 00 00 00 0b 52 b7 00 00 01 6b 01 1e |........R....k..| 0000c0c0 80 00 00 01 61 61 61 61 61 61 61 61 61 61 62 62 |....aaaaaaaaaabb| 0000c0d0 62 62 62 62 62 62 62 62 63 63 63 63 63 01 06 05 |bbbbbbbbccccc...| 0000c0e0 0a 0a 00 00 00 20 00 41 00 00 00 00 03 12 00 00 |..... .A........| 0000c0f0 00 00 0b 52 b7 00 00 01 6b 01 2c 80 00 00 04 61 |...R....k.,....a| 0000c100 61 61 61 61 61 61 61 61 61 62 62 62 62 62 62 62 |aaaaaaaaabbbbbbb| 0000c110 62 62 62 63 63 63 63 63 64 64 64 64 64 64 65 01 |bbbcccccdddddde.| 0000c120 06 0a 0a 08 00 00 28 ff 47 00 00 00 00 03 13 00 |......(.G.......| 0000c130 00 00 00 0b 52 b7 00 00 01 6b 01 3a 80 00 00 04 |....R....k.:....| 0000c140 61 61 61 61 61 61 61 61 61 61 62 62 62 62 62 62 |aaaaaaaaaabbbbbb| 0000c150 62 62 62 62 64 64 64 64 64 64 65 00 00 00 00 00 |bbbbdddddde.....| ..... 0000fff0 00 00 00 00 00 70 00 63 8b 8a 26 91 00 1a 3e 2e |.....p.c..&...>.|hexdump
此时发生宕机,日志丢失,脏块丢失
此时宕机,依然丢失数据
sync_binlog 1 多少次事务一起写binlog
innodb_flush_log_at_trx_commit 1 写redolog
索引:
index organized table索引组织表:数据就在叶子节点上,检索数据不需要回行
回行,先找到索引所在位置,根据索引再一次找到数据 二级索引、辅助索引,叶子节点只存储索引信息,叶子上带着的信息指向数据所在的主键索引的位置
innodb逻辑存储结构: tablespace - segement - extent - page - row
表空间是否独立 innodb_file_per_table,默认为ON
如果是独立表空间,一张表一个表空间
如果是off,就全部放在ibdata1里面了
查看表ID ,0 代表的是系统表空间 select * from innodb_sys_tables
tablespace指的是共享表空间ibdata1,存储的是undo、插入缓冲索引页、系统事务、double write buffer,因为写undo原因,大小随时变化
ib_logfile,每个表自己的空间:数据(跟主键索引一起存放)、辅助索引、插入缓存bitmap
插入缓冲
segement 段
extent 区
page 页,类似存储块大小
innodb文件结构
表的组成:
hexdump -C -v tabname.ibd 一个page 16K,16进制一行有16个字节,那么一个page就有1024行 查看第一个块
hexdump -C -v tabname.ibd |head -n 1024 | head -n 2
2块
hexdump -C -v tabname.ibd |head -n 2048 |tail -n 1024
3块
hexdump -C -v tabname.ibd |head -n 3072 |tail -n 1024
mysql小白系列_04 datablock
标签:/tmp -o ddd 表数 0.11 事务 docker0 where 插入数据