该 FILES 表提供了 MySQL 表空间数据存储的文件信息。
该 FILES 表提供了 InnoDB 数据文件的信息。在 NDB Cluster 中,该表还提供了 NDB Cluster Disk Data 表的文件信息。有关 InnoDB 的更多信息,请参阅 InnoDB Notes;有关 NDB Cluster 的更多信息,请参阅 NDB Notes。
该 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.3 中,文件名显示相对路径;对于撤销日志文件,该路径相对于目录;对于数据文件,该路径相对于目录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:表空间文件类型。有三种可能的文件类型: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 号,该日志文件所属。这与id列在ndbinfo.dict_obj_info表和log_id列在ndbinfo.logspaces和ndbinfo.logspaces表中的值相同。 -
ENGINE对于
InnoDB:该值始终是InnoDB。对于
NDB:该值始终是ndbcluster。 -
FULLTEXT_KEYS这始终是
NULL。 -
DELETED_ROWS这始终是
NULL。 -
UPDATE_COUNT这始终是
NULL。 -
FREE_EXTENTS对于
InnoDB:当前数据文件中的完全免费 extent 数量。对于
NDB:文件中未使用的 extent 数量。 -
TOTAL_EXTENTS对于
InnoDB:当前数据文件中使用的完整 extent 数量。文件末尾的部分 extent 不计入。对于
NDB:文件中分配的总 extent 数量。 -
EXTENT_SIZE对于
InnoDB:extent 大小为 1048576(1MB),用于 4KB、8KB 或 16KB 页大小的文件。extent 大小为 2097152 字节(2MB),用于 32KB 页大小的文件,用于 64KB 页大小的文件为 4194304(4MB)。FILES不报告InnoDB页大小。页大小由innodb_page_size系统变量定义。extent 大小信息也可以从INNODB_TABLESPACES表中检索,其中FILES.FILE_ID = INNODB_TABLESPACES.SPACE。对于
NDB:文件的 extent 大小(以字节为单位)。 -
INITIAL_SIZE对于
InnoDB:文件的初始大小(以字节为单位)。对于
NDB:文件的大小(以字节为单位)。这与在INITIAL_SIZE子句中使用的值相同,例如在CREATE LOGFILE GROUP、ALTER LOGFILE GROUP、CREATE TABLESPACE或ALTER TABLESPACE语句中创建文件时使用的值。 -
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文件-per-table 表空间可能报告IMPORTING,这表明表空间尚不可用。对于
NDB:对于 NDB 集群磁盘数据文件,该值总是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中。 -
Undo 表空间信息在
FILES中显示,当单独的Undo 表空间存在时,默认情况下在 MySQL 8.3 中。 -
以下查询返回所有
FILES表信息,相关到InnoDB表空间。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
-
The
FILES表提供了关于磁盘数据 文件 的信息;您不能使用它来确定磁盘空间分配或可用性对于单个NDB表。然而,可以使用NDB查看每个表在磁盘上的空间分配情况,以及可用存储空间—使用 ndb_desc。 -
大多数
FILES表中的信息也可以在ndbinfofiles表中找到。 -
The
CREATION_TIME、LAST_UPDATE_TIME和LAST_ACCESSED值是由操作系统报告的,不是由NDB存储引擎提供的。在操作系统未提供值的情况下,这些列将显示NULL。 -
The difference between the
TOTAL EXTENTS和FREE_EXTENTS列是文件当前使用的 extent 数量:SELECT TOTAL_EXTENTS - FREE_EXTENTS AS extents_used FROM INFORMATION_SCHEMA.FILES WHERE FILE_NAME = './myfile.dat';要近似计算文件使用的磁盘空间,乘以
EXTENT_SIZE列的值,该值是文件中 extent 的大小(以字节为单位):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';Important前面查询产生的字节值仅为近似值,其精度与
EXTENT_SIZE的值成反比。也就是说,EXTENT_SIZE越大,近似值的精度越低。还需要记住,一旦 extent 被使用,就不能再释放,除非删除该数据文件的一部分。这意味着从 Disk Data 表中删除数据不会释放磁盘空间。
extent 大小可以在
CREATE TABLESPACE语句中设置。有关更多信息,请参阅 第 15.1.21 节,“CREATE TABLESPACE 语句”。 -
您可以使用 ndb_desc 实用程序来获取 Disk Data 表空间信息。有关更多信息,请参阅 第 25.6.11.1 节,“NDB 集群 Disk Data 对象”,以及 ndb_desc 的描述。
-
有关更多信息和创建、删除和获取 NDB 集群 Disk Data 对象的示例,请参阅 第 25.6.11 节,“NDB 集群 Disk Data 表”。