概述今天主要介绍mysql的表间空,但是MySQL并没有真正的表间空管理。
MySQL的Innodb包含了表空之间的两种文件模式,默认的共享表空和每个表分开的独立表空。
一般来说,当数据量很小时,建议使用共享表之间的管理模式空。当数据量较大时,建议使用独立表之间的管理方式空。
01查看表空间模式
mysql & gt显示类似“%innodb_file_per_table%”的变量;ON表示当前在独立表空之间,OFF表示在共享表空之间。
同理:1表示开,0表示关。
02查看表空间信息
select * from information _ schema . global _ variables其中variable_name in (“datadir “,” innodb_data_file_path “,” innodb_data_home_dir “,” innodb_file_per_table “,” innodb _ open _ files “);Datadir表示数据文件的基本路径。Innodb_data_file_path表示共享文件的名称。Innodb_file_per_table表示表空之间的类型。Innodb_open_files可以打开的最大文件数。Innodb_data_file_path文件格式:file _ name:file_size:auto_extend:max _ size file _ name表示数据文件名,file _ size表示数据文件大小,auto _ extend表示自动扩展,max _ size表示最大大小。innodb _ data _ file _ path = IB data 1:10M:auto extend:Max:500 MB data 1的初始大小为10M,自动扩展,最大为500m。多个标识符用分号分隔,只有最后一个文件可以使用autoextend属性。
03共享表空间
Innodb的所有数据都存储在一个表空中,这个表可以由很多文件组成,一个表可以跨多个文件存在,所以它的大小限制不再是文件大小限制,而是它自己的限制。从Innodb的官方文档可以看出,表空之间的最大限制是64TB,也就是说Innodb的单表限制基本在64TB左右。当然,这个大小包括了这个表的所有索引和其他相关数据。
1.共享表空的优点:
表空可以分成多个文件存储在每个磁盘上,所以表也可以分成多个文件存储在磁盘上,表的大小不受磁盘大小的限制。
数据和文件放在一起便于管理。
2.共享表空之间的缺点:
1)所有数据和索引都存储在一个文件中。虽然一个大文件可以分成多个小文件,但是多个表和索引混合存储在tables 空中。当数据量非常大时,经过大量的删除操作后,表空之间会有大量的空空隙,特别是对于统计分析和频繁的删除。
2)共享表空之间分配后不能收回:当发生临时索引或者创建临时表的操作表空被放大时,即使删除相关表也无法收回空的那部分,数据库的冷备非常慢;
3.设置数据文件:
有两种方法可以设置数据文件。一种是所有的数据文件都在一个目录下,称为数据文件在同一个目录下。另一种是所有的数据文件都在不同的目录下,称为异目录数据文件。
1)设置相同的目录数据文件:
[mysqld]innodb _ file _ per _ table = 0 innodb _ data _ home _ dir =/msdata/datasinnodb _ data _ file _ path = IB data1:50M;ibdata 2:20M;Ibdata3:50M:autoextend通过innodb_data_home_dir设置一个公共的数据文件目录。
2)建立不同的目录数据文件:
[mysqld]innodb _ file _ per _ table = 0 innodb _ data _ home _ dir = innodb _ data _ file _ path =/msdata/datas/IB data1:76M;/msdata/datas/IB data 2:10M;/msdata/datas/IB data 3:10M;/ms data/data 01/IB data 4:10m:auto extend注意:参数” innodb_data_home_dir= “必须存在。同时,autoextend属性只能用于最后一个文件。
04独立表空间
独立表空之间,每个表都有多个独立的数据文件,索引和数据是分离的。
1.独立表之间的优势空:
每个表都有自己独立的表室空,每个表的数据和索引都会存储在自己的表室空中,这样就可以在不同的数据库中移动单个表。
空可以回收(table 空除了drop table操作不能自行回收),Drop table操作自动回收table 空。对于统计分析或日值表,删除大量数据后,可以通过:alter table table name engine = innodb;收回未使用的空房间。
对于独立表空之间的表,无论怎么删除,表空之间的碎片都不会严重影响性能,还是有机会处理的。
2.独立表空之间的缺点:
1)当数据库中的表数达到一定程度时,每次操作涉及的文件太多。如果按照默认的Centos ulimit -n = 1024,只能同时打开256个表,很难满足MySQL数据结构中的要求。
2)这个数据文件的利用率不是很高。当集中了大量“低”档时,对空的浪费也是惊人的。更何况最后可能出现的情况不是“一堆K级的小文件”而是“一堆G级的大文件”,多少有些适得其反。
3)独立表之间的数据存储规则空:
表结构定义文件:$ datadir/$ dbname/$ tabname.frm
数据文件:$ datadir/$ dbname/$ tabname.ibd
附:独立表之间满格问题空 空。
当独立表空之间的空间已满时,只能通过数据迁移来移除表空之间的空间。具体做法是将独立表空改为共享表空。
05释放表空间
方法1:优化表table_name
这是我们经常看到的一种方法,这里就不多介绍了。
方法2:alter table table _ name engine = engine _ name。
这种方法通常用于切换表的引擎,比如MyISAM到InnoDB,但也适用于释放tables 空,只是切换的引擎与原来的引擎相同。
注意:
1.这两种方式都适用于我们常用的表,myisam和innodb。2.优化表的时候会锁表,数据表越大,耗时越长,因此不要在网站忙时进行表优化。
后面会分享更多关于devops和DBA的内容,感兴趣的朋友可以关注一下~
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。