28.3.15 INFORMATION_SCHEMA 文件表
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 表空间以undo开头。系统表空间以ibdata开头。全局临时表空间以ibtmp开头。文件名包括文件路径,该路径可能是相对于 MySQL 数据目录(datadir系统变量的值)。对于
NDB:该文件名是由CREATE LOGFILE GROUP或ALTER LOGFILE GROUP创建的undo日志文件,或者由CREATE TABLESPACE或ALTER TABLESPACE创建的数据文件。在 NDB 8.4 中,该文件名显示相对路径;对于undo日志文件,这个路径是相对于目录;对于数据文件,它是相对于目录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是 undo 表空间文件类型,该文件持有undo记录。对于
NDB:其中之一是UNDO LOG或DATAFILE。 -
TABLESPACE_NAME与文件相关的表空间名称。
对于
InnoDB:通用表空间名称是创建时指定的。按表文件表空间名称以以下格式显示:。InnoDB 系统表空间名称为schema_名/table_名innodb_系统。全局临时表空间名称为innodb_临时。默认 undo 表空间名称为innodb_undo_001和innodb_undo_002。用户创建的 undo 表空间名称是创建时指定的。 -
TABLE_CAT这个值总是为空。
-
TABLE_SCHEMA总是
NULL。 -
TABLE_NAME总是
NULL。 -
LOGFILE_GROUP_NAME对于
InnoDB:总是NULL。对于
NDB:日志文件组或数据文件的名称。 -
LOGFILE_ GROUP_NUMBER对于
InnoDB:总是为NULL。对于
NDB:磁盘数据undo日志文件的自动生成ID号,表示该日志文件所属的日志文件组。这个值与ndbinfo.dict_obj_info表中的id列和logspaces表中的log_id列相同,为该undo日志文件。 -
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 页大小的文件。对于具有 32KB 页大小的文件,extent大小为 2097152 字节(2MB),对于具有 64KB 页大小的文件,extent大小为 4194304 字节(4MB)。FILES不报告InnoDB页大小。页大小由innodb_page_size系统变量定义。extent大小信息也可以从INNODB_TABLESPACES表中获取,其中FILES.FILE_ID = INNODB_TABLESPACES.SPACE。对于
NDB:文件extent大小(以字节为单位)。 -
INITIAL_ SIZE对于
InnoDB:文件初始大小(以字节为单位)。对于
NDB:文件大小(以字节为单位)。这与在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文件表空间可能报告IMPORTING对于NDB:对于 NDB 集群磁盘数据文件,这个值始终是NORMAL。 -
EXTRA对于InnoDB:这始终是NULL。对于NDB:对于undo日志文件,这个列显示undo日志缓冲区大小;对于数据文件,它始终是NULL。下面几段将提供更多详细信息。NDB在集群中的每个数据节点上存储了每个数据文件和每个undo日志文件的副本。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 | +--------------------+-----------+--------------------------+
-
FILES是一个非标准的INFORMATION_ SCHEMA表。 -
您必须拥有PROCESS特权,以便查询该表。
以下注意事项适用于InnoDB数据文件。
-
FILES表中的信息来自InnoDB内存缓存中打开的文件,而INNODB_DATAFILES则从InnoDB的SYS_DATAFILES内部数据字典表获取数据。 -
FILES提供的信息包括全局临时表空间信息,这些信息不在InnoDBSYS_ DATAFILES内部数据字典表中,因此不包含在INNODB_DATAFILES中。 -
当存在单独的undo表空间时,
FILES显示undo表空间信息,这在 MySQL 8.4 中默认情况下是如此。 -
以下查询返回所有
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
-
FILES表只提供 Disk Data 文件信息,您不能使用它来确定单个NDB表的磁盘空间分配或可用性。然而,可以使用NDB表在磁盘上存储数据的总空间和剩余可用空间—以及该表在磁盘上存储数据的总空间和剩余可用空间—使用ndb_desc。 -
FILES表中的许多信息也可以在ndbinfofiles表中找到。 -
CREATION_TIME、LAST_UPDATE_TIME和LAST_ACCESSED值来自操作系统报告,且不是
NDB存储引擎提供的。操作系统未提供值时,这些列将显示NULL. -
TOTAL EXTENTS和FREE_EXTENTS列之间的差异是文件当前正在使用的extent数量:
SELECT TOTAL_EXTENTS - FREE_EXTENTS AS extents_used FROM INFORMATION_SCHEMA.FILES WHERE FILE_NAME = './myfile.dat';为了近似地估算文件中磁盘空间的使用量,乘以TOTAL EXTENTS和FREE_EXTENTS之间的差异,以及
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被使用,它不能再次释放除非删除包含其部分的数据文件。这意味着从磁盘数据表中删除记录不会释放磁盘空间。
可以在
CREATE TABLESPACE语句中设置extent size。更多信息,请见第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 表”。