Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  The INFORMATION_SCHEMA FILES Table

28.3.15 INFORMATION_SCHEMA FILES 表

FILES 表提供了 MySQL 表空间数据存储的文件信息。

FILES 表提供了 InnoDB 数据文件的信息。在 NDB Cluster 中,该表还提供了 NDB Cluster Disk Data 表的文件信息。有关 InnoDB 的更多信息,请参阅 InnoDB Notes;有关 NDB Cluster 的更多信息,请参阅 NDB Notes

FILES 表具有以下列:

  • FILE_ID

    对于 InnoDB:表空间 ID,也称为 space_idfil_space_t::id

    对于 NDB:文件标识符。FILE_ID 列值是自动生成的。

  • FILE_NAME

    对于 InnoDB:数据文件的名称。每个表的文件和通用表空间都有一个 .ibd 文件扩展名。撤销表空间以 undo 开头。系统表空间以 ibdata 开头。全局临时表空间以 ibtmp 开头。文件名包括文件路径,该路径可能相对于 MySQL 数据目录(datadir 系统变量的值)。

    对于 NDB:由 CREATE LOGFILE GROUPALTER LOGFILE GROUP 创建的撤销日志文件的名称,或者由 CREATE TABLESPACEALTER TABLESPACE 创建的数据文件的名称。在 NDB 8.3 中,文件名显示相对路径;对于撤销日志文件,该路径相对于目录 DataDir/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:表空间文件类型。有三种可能的文件类型:TABLESPACE 是任何系统、通用或每个表表空间文件的文件类型,该文件持有表、索引或其他形式的用户数据。TEMPORARY 是临时表空间的文件类型。UNDO LOG 是撤销表空间的文件类型,该表空间持有撤销记录。

    对于 NDB:其中之一的值 UNDO LOGDATAFILE

  • TABLESPACE_NAME

    与该文件关联的表空间的名称。

    对于 InnoDB:通用表空间名称是在创建时指定的。每个表的表空间名称以以下格式显示:schema_name/table_nameInnoDB 系统表空间名称为 innodb_system。全局临时表空间名称为 innodb_temporary。默认撤销表空间名称为 innodb_undo_001innodb_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:当前数据文件中的完全免费 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 GROUPALTER LOGFILE GROUPCREATE TABLESPACEALTER TABLESPACE 语句中创建文件时使用的值。

  • MAXIMUM_SIZE

    对于 InnoDB:文件允许的最大字节数。该值为 NULL,除非是预定义的系统表空间数据文件。最大系统表空间文件大小由 innodb_data_file_path 定义。最大全局临时表空间文件大小由 innodb_temp_data_file_path 定义。NULL 值表示文件大小限制未明确定义。

    对于 NDB:该值始终与 INITIAL_SIZE 值相同。

  • AUTOEXTEND_SIZE

    表空间的自动扩展大小。对于 NDBAUTOEXTEND_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:其中之一 FIXEDDYNAMIC

  • 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:该值默认为 NORMALInnoDB 文件-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                     |
    +--------------------+-----------+--------------------------+

注意

  • FILES 是一个非标准的 INFORMATION_SCHEMA 表。

  • 您必须拥有 PROCESS 权限来查询该表。

InnoDB 注意

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

  • FILES 报告的信息来自 InnoDB 内存缓存中的打开文件,而 INNODB_DATAFILESInnoDB 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

NDB 注释

  • The FILES 表提供了关于磁盘数据 文件 的信息;您不能使用它来确定磁盘空间分配或可用性对于单个 NDB 表。然而,可以使用 NDB 查看每个表在磁盘上的空间分配情况,以及可用存储空间—使用 ndb_desc

  • 大多数 FILES 表中的信息也可以在 ndbinfo files 表中找到。

  • The CREATION_TIMELAST_UPDATE_TIMELAST_ACCESSED 值是由操作系统报告的,不是由 NDB 存储引擎提供的。在操作系统未提供值的情况下,这些列将显示 NULL

  • The difference between the TOTAL EXTENTSFREE_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_EXTENTSEXTENT_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 表”