该FILES表提供有关存储 MySQL 表空间数据的文件的信息。
该FILES表提供有关 InnoDB数据文件的信息。在 NDB Cluster 中,此表还提供有关存储 NDB Cluster 磁盘数据表的文件的信息。有关 的其他特定信息InnoDB,请参阅 本节后面的InnoDB 注释;有关 NDB Cluster 的其他特定信息,请参阅 NDB 注释。
该FILES表包含以下列:
-
FILE_ID对于
InnoDB:表空间 ID,也称为space_id或fil_space_t::id。对于
NDB:文件标识符。FILE_ID列值是自动生成的。 -
FILE_NAME对于
InnoDB:数据文件的名称。File-per-table 和通用表空间具有.ibd文件扩展名。撤消表空间以 为前缀undo。系统表空间以 为前缀ibdata。全局临时表空间以 为前缀ibtmp。文件名包括文件路径,该路径可能相对于 MySQL 数据目录(系统变量的值datadir)。对于:由 或
NDB创建的撤消日志文件的名称,或由或创建的数据文件的名称。在 NDB 8.0 中,文件名以相对路径显示;对于撤消日志文件,此路径相对于目录 ;对于数据文件,它相对于目录 。例如,这意味着使用 创建的数据文件的名称显示为 。CREATE LOGFILE GROUPALTER LOGFILE GROUPCREATE TABLESPACEALTER TABLESPACEDataDir/ndb_NodeId_fs/LG``DataDir/ndb_NodeId_fs/TS``ALTER 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。在 NDB 8.0.13 之前,TABLESPACE也是一个可能的值。 -
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.logspacesndbinfo.logspaces -
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_TABLESPACESFILES.FILE_ID = INNODB_TABLESPACES.SPACE对于
NDB:文件范围的大小(以字节为单位)。 -
INITIAL_SIZE对于
InnoDB:文件的初始大小(以字节为单位)。对于
NDB:文件的大小(以字节为单位)。此值 与用于创建文件 的、 、 或 语句INITIAL_SIZE的子句 中使用的值相同。CREATE LOGFILE GROUPALTER LOGFILE GROUPCREATE TABLESPACEALTER 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默认情况下为。fileInnoDB-per-table 表空间可能会报告IMPORTING,这表明表空间尚不可用。对于
NDB:对于 NDB 群集磁盘数据文件,此值始终为NORMAL。 -
EXTRA对于
InnoDB:这始终是NULL。对于
NDB:(NDB 8.0.15 及更高版本)对于撤消日志文件,此列显示撤消日志缓冲区大小;对于数据文件,它始终为 NULL。接下来的几段将提供更详细的解释。NDBCLUSTER在集群中的每个数据节点上存储每个数据文件和每个撤消日志文件的副本。在 NDB 8.0.13 及更高版本中,该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 | +--------------------+-----------+--------------------------+撤消日志缓冲区大小信息在 NDB 8.0.13 中被无意删除,但在 NDB 8.0.15 中被恢复。(Bug #92796,Bug #28800252)
在 NDB 8.0.13 之前,该
FILES表在文件所属的每个数据节点上为每个文件包含一行,以及其撤消缓冲区的大小。在这些版本中,同一查询的结果每个数据节点包含一行,如下所示:解释+--------------------+-----------+-----------------------------------------+ | LOGFILE_GROUP_NAME | FILE_TYPE | EXTRA | +--------------------+-----------+-----------------------------------------+ | mygroup | UNDO LOG | CLUSTER_NODE=5;UNDO_BUFFER_SIZE=8388608 | | mygroup | UNDO LOG | CLUSTER_NODE=6;UNDO_BUFFER_SIZE=8388608 | | mygroup | UNDO LOG | CLUSTER_NODE=7;UNDO_BUFFER_SIZE=8388608 | | mygroup | UNDO LOG | CLUSTER_NODE=8;UNDO_BUFFER_SIZE=8388608 | | mygroup | DATAFILE | CLUSTER_NODE=5 | | mygroup | DATAFILE | CLUSTER_NODE=6 | | mygroup | DATAFILE | CLUSTER_NODE=7 | | mygroup | DATAFILE | CLUSTER_NODE=8 | +--------------------+-----------+-----------------------------------------+
笔记
InnoDB注意事项
以下注释适用于InnoDB数据文件。
-
报告的信息
FILES是从InnoDB打开文件的内存缓存中获取的,而INNODB_DATAFILES从内部数据字典表中获取其数据InnoDBSYS_DATAFILES。 -
提供的信息
FILES包括全局临时表空间信息,该信息在内部数据字典表中不可用InnoDBSYS_DATAFILES,因此不包含在中INNODB_DATAFILES。 -
FILES当存在单独的撤消表空间时, 会显示撤消表空间信息 ,因为它们在 MySQL 8.0 中是默认的。 -
以下查询返回
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表仅提供有关磁盘数据文件的信息;您不能使用它来确定单个NDB表的磁盘空间分配或可用性。但是,可以 使用ndb_descNDB查看每个在磁盘上存储数据的表分配了多少空间,以及该表在磁盘上还有多少空间可用于存储数据 。 -
从 NDB 8.0.29 开始,表中的许多信息
FILES也可以在表中找到ndbinfo.files。 -
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 8.0.13 之前,
FILES创建日志文件组后,表中会显示一个附加行,其中包含NULL列FILE_NAME。在 NDB 8.0.13 及更高版本中,此行(不对应于任何文件)不再显示,需要查询表ndbinfo.logspaces以获取撤消日志文件使用信息。有关更多信息,请参阅此表的描述以及 第 25.6.11.1 节“NDB 群集磁盘数据对象”。本条目中讨论的其余部分仅适用于 NDB 8.0.12 及更早版本。对于具有
NULL列的行FILE_NAME, 列的值FILE_ID始终为0,FILE_TYPE列的值始终为UNDO LOG,STATUS列的值始终为NORMAL。 列的值ENGINE始终为ndbcluster。此行中的列
FREE_EXTENTS显示属于给定日志文件组的所有撤消文件可用的空闲范围总数,该日志文件组的名称和编号分别显示在和LOGFILE_GROUP_NAME列 中LOGFILE_GROUP_NUMBER。假设您的 NDB Cluster 上没有现有的日志文件组,并且您使用以下语句创建一个:
解释mysql> CREATE LOGFILE GROUP lg1 ADD UNDOFILE 'undofile.dat' INITIAL_SIZE = 16M UNDO_BUFFER_SIZE = 1M ENGINE = NDB;NULL现在,当您查询表时 ,您可以看到此行FILES:解释mysql> SELECT DISTINCT FILE_NAME AS File, FREE_EXTENTS AS Free, TOTAL_EXTENTS AS Total, EXTENT_SIZE AS Size, INITIAL_SIZE AS Initial FROM INFORMATION_SCHEMA.FILES; +--------------+---------+---------+------+----------+ | File | Free | Total | Size | Initial | +--------------+---------+---------+------+----------+ | undofile.dat | NULL | 4194304 | 4 | 16777216 | | NULL | 4184068 | NULL | 4 | NULL | +--------------+---------+---------+------+----------+由于维护撤消文件所需的开销,可用于撤消日志记录的可用区段总数始终略小于
TOTAL_EXTENTS日志文件组中所有撤消文件的列值总和。可以通过将第二个撤消文件添加到日志文件组,然后对表重复上一个查询来看到这一点FILES:解释mysql> ALTER LOGFILE GROUP lg1 ADD UNDOFILE 'undofile02.dat' INITIAL_SIZE = 4M ENGINE = NDB; mysql> SELECT DISTINCT FILE_NAME AS File, FREE_EXTENTS AS Free, TOTAL_EXTENTS AS Total, EXTENT_SIZE AS Size, INITIAL_SIZE AS Initial FROM INFORMATION_SCHEMA.FILES; +----------------+---------+---------+------+----------+ | File | Free | Total | Size | Initial | +----------------+---------+---------+------+----------+ | undofile.dat | NULL | 4194304 | 4 | 16777216 | | undofile02.dat | NULL | 1048576 | 4 | 4194304 | | NULL | 5223944 | NULL | 4 | NULL | +----------------+---------+---------+------+----------+可以通过将可用区段数乘以初始大小来近似计算使用此日志文件组的磁盘数据表可用于撤消日志记录的可用空间量(以字节为单位):
解释mysql> SELECT FREE_EXTENTS AS 'Free Extents', FREE_EXTENTS * EXTENT_SIZE AS 'Free Bytes' FROM INFORMATION_SCHEMA.FILES WHERE LOGFILE_GROUP_NAME = 'lg1' AND FILE_NAME IS NULL; +--------------+------------+ | Free Extents | Free Bytes | +--------------+------------+ | 5223944 | 20895776 | +--------------+------------+如果您创建一个 NDB 群集磁盘数据表,然后向其中插入一些行,则可以大致看到之后还剩下多少用于撤消日志记录的空间,例如:
解释mysql> CREATE TABLESPACE ts1 ADD DATAFILE 'data1.dat' USE LOGFILE GROUP lg1 INITIAL_SIZE 512M ENGINE = NDB; mysql> CREATE TABLE dd ( c1 INT NOT NULL PRIMARY KEY, c2 INT, c3 DATE ) TABLESPACE ts1 STORAGE DISK ENGINE = NDB; mysql> INSERT INTO dd VALUES (NULL, 1234567890, '2007-02-02'), (NULL, 1126789005, '2007-02-03'), (NULL, 1357924680, '2007-02-04'), (NULL, 1642097531, '2007-02-05'); mysql> SELECT FREE_EXTENTS AS 'Free Extents', FREE_EXTENTS * EXTENT_SIZE AS 'Free Bytes' FROM INFORMATION_SCHEMA.FILES WHERE LOGFILE_GROUP_NAME = 'lg1' AND FILE_NAME IS NULL; +--------------+------------+ | Free Extents | Free Bytes | +--------------+------------+ | 5207565 | 20830260 | +--------------+------------+ -
在 NDB 8.0.13 之前,表中
FILES为每个 NDB 群集磁盘数据表空间都存在一个附加行。由于它不对应于实际文件,因此在 NDB 8.0.13 中已将其删除。此行具有NULL列的值FILE_NAME,列的值FILE_ID始终为0,FILE_TYPE列的值始终为TABLESPACE,列的 值STATUS始终为NORMAL,列的值ENGINE始终为NDBCLUSTER。在 NDB 8.0.13 及更高版本中,您可以使用ndb_desc 实用程序获取有关磁盘数据表空间的信息。有关更多信息,请参见 第 25.6.11.1 节“NDB 群集磁盘数据对象”以及ndb_desc的描述。
-
有关其他信息以及创建、删除和获取有关 NDB 群集磁盘数据对象的信息的示例,请参见第 25.6.11 节“NDB 群集磁盘数据表”。




