### 26.3.15 信息\_架构文件表 [](<>)[](<>) 这`文件`table 提供有关存储 MySQL 表空间数据的文件的信息。 这`文件`表提供有关信息`InnoDB`数据文件。在 NDB Cluster 中,此表还提供有关存储 NDB Cluster 磁盘数据表的文件的信息。有关特定于`InnoDB`, 看[InnoDB 笔记](information-schema-files-table.html#files-table-innodb-notes), 在本节后面;有关特定于 NDB Cluster 的其他信息,请参阅[新开发银行笔记](information-schema-files-table.html#files-table-ndb-notes). 这`文件`表有这些列: - `FILE_ID` 为了`InnoDB`:表空间ID,也称为`space_id`要么`fil_space_t::id`. 为了`新开发银行`:文件标识符。`FILE_ID`列值是自动生成的。 - `文件名` 为了`InnoDB`:数据文件的名称。File-per-table 和通用表空间有一个`.ibd`文件扩展名。撤消表空间的前缀为`撤消`.系统表空间前缀为`数据`.全局临时表空间前缀为`ibtmp`.文件名包含文件路径,可能是相对于 MySQL 数据目录的([`数据目录`](server-system-variables.html#sysvar_datadir)系统变量)。 为了`新开发银行`:撤消日志文件的名称[`创建日志文件组`](create-logfile-group.html)要么[`更改日志文件组`](alter-logfile-group.html),或由创建的数据文件[`创建表空间`](create-tablespace.html)要么[`改变表空间`](alter-tablespace.html).在 NDB 8.0 中,文件名以相对路径显示;对于撤消日志文件,此路径是相对于目录的`[`数据目录`](mysql-cluster-ndbd-definition.html#ndbparam-ndbd-datadir)/ndb_[`节点 ID`](mysql-cluster-ndbd-definition.html#ndbparam-ndbd-nodeid)_fs/LG`;对于数据文件,它是相对于目录的`[`数据目录`](mysql-cluster-ndbd-definition.html#ndbparam-ndbd-datadir)/ndb_[`节点 ID`](mysql-cluster-ndbd-definition.html#ndbparam-ndbd-nodeid)_fs/TS`.这意味着,例如,使用创建的数据文件的名称`ALTER TABLESPACE ts ADD DATAFILE 'data_2.dat' 初始大小 256M`显示为`./data_2.dat`. - `文件类型` 为了`InnoDB`:表空间文件类型。有三种可能的文件类型`InnoDB`文件。`表空间`是保存表、索引或其他形式的用户数据的任何系统、通用或每表文件表空间文件的文件类型。`暂时的`是临时表空间的文件类型。`撤消日志`是撤销表空间的文件类型,它保存撤销记录。 为了`新开发银行`: 值之一`撤消日志`要么`数据文件`.在 NDB 8.0.13 之前,`表空间`也是一个可能的值。 - `TABLESPACE_NAME` 与文件关联的表空间的名称。 为了`InnoDB`:一般表空间名称在创建时指定。File-per-table 表空间名称以下列格式显示:`*`模式名称`*/*`表名`*`.这`InnoDB`系统表空间名称是`innodb_system`.全局临时表空间名称是`innodb_temporary`.默认撤消表空间名称是`innodb_undo_001`和`innodb_undo_002`.用户创建的撤消表空间名称在创建时指定。 - `表目录` 此值始终为空。 - `TABLE_SCHEMA` 这总是`空值`. - `TABLE_NAME` 这总是`空值`. - `LOGFILE_GROUP_NAME` 为了`InnoDB`: 这总是`空值`. 为了`新开发银行`:日志文件或数据文件所属的日志文件组的名称。 - `LOGFILE_GROUP_NUMBER` 为了`InnoDB`: 这总是`空值`. 为了`新开发银行`:对于Disk Data undo log文件,该日志文件所属的日志文件组的自动生成的ID号。这与显示的值相同`id`列中的[`ndbinfo.dict_obj_info`](mysql-cluster-ndbinfo-dict-obj-info.html)表和`log_id`列中的[`ndbinfo.logspaces`](mysql-cluster-ndbinfo-logspaces.html)和[`ndbinfo.logspaces`](mysql-cluster-ndbinfo-logspaces.html)此撤消日志文件的表。 - `引擎` 为了`InnoDB`: 这个值总是`InnoDB`. 为了`新开发银行`: 这个值总是`ndbcluster`. - `FULLTEXT_KEYS` 这总是`空值`. - `DELETED_ROWS` 这总是`空值`. - `UPDATE_COUNT` 这总是`空值`. - `FREE_EXTENTS` 为了`InnoDB`:当前数据文件中完全空闲的区数。 为了`新开发银行`:文件尚未使用的盘区数。 - `TOTAL_EXTENTS` 为了`InnoDB`:当前数据文件中使用的全盘区数。不计算文件末尾的任何部分范围。 为了`新开发银行`: 分配给文件的盘区总数。 - `EXTENT_SIZE` 为了`InnoDB`:对于页面大小为 4KB、8KB 或 16KB 的文件,范围大小为 1048576 (1MB)。对于页面大小为 32KB 的文件,范围大小为 2097152 字节 (2MB),对于页面大小为 64KB 的文件,范围大小为 4194304 (4MB)。[`文件`](information-schema-files-table.html)不报告`InnoDB`页面大小。页面大小由[`innodb_page_size`](innodb-parameters.html#sysvar_innodb_page_size)系统变量。范围大小信息也可以从[`INNODB_TABLESPACES`](information-schema-innodb-tablespaces-table.html)表在哪里`FILES.FILE_ID = INNODB_TABLESPACES.SPACE`. 为了`新开发银行`: 文件范围的大小(以字节为单位)。 - `INITIAL_SIZE` 为了`InnoDB`:文件的初始大小(以字节为单位)。 为了`新开发银行`:文件的大小(以字节为单位)。这与在`INITIAL_SIZE`的条款[`创建日志文件组`](create-logfile-group.html),[`更改日志文件组`](alter-logfile-group.html),[`创建表空间`](create-tablespace.html), 要么[`改变表空间`](alter-tablespace.html)用于创建文件的语句。 - `MAXIMUM_SIZE` 为了`InnoDB`:文件中允许的最大字节数。值为`空值`除预定义系统表空间数据文件外的所有数据文件。最大系统表空间文件大小由下式定义[`innodb_data_file_path`](innodb-parameters.html#sysvar_innodb_data_file_path).最大全局临时表空间文件大小由下式定义[`innodb_temp_data_file_path`](innodb-parameters.html#sysvar_innodb_temp_data_file_path).一种`空值`预定义系统表空间数据文件的值表示未明确定义文件大小限制。 为了`新开发银行`:此值始终与`INITIAL_SIZE`价值。 - `AUTOEXTEND_SIZE` 表空间的自动扩展大小。为了`新开发银行`,`AUTOEXTEND_SIZE`总是`空值`. - `CREATION_TIME` 这总是`空值`. - `LAST_UPDATE_TIME` 这总是`空值`. - `LAST_ACCESS_TIME` 这总是`空值`. - `RECOVER_TIME` 这总是`空值`. - `TRANSACTION_COUNTER` 这总是`空值`. - `版本` 为了`InnoDB`: 这总是`空值`. 为了`新开发银行`: 文件的版本号。 - `ROW_FORMAT` 为了`InnoDB`: 这总是`空值`. 为了`新开发银行`: 之一`固定的`要么`动态的`. - `TABLE_ROWS` 这总是`空值`. - `AVG_ROW_LENGTH` 这总是`空值`. - `DATA_LENGTH` 这总是`空值`. - `MAX_DATA_LENGTH` 这总是`空值`. - `INDEX_LENGTH` 这总是`空值`. - `DATA_FREE` 为了`InnoDB`:整个表空间的可用空间总量(以字节为单位)。预定义的系统表空间,包括系统表空间和临时表表空间,可能有一个或多个数据文件。 为了`新开发银行`: 这总是`空值`. - `CREATE_TIME` 这总是`空值`. - `更新时间` 这总是`空值`. - `CHECK_TIME` 这总是`空值`. - `校验和` 这总是`空值`. - `状态` 为了`InnoDB`: 这个值是`普通的`默认。`InnoDB`file-per-table 表空间可能会报告`输入`,表示该表空间尚不可用。 为了`新开发银行`:对于 NDB Cluster 磁盘数据文件,此值始终为`普通的`. - `额外的` 为了`InnoDB`: 这总是`空值`. 为了`新开发银行`: (*NDB 8.0.15 及更高版本*) 对于撤消日志文件,此列显示撤消日志缓冲区大小;对于数据文件,它总是*空值*.在接下来的几段中提供了更详细的解释。 [`NDBCLUSTER`](mysql-cluster.html)在集群中的每个数据节点上存储每个数据文件和每个撤消日志文件的副本。在 NDB 8.0.13 及更高版本中,`文件`表中每个此类文件仅包含一行。假设您在具有四个数据节点的 NDB Cluster 上运行以下两条语句: ``` 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; ``` 成功运行这两个语句后,您应该会看到类似于此处针对该查询显示的结果[`文件`](information-schema-files-table.html)桌子: ``` 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 中恢复。(错误 #92796、错误 #28800252) 在 NDB 8.0.13 之前,`文件`表包含文件所属的每个数据节点上的每个文件的一行,以及其撤消缓冲区的大小。在这些版本中,同一查询的结果每个数据节点包含一行,如下所示: ``` +--------------------+-----------+-----------------------------------------+ | 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 | +--------------------+-----------+-----------------------------------------+ ``` #### 笔记 - [`文件`](information-schema-files-table.html)是一个非标准`INFORMATION_SCHEMA`桌子。 - 从 MySQL 8.0.21 开始,您必须拥有[`过程`](privileges-provided.html#priv_process)查询此表的权限。 #### InnoDB 笔记 以下注意事项适用于`InnoDB`数据文件。 - 报告的信息`文件`是从`InnoDB`打开文件的内存缓存,而[`INNODB_DATAFILES`](information-schema-innodb-datafiles-table.html)从`InnoDB` `SYS_DATAFILES`内部数据字典表。 - 提供的资料`文件`包括全局临时表空间信息,这些信息在`InnoDB` `SYS_DATAFILES`内部数据字典表,因此不包含在[`INNODB_DATAFILES`](information-schema-innodb-datafiles-table.html). - 撤消表空间信息显示在`文件`当存在单独的撤消表空间时,默认情况下它们在 MySQL 8.0 中。 - 以下查询返回所有`文件`表相关信息`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 ``` #### 新开发银行笔记 - 这`文件`表提供有关磁盘数据的信息*文件*只要;您不能使用它来确定个人的磁盘空间分配或可用性`新开发银行`表。但是,可以查看为每个分配了多少空间[`新开发银行`](mysql-cluster.html)具有存储在磁盘上的数据的表 - 以及该表在磁盘上的可用数据存储量 - 使用[**数据库\_描述**](mysql-cluster-programs-ndb-desc.html). - 从 NDB 8.0.29 开始,大部分信息在`文件`表也​​可以在[`ndbinfo.files`](mysql-cluster-ndbinfo-files.html)桌子。 - 这`CREATION_TIME`,`LAST_UPDATE_TIME`, 和`LAST_ACCESSED`值由操作系统报告,而不是由操作系统提供[`新开发银行`](mysql-cluster.html)存储引擎。如果操作系统未提供任何值,则这些列显示`空值`. - 之间的区别`总范围`和`FREE_EXTENTS`columns 是文件当前使用的范围数: ``` 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.html)陈述。有关详细信息,请参阅[第 13.1.21 节,“CREATE TABLESPACE 语句”](create-tablespace.html). - 在 NDB 8.0.13 之前,在[`文件`](information-schema-files-table.html)创建日志文件组后的表,具有`空值`在里面`文件名`柱子。在 NDB 8.0.13 及更高版本中,该行(不对应任何文件)不再显示,需要查询[`ndbinfo.logspaces`](mysql-cluster-ndbinfo-logspaces.html)表来获取撤消日志文件的使用信息。请参阅此表的说明以及[第 23.6.10.1 节,“NDB Cluster 磁盘数据对象”](mysql-cluster-disk-data-objects.html), 了解更多信息。 本项目中的其余讨论仅适用于 NDB 8.0.12 及更早版本。对于有的行`空值`在里面`文件名`列,的值`FILE_ID`列总是`0`, 的`文件类型`列总是`撤消日志`,以及`状态`列总是`普通的`.的价值`引擎`列总是`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; ``` 你现在可以看到这个`空值`查询时的行[`文件`](information-schema-files-table.html)桌子: ``` 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`由于维护撤消文件所需的开销,日志文件组中所有撤消文件的列值。这可以通过向日志文件组添加第二个撤消文件,然后针对[`文件`](information-schema-files-table.html)桌子: ``` 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 Cluster 磁盘数据表,然后在其中插入一些行,您可以看到之后大约有多少空间用于撤消日志记录,例如: ``` 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 之前,在[`文件`](information-schema-files-table.html)每个 NDB Cluster 磁盘数据表空间的表。由于它与实际文件不对应,因此在 NDB 8.0.13 中已将其删除。这排有`空值`的价值`文件名`列,的值`FILE_ID`专栏总是`0`, 的`文件类型`专栏总是`表空间`, 的`状态`专栏总是`普通的`,以及的值`引擎`列总是[`NDBCLUSTER`](mysql-cluster.html). 在 NDB 8.0.13 及更高版本中,您可以使用[**数据库\_描述**](mysql-cluster-programs-ndb-desc.html)效用。有关详细信息,请参阅[第 23.6.10.1 节,“NDB Cluster 磁盘数据对象”](mysql-cluster-disk-data-objects.html),以及描述[**数据库\_描述**](mysql-cluster-programs-ndb-desc.html). - 有关 NDB Cluster 磁盘数据对象的其他信息以及创建、删除和获取信息的示例,请参阅[第 23.6.10 节,“NDB Cluster 磁盘数据表”](mysql-cluster-disk-data.html).