FILES 表提供了有关存储 MySQL 表空间数据的文件的信息。
FILES 表提供了有关 InnoDB 数据文件的信息。在 NDB 集群中,此表还提供了有关存储 NDB 集群磁盘数据表的文件的信息。有关特定于 InnoDB 的更多信息,请参阅本节后面的 InnoDB 注释;有关特定于 NDB 集群的更多信息,请参阅 NDB 注释。
FILES 表包含以下列
FILE_ID对于
InnoDB:表空间 ID,也称为space_id或fil_space_t::id。对于
NDB:文件标识符。FILE_ID列值是自动生成的。FILE_NAME对于
InnoDB:数据文件的名称。每个表和通用表空间都有一个.ibd文件名扩展名。撤消表空间以undo为前缀。系统表空间以ibdata为前缀。全局临时表空间以ibtmp为前缀。文件名包含文件路径,该路径可能相对于 MySQL 数据目录(datadir系统变量的值)。对于
NDB:由CREATE LOGFILE GROUP或ALTER LOGFILE GROUP创建的撤消日志文件的名称,或由CREATE TABLESPACE或ALTER TABLESPACE创建的数据文件的名称。在 NDB 8.4 中,文件名显示为相对路径;对于撤消日志文件,此路径相对于目录;对于数据文件,它相对于目录DataDir/ndb_NodeId_fs/LG。这意味着,例如,使用DataDir/ndb_NodeId_fs/TSALTER TABLESPACE ts ADD DATAFILE 'data_2.dat' INITIAL SIZE 256M创建的数据文件的名称显示为./data_2.dat。FILE_TYPE对于
InnoDB:表空间文件类型。InnoDB文件有三种可能的类型。TABLESPACE是任何系统、通用或每个表表空间文件的文件类型,这些文件存储表、索引或其他形式的用户数据。TEMPORARY是临时表空间的文件类型。UNDO LOG是撤消表空间的文件类型,它存储撤消记录。对于
NDB:值之一为UNDO LOG或DATAFILE。TABLESPACE_NAME与文件关联的表空间的名称。
对于
InnoDB:通用表空间名称与创建时指定的名称相同。每个表表空间的名称显示为以下格式:。schema_name/table_nameInnoDB系统表空间名称为innodb_system。全局临时表空间名称为innodb_temporary。默认撤消表空间名称为innodb_undo_001和innodb_undo_002。用户创建的撤消表空间名称与创建时指定的名称相同。TABLE_CATALOG此值始终为空。
TABLE_SCHEMA这始终为
NULL。TABLE_NAME这始终为
NULL。LOGFILE_GROUP_NAME对于
InnoDB:这始终为NULL。对于
NDB:日志文件或数据文件所属的日志文件组的名称。LOGFILE_GROUP_NUMBER对于
InnoDB:这始终为NULL。对于
NDB:对于磁盘数据撤消日志文件,日志文件所属的日志文件组的自动生成 ID 号。这与ndbinfo.dict_obj_info表中显示的id列值以及ndbinfo.logspaces和ndbinfo.logspaces表中此撤消日志文件的log_id列值相同。ENGINE对于
InnoDB:此值始终为InnoDB。对于
NDB:此值始终为ndbcluster。FULLTEXT_KEYS这始终为
NULL。DELETED_ROWS这始终为
NULL。UPDATE_COUNT这始终为
NULL。FREE_EXTENTS对于
InnoDB:当前数据文件中完全空闲的扩展数量。对于
NDB:文件尚未使用的扩展数量。TOTAL_EXTENTS对于
InnoDB:当前数据文件中使用的完整扩展数量。文件末尾的任何部分扩展都不计算在内。对于
NDB:分配给文件的扩展总数。EXTENT_SIZE对于
InnoDB:对于页面大小为 4KB、8KB 或 16KB 的文件,扩展大小为 1048576(1MB)。对于页面大小为 32KB 的文件,扩展大小为 2097152 字节(2MB),对于页面大小为 64KB 的文件,扩展大小为 4194304(4MB)。FILES不报告InnoDB页面大小。页面大小由innodb_page_size系统变量定义。扩展大小信息也可以从INNODB_TABLESPACES表中获取,其中FILES.FILE_ID = INNODB_TABLESPACES.SPACE。对于
NDB:文件的扩展大小(以字节为单位)。INITIAL_SIZE对于
InnoDB:文件的初始大小(以字节为单位)。对于
NDB:文件的字节大小。这与用于创建文件的CREATE LOGFILE GROUP、ALTER LOGFILE GROUP、CREATE TABLESPACE或ALTER TABLESPACE语句中使用的INITIAL_SIZE子句中的值相同。MAXIMUM_SIZE对于
InnoDB:文件中允许的最大字节数。除预定义系统表空间数据文件外,所有数据文件的该值为NULL。最大系统表空间文件大小由innodb_data_file_path定义。最大全局临时表空间文件大小由innodb_temp_data_file_path定义。预定义系统表空间数据文件的NULL值表示未明确定义文件大小限制。对于
NDB:此值始终与INITIAL_SIZE值相同。AUTOEXTEND_SIZE表空间的自动扩展大小。对于
NDB,AUTOEXTEND_SIZE始终为NULL。CREATION_TIME这始终为
NULL。LAST_UPDATE_TIME这始终为
NULL。LAST_ACCESS_TIME这始终为
NULL。RECOVER_TIME这始终为
NULL。TRANSACTION_COUNTER这始终为
NULL。VERSION对于
InnoDB:这始终为NULL。对于
NDB:文件的版本号。ROW_FORMAT对于
InnoDB:这始终为NULL。对于
NDB:FIXED或DYNAMIC之一。TABLE_ROWS这始终为
NULL。AVG_ROW_LENGTH这始终为
NULL。DATA_LENGTH这始终为
NULL。MAX_DATA_LENGTH这始终为
NULL。INDEX_LENGTH这始终为
NULL。DATA_FREE对于
InnoDB:整个表空间的可用空间总量(以字节为单位)。预定义系统表空间(包括系统表空间和临时表表空间)可能具有一个或多个数据文件。对于
NDB:这始终为NULL。CREATE_TIME这始终为
NULL。UPDATE_TIME这始终为
NULL。CHECK_TIME这始终为
NULL。CHECKSUM这始终为
NULL。STATUS对于
InnoDB:此值默认情况下为NORMAL。InnoDB每表文件表空间可能会报告IMPORTING,这表示表空间尚不可用。对于
NDB:对于 NDB Cluster 磁盘数据文件,此值始终为NORMAL。EXTRA对于
InnoDB:这始终为NULL。对于
NDB:对于撤消日志文件,此列显示撤消日志缓冲区大小;对于数据文件,它始终为 NULL。接下来的几段将提供更详细的解释。NDB在集群中的每个数据节点上存储每个数据文件和每个撤消日志文件的副本。FILES表包含每个此类文件的行。假设您在具有四个数据节点的 NDB 集群上运行以下两个语句CREATE LOGFILE GROUP mygroup ADD UNDOFILE 'new_undo.dat' INITIAL_SIZE 2G ENGINE NDBCLUSTER; CREATE TABLESPACE myts ADD DATAFILE 'data_1.dat' USE LOGFILE GROUP mygroup INITIAL_SIZE 256M ENGINE NDBCLUSTER;成功运行这两个语句后,您应该看到类似于这里显示的针对
FILES表的查询结果mysql> SELECT LOGFILE_GROUP_NAME, FILE_TYPE, EXTRA -> FROM INFORMATION_SCHEMA.FILES -> WHERE ENGINE = 'ndbcluster'; +--------------------+-----------+--------------------------+ | LOGFILE_GROUP_NAME | FILE_TYPE | EXTRA | +--------------------+-----------+--------------------------+ | mygroup | UNDO LOG | UNDO_BUFFER_SIZE=8388608 | | mygroup | DATAFILE | NULL | +--------------------+-----------+--------------------------+
以下说明适用于 InnoDB 数据文件。
FILES报告的信息是从打开文件的InnoDB内存缓存中获取的,而INNODB_DATAFILES从InnoDBSYS_DATAFILES内部数据字典表中获取其数据。FILES提供的信息包括全局临时表空间信息,该信息在InnoDBSYS_DATAFILES内部数据字典表中不可用,因此也不包括在INNODB_DATAFILES中。当存在单独的撤消表空间时,撤消表空间信息将显示在
FILES中,因为它们在 MySQL 8.4 中默认存在。以下查询将返回与
InnoDB表空间相关的所有FILES表信息。SELECT FILE_ID, FILE_NAME, FILE_TYPE, TABLESPACE_NAME, FREE_EXTENTS, TOTAL_EXTENTS, EXTENT_SIZE, INITIAL_SIZE, MAXIMUM_SIZE, AUTOEXTEND_SIZE, DATA_FREE, STATUS FROM INFORMATION_SCHEMA.FILES WHERE ENGINE='InnoDB'\G
FILES表提供有关磁盘数据 文件 的信息;您不能使用它来确定磁盘空间分配或各个NDB表的可用性。但是,可以使用 ndb_desc 查看在磁盘上存储数据的每个NDB表分配了多少空间,以及该表在磁盘上存储数据时还剩下多少可用空间。FILES表中包含的大部分信息也可以在ndbinfofiles表中找到。CREATION_TIME、LAST_UPDATE_TIME和LAST_ACCESSED值由操作系统报告,而不是由NDB存储引擎提供。在操作系统没有提供值的情况下,这些列将显示NULL。TOTAL EXTENTS和FREE_EXTENTS列之间的差值是文件当前使用的扩展数量SELECT TOTAL_EXTENTS - FREE_EXTENTS AS extents_used FROM INFORMATION_SCHEMA.FILES WHERE FILE_NAME = './myfile.dat';要近似估计文件使用的磁盘空间量,请将该差值乘以
EXTENT_SIZE列的值,该值以字节为单位给出文件扩展的大小SELECT (TOTAL_EXTENTS - FREE_EXTENTS) * EXTENT_SIZE AS bytes_used FROM INFORMATION_SCHEMA.FILES WHERE FILE_NAME = './myfile.dat';同样,您可以通过将
FREE_EXTENTS乘以EXTENT_SIZE来估计给定文件中剩余的可用空间量SELECT FREE_EXTENTS * EXTENT_SIZE AS bytes_free FROM INFORMATION_SCHEMA.FILES WHERE FILE_NAME = './myfile.dat';重要前面查询生成的字节值仅为近似值,其精度与
EXTENT_SIZE的值成反比。也就是说,EXTENT_SIZE越大,近似值就越不准确。同样重要的是要记住,一旦使用扩展,就无法在不删除它所属的数据文件的情况下释放它。这意味着从磁盘数据表中删除数据 不会释放磁盘空间。
可以在
CREATE TABLESPACE语句中设置扩展大小。有关更多信息,请参见 第 15.1.21 节,“CREATE TABLESPACE 语句”。您可以使用 ndb_desc 实用程序获取有关磁盘数据表空间的信息。有关更多信息,请参见 第 25.6.11.1 节,“NDB Cluster 磁盘数据对象”,以及 ndb_desc 的描述。
有关创建、删除和获取有关 NDB Cluster 磁盘数据对象的更多信息和示例,请参见 第 25.6.11 节,“NDB Cluster 磁盘数据表”。