mysql 使用InnoDB 引擎时候的存储文件系统初探
2017-09-13 14:29
736 查看
新建立一个数据库时候
在mysql Server所在地址下的data目录下:
建立了ibdata1,用来记录InnoDb系统信息和数据库表数据和索引,为所有的表锁公用。
日志文件: ib_logfile1、ib_logfile2
mySql在其工作目录的data文件夹下:
建立一个新的名字为dbName的文件夹,并在里面创建了一个文件,db.opt, 文件的内容是数据库的定义信息
在这个数据库中建立一张表,表名为user1.
在dbName文件夹下增加了两个文件,user1.frm和user1.ibd;
然后通过插入数据来观察三个文件的大小变化:ibdata1,user1.frm和user1.ibd;
插入1条数据:
146,800,640 字节
8,614 字节
98,304 字节
插入四条数据:
146,800,640 字节
8,614 字节
98,304 字节
插入几千条数据:
146,800,640 字节
8,614 字节
360,448 字节
我发现,360,448 - 98,304 = 1024*256 , 猜测user1.ibd这个东西是按照1KB定长来扩展的。
创建一个新的表
data文件下的ibdata1的大小不变为了146,800,640字节。
同时,在dbName文件夹下增加了两个文件,
user2.frm和user2.ibd;其初始大小分别为9kb(8,614 字节)和96kb(98,304 字节),与上面相同。
关于删除操作
删除前:146,800,6
9e99
40 字节,8,614 字节,180,224 字节
使用delete语句删除一千条数据在user2中。
发现,user2.ibd不减反增加为(192K)196,608字节。
在user3表中,使用Delete语句不加where条件。
发现,user3.ibd不减反增加为(192K)196,608字节。
在user4中使用truncate,
观察到,user4.ibd的大小回到的建表后插入数据之前的大小,98,304 字节。
在user5中使用drop操作,
user5.frm和user5.ibd都消失了。
在mysql Server所在地址下的data目录下:
建立了ibdata1,用来记录InnoDb系统信息和数据库表数据和索引,为所有的表锁公用。
日志文件: ib_logfile1、ib_logfile2
mySql在其工作目录的data文件夹下:
建立一个新的名字为dbName的文件夹,并在里面创建了一个文件,db.opt, 文件的内容是数据库的定义信息
default-character-set=utf8 default-collation=utf8_general_ci
在这个数据库中建立一张表,表名为user1.
CREATE TABLE `user` ( `id` int(11) NOT NULL, `name` varchar(255) NOT NULL, `age` int(11) DEFAULT NULL, `money` double NOT NULL, `gender` tinyint(4) DEFAULT NULL, `varc` varchar(32) NOT NULL, `c32` char(32) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
在dbName文件夹下增加了两个文件,user1.frm和user1.ibd;
然后通过插入数据来观察三个文件的大小变化:ibdata1,user1.frm和user1.ibd;
INSERT INTO user1 (name,age) VALUES ('name1',5);
插入1条数据:
146,800,640 字节
8,614 字节
98,304 字节
插入四条数据:
146,800,640 字节
8,614 字节
98,304 字节
插入几千条数据:
146,800,640 字节
8,614 字节
360,448 字节
我发现,360,448 - 98,304 = 1024*256 , 猜测user1.ibd这个东西是按照1KB定长来扩展的。
创建一个新的表
CREATE TABLE `user2` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=7047 DEFAULT CHARSET=utf8;
data文件下的ibdata1的大小不变为了146,800,640字节。
同时,在dbName文件夹下增加了两个文件,
user2.frm和user2.ibd;其初始大小分别为9kb(8,614 字节)和96kb(98,304 字节),与上面相同。
关于删除操作
删除前:146,800,6
9e99
40 字节,8,614 字节,180,224 字节
使用delete语句删除一千条数据在user2中。
DELETE FROM user2 where id BETWEEN 7000 and 7000+1000;
发现,user2.ibd不减反增加为(192K)196,608字节。
在user3表中,使用Delete语句不加where条件。
DELETE FROM user3 ; 受影响的行: 2286 时间: 0.082s
发现,user3.ibd不减反增加为(192K)196,608字节。
在user4中使用truncate,
TRUNCATE TABLE user4;
观察到,user4.ibd的大小回到的建表后插入数据之前的大小,98,304 字节。
在user5中使用drop操作,
DROP TABLE user5;
user5.frm和user5.ibd都消失了。
相关文章推荐
- mysql dba系统学习(21)mysql存储引擎InnoDB
- mysql innodb引擎 长时间使用后,数据文件远大于实际数据量,导致空间不足。
- MySQL中InnoDB存储引擎的锁的基本使用教程
- MySQL · 引擎特性 · InnoDB文件系统管理(二)
- mysql不能使用innodb存储引擎
- MySQL ・ 引擎特性 ・ InnoDB 文件系统之文件物理结构
- MySQL中InnoDB存储引擎的锁的基本使用教程
- mysql 存储引擎 innodb 学习复习 之 文件
- innodb存储引擎之二进制日志文件ROW和STATEMENT格式以及重做日志文件分析与系统恢复详解(未完待续)
- mysql中innodb、mysaim存储引擎的区别及explain的使用
- MySQL · 引擎特性 · InnoDB文件系统管理(一)
- mysql dba系统学习(21)mysql存储引擎InnoDB
- 对比比较MySql innodb 和 MyIsam 两种存储引擎的文件存储结构
- 【MySQL】InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据
- MySQL · 引擎特性 · InnoDB 文件系统之文件物理结构
- mysql存储引擎:InnoDB和MyISAM的差别/优劣评价/评测/性能测试
- MySQL存储引擎及InnoDB并发控制介绍
- MYSQL的常用存储引擎MyISAM和InnoDB的区别
- mysql数据据存储引擎InnoDB和MyISAM的优势及区别
- InnoDB存储引擎 --mysql的存储引擎