所在的位置: mysql >> mysql优势 >> MySQL80表空间机制

MySQL80表空间机制

摘要:数据是以表空间来维护和存放的。在表空间中包含数据,结构,索引等信息,如何有效使用表空间对于MySQL来说非常重要。

数据库的表空间是用来存储数据的逻辑空间,也是存储数据的最大逻辑单元,其下还有段、区、页等逻辑数据类型。表空间设计是为了提升更高的IO,不同处理数据的解耦,便于管理。

通过表空间来实现对数据文件的灵活控制。

目前MySQL8.0版本Tablespaces,从原有的共享表空间,数据表空间分成如下5中表空间:

SystemtablespaceFile-per-tabletablespacesGeneraltablespacesUndoTablespaceTemporaryTablespaces

下面逐步了解一下。

1.Systemtablespace

系统表空间:到目前为止的8.0.23保留下来的就是changebuffer的存储区域。如果表在系统表空间创建的,而不是在file-per-table或General表空间中创建的,那么它还包含表和索引数据。之前版本中,系统表空间包含InnoDB数据字典。还包含doublewrite缓冲区存储区域。从MySQL8.0.20开始分离出来生成单独的doublewrite文件。

innodb_data_home_dir=/opt/data8.0/dbdatainnodb_data_file_path=ibdata1:16M;ibdata2:16M:autoextend

备注:autoextend属性只能在innodb_data_file_path设置的最后一个数据文件中指定,对于系统表空间现有系统表空间的大小减少是不支持的。要实现更小的系统表空间,唯一的选择是将数据从备份恢复。Mysql里删除数据是不释放空间的。

所以之前版本的系统表空间是非常大的。为了避免使用大的系统表空间,可使用每个表文件的表空间。File-per-table表空间是默认的表空间类型,在创建InnoDB表时隐式使用。与系统表空间不同,在截断或删除在每个表文件表空间中创建的表之后,磁盘空间返回给操作系统。

2.File-per-tabletablespaces

独立表空间包含单个InnoDB表的数据和索引,并存储在文件系统中自己的数据文件中。

#my.cnf配置[mysqld]innodb_file_per_table=ON#命令行方式mysqlSETGLOBALinnodb_file_per_table=ON;mysqlCREATETABLEcity(IDint)ENGINE=InnodbTABLESPACE=innodb_file_per_table;

独立表空间优势:

1.truncate或drop在table操作,磁盘空间返回给操作系统。但共享表空间不会释放,只能用于InnoDB数据。换句话说,共享表空间数据文件的大小不会缩小。2.在共享表空间中的表上执行表复制ALTERTABLE操作因为table-copying动作,会增加表空间所占用的磁盘空间增加3.独立表空间执行TRUNCATE表时,性能更好4.独立表空间数据文件可以在不同的存储设备上创建,用于I/O优化、空间管理或备份5.通过DISCARD/IMPORTTABLESPACE方式迁移独立表空间


转载请注明:http://www.aierlanlan.com/grrz/3493.html