该 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_name
InnoDB
系统表空间名称为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
从InnoDB
SYS_DATAFILES
内部数据字典表中获取数据。 -
提供的信息
FILES
包括全局临时表空间信息,这些信息在InnoDB
SYS_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
表中的信息也可以在ndbinfo
files
表中找到。 -
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 表”。