MySQL InnoDB存储结构
来源:互联网 发布:linux文件权限 编辑:程序博客网 时间:2024/05/17 09:02
1.表空间结构图:
表空间:INNODB 所有数据都存在表空间当中(共享表空间),要是开启innodb_file_per_table,则每张表的数据会存到单独的一个表空间内(独享表空间)。
独享表空间包括:数据,索引,插入缓存,数据字典。共享表空间包括:Undo信息(不会回收<物理空间上>),双写缓存信息,事务信息等。
段(segment):组成表空间,有区组成。
区(extent):有64个连续的页组成。每个页16K,总共1M。对于大的数据段,每次最后可申请4个区。
页(page):是INNODB磁盘管理的单位,有行组成。
行(row):包括事务ID,回滚指针,列信息等。
2.存储方式一:共享表空间存储方式
Innodb的所有数据保存在一个单独的表空间里面,而这个表空间可以由很多个文件组成。从Innodb的官方文档中可以看到,其表空间的最大限制为64TB,也就是说,Innodb的单表限制基本上也在64TB左右了,当然这个大小是包括这个表的所有索引等其他相关数据。
优点:表空间可以分成多个文件存放到各个磁盘,所以表也就可以分成多个文件存放在磁盘上,表的大小不受磁盘大小的限制。数据和文件放在一起方便管理。
缺点:所有的数据和索引存放到一个文件,虽然可以把一个大文件分成多个小文件,但是多个表及索引在表空间中混合存储,当数据量非常大的时候,表做了大量删除操作后表空间中将会有大量的空隙,特别是对于统计分析,对于经常删除操作的这类应用最不适合用共享表空间。共享表空间分配后不能回缩:当出现临时建索引或是创建一个临时表的操作表空间扩大后,就是删除相关的表也没办法回缩那部分空间了(可以理解为oracle的表空间10G,但是才使用10M,但是操作系统显示mysql的表空间为10G),进行数据库的冷备很慢;
3.存储方式二:单独表空间存储方式
每个表的数据以一个单独的文件来存放,这个时候的单表限制,又变成文件系统的大小限制了
优点:
每个表都有自已独立的表空间,每个表的数据和索引都会存在自已的表空间中,可以实现单表在不同的数据库中移动。
空间可以回收(除drop table操作处,表空不能自已回收)
Drop table操作自动回收表空间,如果对于统计分析或是日值表,删除大量数据后可以通过:alter table TableName engine=innodb;回缩不用的空间。
对于使innodb-plugin的Innodb使用turncate table也会使空间收缩。
对于使用独立表空间的表,不管怎么删除,表空间的碎片不会太严重的影响性能,而且还有机会处理。
缺点:
单表增加过大,当单表占用空间过大时,存储空间不足,只能从操作系统层面思考解决方法;
4.相互转换
innodb_file_per_table 通过这个参数来实现的转化,如果为OFF说明所使用的是独占表空间【默认情况下,所使用的表空间为共享表空间】
innodb_file_per_table值来进行修改即可,但是对于之前使用过的共享表空间则不会影响,除非手动的去进行修改或者是
innodb_file_per_table=1 为使用独占表空间
innodb_file_per_table=0 为使用共享表空间
修改独占空表空间的数据存储位置
innodb_data_home_dir = "C:\mysql\data\"
innodb_log_group_home_dir = "C:\mysql\data\"
innodb_data_file_path=ibdata1:10M:autoextend
innodb_file_per_table=1
参数说明:
这个设置配置一个可扩展大小的尺寸为10MB的单独文件,名为ibdata1。没有给出文件的位置,所以默认的是在MySQL的数据目录内。【对数据来进行初始化的设置】
innodb_data_home_dir 代表为数据库文件所存放的目录
innodb_log_group_home_dir 为日志存放目录
innodb_file_per_table 是否使用共享以及独占表空间来
以上的几个参数必须在一起加入。
对于参数一些注意的地方
InnoDB不创建目录,所以在启动服务器之前请确认”所配置的路径目录”的确存在。这对你配置的任何日志文件目录来说也是真实的。使用Unix或DOS的mkdir命令来创建任何必需的目录。
通过把innodb_data_home_dir的值原原本本地部署到数据文件名,并在需要的地方添加斜杠或反斜杠,InnoDB为每个数据文件形成目录路径。
如果innodb_data_home_dir选项根本没有在my.cnf中提到,默认值是“dot”目录 ./,这意思是MySQL数据目录。
所以在做数据的移植以及备份时,一定要注意数据文件的完整性.
- MySQL InnoDB存储结构
- [MySQL] InnoDB逻辑存储结构
- [MySQL]InnoDB逻辑存储结构
- MySQL InnoDB 逻辑存储结构
- MySQL存储结构MyISAM和InnoDB
- MySQL InnoDB的存储结构总结
- MySQL InnoDB的存储结构总结
- MySQL InnoDB的存储结构总结
- MySQL InnoDB的存储结构总结
- MySQL InnoDB的存储结构总结
- InnoDB 基本存储结构
- 基于InnoDB存储引擎的mysql数据库表结构详解
- 基于InnoDB存储引擎的mysql数据库表结构详解
- MySQL的MyISAM和InnoDB存储引擎表结构
- MySQL InnoDB引擎的索引和存储结构
- MySQL InnoDB存储引擎
- MySQL存储引擎--InnoDB
- MySQL InnoDB存储引擎
- linux目录结构
- Gym 101158C Distribution Center(思路题)
- 分布式环境下限流方案的实现redis RateLimiter Guava,Token Bucket, Leaky Bucket
- 深入理解Java多态机制
- Android内存优化
- MySQL InnoDB存储结构
- 凸包(判多边形的凹凸性)
- 【知了堂学习笔记】Java中static关键字的一些简单使用方法
- Java操作Json
- iOS 后台返回json解析出现的null的解决办法
- Android轻量级框架XSnow
- shell基础:脚本执行方式
- 夜灵的Html笔记Day04——CSS3basic
- Java设计模式之代理模式