# 26.3.15 信息_架构文件表

文件table 提供有关存储 MySQL 表空间数据的文件的信息。

文件表提供有关信息InnoDB数据文件。在 NDB Cluster 中,此表还提供有关存储 NDB Cluster 磁盘数据表的文件的信息。有关特定于InnoDB, 看InnoDB 笔记, 在本节后面;有关特定于 NDB Cluster 的其他信息,请参阅新开发银行笔记.

文件表有这些列:

  • FILE_ID

    为了InnoDB:表空间ID,也称为space_id要么fil_space_t::id.

    为了新开发银行:文件标识符。FILE_ID列值是自动生成的。

  • 文件名

    为了InnoDB:数据文件的名称。File-per-table 和通用表空间有一个.ibd文件扩展名。撤消表空间的前缀为撤消.系统表空间前缀为数据.全局临时表空间前缀为ibtmp.文件名包含文件路径,可能是相对于 MySQL 数据目录的(数据目录系统变量)。

    为了新开发银行:撤消日志文件的名称创建日志文件组要么更改日志文件组,或由创建的数据文件创建表空间要么改变表空间.在 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_001innodb_undo_002.用户创建的撤消表空间名称在创建时指定。

  • 表目录

    此值始终为空。

  • TABLE_SCHEMA

    这总是空值.

  • TABLE_NAME

    这总是空值.

  • LOGFILE_GROUP_NAME

    为了InnoDB: 这总是空值.

    为了新开发银行:日志文件或数据文件所属的日志文件组的名称。

  • LOGFILE_GROUP_NUMBER

    为了InnoDB: 这总是空值.

    为了新开发银行:对于Disk Data undo log文件,该日志文件所属的日志文件组的自动生成的ID号。这与显示的值相同id列中的ndbinfo.dict_obj_info表和log_id列中的ndbinfo.logspacesndbinfo.logspaces此撤消日志文件的表。

  • 引擎

    为了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)。文件不报告InnoDB页面大小。页面大小由innodb_page_size系统变量。范围大小信息也可以从INNODB_TABLESPACES表在哪里FILES.FILE_ID = INNODB_TABLESPACES.SPACE.

    为了新开发银行: 文件范围的大小(以字节为单位)。

  • INITIAL_SIZE

    为了InnoDB:文件的初始大小(以字节为单位)。

    为了新开发银行:文件的大小(以字节为单位)。这与在INITIAL_SIZE的条款创建日志文件组,更改日志文件组,创建表空间, 要么改变表空间用于创建文件的语句。

  • MAXIMUM_SIZE

    为了InnoDB:文件中允许的最大字节数。值为空值除预定义系统表空间数据文件外的所有数据文件。最大系统表空间文件大小由下式定义innodb_data_file_path.最大全局临时表空间文件大小由下式定义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: 这个值是普通的默认。InnoDBfile-per-table 表空间可能会报告输入,表示该表空间尚不可用。

    为了新开发银行:对于 NDB Cluster 磁盘数据文件,此值始终为普通的.

  • 额外的

    为了InnoDB: 这总是空值.

    为了新开发银行: (NDB 8.0.15 及更高版本) 对于撤消日志文件,此列显示撤消日志缓冲区大小;对于数据文件,它总是空值.在接下来的几段中提供了更详细的解释。

    NDBCLUSTER在集群中的每个数据节点上存储每个数据文件和每个撤消日志文件的副本。在 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;
    

    成功运行这两个语句后,您应该会看到类似于此处针对该查询显示的结果文件桌子:

    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桌子。

  • 从 MySQL 8.0.21 开始,您必须拥有过程查询此表的权限。

# InnoDB 笔记

以下注意事项适用于InnoDB数据文件。

  • 报告的信息文件是从InnoDB打开文件的内存缓存,而INNODB_DATAFILESInnoDB SYS_DATAFILES内部数据字典表。

  • 提供的资料文件包括全局临时表空间信息,这些信息在InnoDB SYS_DATAFILES内部数据字典表,因此不包含在INNODB_DATAFILES.

  • 撤消表空间信息显示在文件当存在单独的撤消表空间时,默认情况下它们在 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
    

# 新开发银行笔记

  • 文件表提供有关磁盘数据的信息文件只要;您不能使用它来确定个人的磁盘空间分配或可用性新开发银行表。但是,可以查看为每个分配了多少空间新开发银行具有存储在磁盘上的数据的表 - 以及该表在磁盘上的可用数据存储量 - 使用数据库_描述.

  • 从 NDB 8.0.29 开始,大部分信息在文件表也​​可以在ndbinfo.files桌子。

  • CREATION_TIME,LAST_UPDATE_TIME, 和LAST_ACCESSED值由操作系统报告,而不是由操作系统提供新开发银行存储引擎。如果操作系统未提供任何值,则这些列显示空值.

  • 之间的区别总范围FREE_EXTENTScolumns 是文件当前使用的范围数:

    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变得,近似值越不准确。

    同样重要的是要记住,一旦使用了一个范围,如果不删除它所属的数据文件,就不能再次释放它。这意味着从磁盘数据表中删除不是释放磁盘空间。

    范围大小可以设置为创建表空间陈述。有关详细信息,请参阅第 13.1.21 节,“CREATE TABLESPACE 语句”.

  • 在 NDB 8.0.13 之前,在文件创建日志文件组后的表,具有空值在里面文件名柱子。在 NDB 8.0.13 及更高版本中,该行(不对应任何文件)不再显示,需要查询ndbinfo.logspaces表来获取撤消日志文件的使用信息。请参阅此表的说明以及第 23.6.10.1 节,“NDB Cluster 磁盘数据对象”, 了解更多信息。

    本项目中的其余讨论仅适用于 NDB 8.0.12 及更早版本。对于有的行空值在里面文件名列,的值FILE_ID列总是0, 的文件类型列总是撤消日志,以及状态列总是普通的.的价值引擎列总是ndbcluster.

    FREE_EXTENTS此行中的列显示可用于属于给定日志文件组的所有撤消文件的可用范围总数,其名称和编号显示在LOGFILE_GROUP_NAMELOGFILE_GROUP_NUMBER列,分别。

    假设您的 NDB Cluster 上没有现有的日志文件组,并且您使用以下语句创建一个:

    mysql> CREATE LOGFILE GROUP lg1
             ADD UNDOFILE 'undofile.dat'
             INITIAL_SIZE = 16M
             UNDO_BUFFER_SIZE = 1M
             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 |
    | NULL         | 4184068 |    NULL |    4 |     NULL |
    +--------------+---------+---------+------+----------+
    

    可用于撤消日志记录的空闲范围的总数总是略小于总和TOTAL_EXTENTS由于维护撤消文件所需的开销,日志文件组中所有撤消文件的列值。这可以通过向日志文件组添加第二个撤消文件,然后针对文件桌子:

    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 之前,在文件每个 NDB Cluster 磁盘数据表空间的表。由于它与实际文件不对应,因此在 NDB 8.0.13 中已将其删除。这排有空值的价值文件名列,的值FILE_ID专栏总是0, 的文件类型专栏总是表空间, 的状态专栏总是普通的,以及的值引擎列总是NDBCLUSTER.

    在 NDB 8.0.13 及更高版本中,您可以使用数据库_描述效用。有关详细信息,请参阅第 23.6.10.1 节,“NDB Cluster 磁盘数据对象”,以及描述数据库_描述.

  • 有关 NDB Cluster 磁盘数据对象的其他信息以及创建、删除和获取信息的示例,请参阅第 23.6.10 节,“NDB Cluster 磁盘数据表”.