使用过MySQL的同学,刚开始接触最多的莫过于MyISAM表引擎了,这种引擎的数据库会分别创建三个文件:表结构、表索引、表数据空间。我们可以将某个数据库目录直接迁移到其他数据库也可以正常工作。然而当你使用InnoDB的时候,一切都变了。
InnoDB 默认会将所有的数据库InnoDB引擎的表数据存储在一个共享空间中:ibdata1,这样就感觉不爽,增删数据库的时候,ibdata1文件不会自动收缩,单个数据库的备份也将成为问题。通常只能将数据使用mysqldump 导出,然后再导入解决这个问题。
在MySQL的配置文件[mysqld]部分,增加innodb_file_per_table参数。
可以修改InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间。
独立表空间:
优点:
1. 每个表都有自已独立的表空间。
2. 每个表的数据和索引都会存在自已的表空间中。
3. 可以实现单表在不同的数据库中移动。
4. 空间可以回收(除drop table操作处,表空不能自已回收)
a) Drop table操作自动回收表空间,如果对于统计分析或是日值表,删除大量数据后可以通过:alter table TableName engine=innodb;回缩不用的空间。
b) 对于使innodb-plugin的Innodb使用turncate table也会使空间收缩。
c) 对于使用独立表空间的表,不管怎么删除,表空间的碎片不会太严重的影响性能,而且还有机会处理。
缺点:
单表增加过大,如超过100个G。
对于单表增长过大的问题,如果使用共享表空间可以把文件分开,但有同样有一个问题,如果访问的范围过大同样会访问多个文件,一样会比较慢。对于独立表空间也有一个解决办法是:使用分区表,也可以把那个大的表空间移动到别的空间上然后做一个连接。其实从性能上出发,当一个表超过100个G有可能响应也是较慢了,对于独立表空间还容易发现问题早做处理。
共享表空间:
优点:
可以放表空间分成多个文件存放到各个磁盘上(表空间文件大小不受表大小的限制,如一个表可以分布在不同步的文件上)。数据和文件放在一起方便管理。
所有的数据和索引存放到一个文件中以为着将有一个很常大的文件,虽然可以把一个大文件分成多个小文件,但是多个表及索引在表空间中混合存储,这样对于一个表做了大量删除操作后表空间中将会有大量的空隙,特别是对于统计分析,日值系统这类应用最不适合用共享表空间。
我们知道共享表空间管理会出现表空间分配后不能回缩的问题,当出现临时建索引或是创建一个临时表的操作表空间扩大后,就是删除相关的表也没办法回缩那部分空间了。我们存在磁盘监控时,也许就报警不断了,但实际上MySQL还可以运行良好。另外,当磁盘上占用较多时性能也不是太好。
这种情况处理只能是是建一个新的Slave从主库上Dump出来,然后在Dump到从库中,动作较大。
对于InnoDB Hot Backup备份的操作(或是直接冷备),每次需要CP的文件比较大。如果现在有180G的表空间,但实际数据只有50多G,那么我们将面对每次需要拷180G的数据。
这种方式也许mysqldump是一个好的处理方式了。
结论:
共享表空间在Insert操作上少有优势。其它都没独立表空间表现好。当启用独立表空间时,请合理调整一下:innodb_open_files 。
InnoDB Hot Backup(冷备)的表空间cp不会面对很多无用的copy了。而且利用innodb hot backup及表空间的管理命令可以实现单现移动。
1.innodb_file_per_table设置.开启方法:
在my.cnf中[mysqld]下设置
innodb_file_per_table=1
2.查看是否开启:
mysql> show variables like ‘%per_table%’;
3.关闭独享表空间
innodb_file_per_table=0关闭独立的表空间
mysql> show variables like ‘%per_table%’;
相关推荐
mysql InnoDB的存储管理也类似,但是mysql增加了一个共享表空间和独立表空间的概念; 一、概念 共享表空间: Innodb的所有数据保存在一个单独的表空间里面,而这个表空间可以由很多个文件组成,一个表可以...
共享表空间模式下,所有的InnoDB表数据和索引都存储在一个或多个文件中,而独立表空间模式则为每个InnoDB表创建单独的数据文件。 1. **共享表空间与独立表空间的区别** - **共享表空间**:所有InnoDB表的数据和...
- 通过查询 `innodb_file_per_table` 变量确认是否启用了独立表空间管理模式。 ```sql SHOW VARIABLES LIKE '%per%'; ``` - 结果显示 `innodb_file_per_table` 的值为 `ON`,表明启用了独立表空间管理模式。 5...
系统表空间共享所有InnoDB表,而独立表空间允许为每个表创建单独的物理文件,以更好地管理磁盘空间。 10. **内存限制** InnoDB使用缓冲池来缓存数据和索引,其大小由`innodb_buffer_pool_size`参数设置。过小会...
对于innodb的数据结构,首先要解决两个概念性的问题: 共享表空间以及独占表空间。什么是共享表空间和独占表空间共享表空间以及独占表空间都是针对数据的存储方式而言的。共享表空间: 某一个数据库的所有的表数据,...
MySQL的InnoDB存储引擎在处理表空间方面有两种模式:共享表空间和独立表空间。共享表空间模式下,所有InnoDB表的数据和索引都存储在一个或多个大文件(如ibdata1)中。而独立表空间模式,也称为文件-per-table模式,...
InnoDB使用表空间(Tablespaces)来存储数据,可以配置多个表空间,包括系统表空间(默认)和独立表空间。数据文件(.ibd)存储表的物理结构和数据,每个InnoDB表可以有自己的独立表空间文件。 六、页与B+树索引 ...
InnoDB的数据和索引存储在表空间中,可以使用共享表空间或独享表空间。独享表空间模式下,每个表都有独立的.idb文件存储数据和索引,而.frm文件则保存元数据。表空间的移动和恢复需谨慎操作,如使用`ALTER TABLE`...
3. **数据和索引存储**:InnoDB支持两种表空间模式:共享表空间和独立表空间。在共享表空间模式下,所有数据和索引都存放在ibdata1文件中,这简化了管理,但可能导致空间利用率不高。而在独立表空间模式下,每个表的...
- .ibd文件:InnoDB使用独立表空间存储每个表的数据和索引。 - ibdata文件:系统表空间文件,所有表共享。 - Redo Log文件:为故障恢复提供支持,保证了事务的持久性。 - Doublewrite Buffer文件:用于存储临时页,...
- **InnoDB**:数据存储在一个或多个表空间文件中,可以是独立表空间或共享表空间。每个表空间可以包含多个表的数据。InnoDB还支持原始设备表空间,允许将表数据直接存储在裸设备上。 - **MyISAM**:每个表的数据...
4. **空间管理**:独立表空间不存在共享表空间的表空间回缩问题,删除操作后可以通过ALTER TABLE等命令回收空间,减少碎片产生。 5. **性能优化**:独立表空间有助于减少碎片化,尤其在单表数据量很大时,易于发现...
- **多表空间存储(独占表空间存储)**:每个表拥有自己独立的表空间文件,通常文件名为表名加上 `.ibd` 扩展名。 - 优点:单个表可以更容易地进行迁移和管理,空间回收更简单。 - 缺点:单个表空间过大时可能会...