查看数据库中有哪些表空间

1、系统表空间在MySQL数据目录中有一个名为ibdata1的文件,该文件可以存储一张或多张表。
92327512M-rw-r-----1mysqlmysql12MMarch1810:42ibdata1该文件是MySQL系统表空间文件。
默认为1,只需在配置文件my.cnf中定义即可。
innodb_data_file_path=ibdata1:200M;ibdata2:200M:autoextend:max:800M系统表空间不仅可以是文件系统组成的文件,还可以是非文件系统组成的磁盘块的定义,比如裸设备,也很简单innodb_data_file_path=/dev/nvme0n1p1:3Gnewraw;/dev/nvme0n1p2:2Gnewraw系统表空间的内容是什么?具体内容包括:doublewriterbuffer、changebuffer、数据字典(MySQL8.0之前)、表数据和表索引。
那么为什么目前主流版本的MySQL不默认有系统表空间呢?当我们审视原因时,系统表空间存在三大缺点:原因一:磁盘空间无法自动收缩,造成空间的巨大浪费。
即使它包含的所有表都被删除,该空间也不会自动释放。
2、简单表空间简单表空间与系统表空间不同每个表空间与表一一对应,每个表都有自己的表空间。
具体来说,它在磁盘上显示为后缀为.ibd的文件。
例如表t1,对应的表空间文件为t1.ibd91710796K-rw-r-----1mysqlmysql96KMarch1816:13如何在特定表上使用t1.ibd单表空间?有两种方法:方法一:在配置文件中启用。
在配置文件中启用单表空间,并设置参数innodb_filer_per_table,使得当前数据库下的所有表默认启用单表空间。
innodb_file_per_table=1另外,还可以在建表时直接指定单个表空间mysql>createtablet1(idint,r1char(36))tablespaceinnodb_file_per_table;QueryOK,0rowsaffected(0.04sec.)另外解决了系统表空间的几个缺点前面提到过,单个表空间还具有其他优点:1.truncate操作比处理任何其他表空间要快根据使用场景指定在不同的磁盘目录中,例如日志表放在较慢的磁盘上,需要频繁随机读取的表放在SSD上等。
mysql>createtableytt_dedicated(idint)datadirectory='/var/lib/mysql-files';QueryOK,0rowsaffected(0.04sec)3.可以使用optimizetable来收缩或重建经常增删改查的表。
大致流程如下:创建与原表相同的表结构和数据文件,将真实数据复制到临时文件中,删除原表定义和数据文件,最后将临时文件的名称改为相同的和原来的表一样。
3、通用表空间通用表空间最早出现在MySQLCluster中,也就是NDB引擎。
从MySQL5.7开始引入了InnoDB引擎。
通用表空间,例如系统表空间,也是共享表空间。
每个表空间可以包含一个或多个表,这意味着通用表空间与表之间存在一对多的关系。

查看数据库表空间

要查看数据库表空间,请使用特定的数据库管理命令或查询。
在MySQL中,通过以下SQL查询显示所有表空间及其信息:sqlSHOWTABLESTATUS;该查询显示数据库中所有表的统计信息,包括表空间名称、状态、大小等。
在Oracle中,使用此SQL查询显示表空间列表:sqlSELECTtable_name,tablespace_nameFROMall_tables;该查询显示当前用户下的所有表及其所属的表空间。
在SQLServer中,使用以下SQL查询来显示表空间列表:sqlSELECTnameASTableSpaceNameFROMsys.tables;该查询显示当前数据库中所有表的表空间名称。