`

innodb共享表空间vs独立表空间

 
阅读更多

使用过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-pluginInnodb使用turncate table也会使空间收缩。

 

c)         对于使用独立表空间的表,不管怎么删除,表空间的碎片不会太严重的影响性能,而且还有机会处理。

 

缺点:

 

单表增加过大,如超过100G

 

对于单表增长过大的问题,如果使用共享表空间可以把文件分开,但有同样有一个问题,如果访问的范围过大同样会访问多个文件,一样会比较慢。对于独立表空间也有一个解决办法是:使用分区表,也可以把那个大的表空间移动到别的空间上然后做一个连接。其实从性能上出发,当一个表超过100G有可能响应也是较慢了,对于独立表空间还容易发现问题早做处理。

共享表空间: 

 

优点: 

 

可以放表空间分成多个文件存放到各个磁盘上(表空间文件大小不受表大小的限制,如一个表可以分布在不同步的文件上)。数据和文件放在一起方便管理。 

 

所有的数据和索引存放到一个文件中以为着将有一个很常大的文件,虽然可以把一个大文件分成多个小文件,但是多个表及索引在表空间中混合存储,这样对于一个表做了大量删除操作后表空间中将会有大量的空隙,特别是对于统计分析,日值系统这类应用最不适合用共享表空间。 

 

我们知道共享表空间管理会出现表空间分配后不能回缩的问题,当出现临时建索引或是创建一个临时表的操作表空间扩大后,就是删除相关的表也没办法回缩那部分空间了。我们存在磁盘监控时,也许就报警不断了,但实际上MySQL还可以运行良好。另外,当磁盘上占用较多时性能也不是太好。 

 

这种情况处理只能是是建一个新的Slave从主库上Dump出来,然后在Dump到从库中,动作较大。 

 

对于InnoDB Hot Backup备份的操作(或是直接冷备),每次需要CP的文件比较大。如果现在有180G的表空间,但实际数据只有50G,那么我们将面对每次需要拷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的存储管理也类似,但是mysql增加了一个共享表空间和独立表空间的概念;  一、概念  共享表空间: Innodb的所有数据保存在一个单独的表空间里面,而这个表空间可以由很多个文件组成,一个表可以...

    MySQL判别InnoDB表是独立表空间还是共享表空间的方法详解

    可以有多个数据文件,如果没有设置innodb_file_per_table的话, 那些Innodb存储类型的表的数据都放在这个共享表空间中,而系统变量innodb_file_per_table=1的话,那么InnoDB存储引擎类型的表就会产生一个独立表空间...

    innodb存储引擎修改表共享空间为独立空间

    最近在优化mysql innodb存储引擎,把共享表空间转换成独立表空间,下面是详细步骤

    浅析mysql 共享表空间与独享表空间以及他们之间的转化

    对于innodb的数据结构,首先要解决两个概念性的问题: 共享表空间以及独占表空间。什么是共享表空间和独占表空间共享表空间以及独占表空间都是针对数据的存储方式而言的。共享表空间: 某一个数据库的所有的表数据,...

    优化InnoDB表BLOB,TEXT列的存储效率

    1、InnoDB可以选择使用共享表空间或者是独立表空间方式,建议使用独立表空间,便于管理、维护。启用 innodb_file_per_table 选项,5.5以后可以在线动态修改生效,并且执行 ALTER TABLE xx ENGINE = InnoDB 将现有表...

    提高MySQL中InnoDB表BLOB列的存储效率的教程

    1、InnoDB可以选择使用共享表空间或者是独立表空间方式,建议使用独立表空间,便于管理、维护。启用 innodb_file_per_table 选项,5.5以后可以在线动态修改生效,并且执行 ALTER TABLE xx ENGINE = InnoDB 将现有表...

    探讨:innodb与myisam在存储上有何特点和区别

    myisam 存储数据有三个文件.MYD,.MYI ,.FRM 数据文件和索引文件分开存储innodb存储数据有.FRM存放表定义,.ibd(独享表空间),.ibdata(共享表空间).innodb存储数据分独立表空间和共享表空间(具体使用哪个由innodb_...

    DU-MySQL-Search-Win-V6.3

    用文件恢复工具通常无法恢复出表文件,或者恢复出的表文件内容为乱码,mysql无法正常识别加载,这时需要用mysql碎片扫描工具扫描残存的表数据,可搜索mysql5/8版本InnoDB表碎片,包括独立表空间和共享表空间,上千...

    MySQL面试题精选35题

    8.什么是独立表空间和共享表空间?它们的区别是什么? 9.清空表的所有数据性能最好的语句是? 10.唯一索引和普通索引哪个性能更好? 11.left join 和 right join 的区别是什么? 12.什么是最左匹配原则?它的生效...

    mysql数据库my.cnf配置文件

    # InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间 # 独立表空间优点: # 1.每个表都有自已独立的表空间。 # 2.每个表的数据和索引都会存在自已的表空间中。 # 3.可以实现单表在不同的数据库中...

    MySQL管理之道 性能调优、高可用与监控.part2.rar

    1.3.1 支持动态更改独立表空间 39 1.3.2 支持动态更改innodb锁超时时间 40 1.4 innodb新参数汇总 40 1.5 同步复制新参数汇总 48 1.6 sql语句写法的改变 53 1.6.1 delete表连接语法改变 53 1.6.2 mysql5.5存储...

Global site tag (gtag.js) - Google Analytics