MySQL TableSpace表空间
文章目录
What TableSpace
-
表空间是一个存储位置,可以保存实际的底层数据库对象的数据。在
MySQL
里面,它主要存储InnoDB
存储引擎的底层数据。它在物理数据和逻辑数据之间提供了一个抽象层 -
表空间只指定数据库存储位置,而不指定逻辑数据库结构或数据库模式
-
虽然表空间通常将数据存储在文件系统文件中,但单个文件必须是单个表空间的一部分
MySQL
启动后,会自动创建二个系统表空间,存储系统信息
-
innodb_system
包含
innodb
数据字典(innodb
相关对象的元数据),同时,双写缓冲(doublewrite buffer
)、改变缓冲(change buffer
)和undo
日志(undo logs
)等也存储于系统表空间中。此外,系统表空间也包含用户在该表空间创建的表和索引等数据。由于系统表空间可以存储多张表,因此,其为一个共享表空间
Why TableSpace
通过使用表空间,管理员还可以控制安装的磁盘布局。表空间的一个常见用途是优化性能。
例如,可以将大量使用的索引放置在快速SSD上。另一方面,包含很少被访问的归档数据的数据库表可以存储在一个便宜但速度较慢的磁性硬盘驱动器上
How TableSpace
MySQL5.6
及以上,使用InnoDB
引擎后,默认开启每个单独的表都会单独使用表空间。
-
查询当前表空间
1
SELECT FILE_NAME, FILE_TYPE, TABLESPACE_NAME FROM INFORMATION_SCHEMA.FILES;
-
新增表空间
在新增前,需要确认新增的目录是否在
MySQL
目录内1 2
[mysqld] innodb_directories = "/var/lib/mysql;/data"
确认以上配置存在后,就可以在其他目录增加表空间
1
ALTER TABLESPACE test_ts ADD DATAFILE '/data/testts.ibd' ENGINE=INNODB;
-
给现有空间添加数据文件
MySQL8
不支持,只支持一个TableSpace
一个数据文件,如果要支持多个Datafile
对应一个Tablespace
只能使用NDB
引擎
在实践中,可以将数据库服务器挂载不同磁盘,建表时,指定TABLESPACE
,并将TABLESAPCE
的数据文件建立在不同的目录下,这样分摊I/O
文章作者 UnknowName
上次更新 2021-04-21