Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

28.3.15 INFORMATION_SCHEMA 文件表

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

FILES 表提供了 InnoDB 数据文件的信息。在 NDB 集群中,这个表还提供了 NDB 集群磁盘数据表存储在文件中的信息。关于 InnoDB 的详细信息,请见InnoDB 注释,在本节后面;关于 NDB 集群的详细信息,请见NDB 注释

FILES 表具有以下列:

  • FILE_ID

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

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

  • FILE_NAME

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

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

    对于 NDB:其中之一是 UNDO LOGDATAFILE

  • TABLESPACE_NAME

    与文件相关的表空间名称。

    对于 InnoDB:通用表空间名称是创建时指定的。按表文件表空间名称以以下格式显示:schema_名/table_名。InnoDB 系统表空间名称为 innodb_系统。全局临时表空间名称为 innodb_临时。默认 undo 表空间名称为 innodb_undo_001innodb_undo_002。用户创建的 undo 表空间名称是创建时指定的。

  • TABLE_CAT

    这个值总是为空。

  • TABLE_SCHEMA

    总是 NULL

  • TABLE_NAME

    总是 NULL

  • LOGFILE_GROUP_NAME

    对于 InnoDB:总是 NULL

    对于 NDB:日志文件组或数据文件的名称。

  • LOGFILE_ GROUP_NUMBER

    对于 InnoDB:总是为 NULL

    对于 NDB:磁盘数据undo日志文件的自动生成ID号,表示该日志文件所属的日志文件组。这个值与ndbinfo.dict_obj_info表中的id列和logspaces表中的log_id列相同,为该undo日志文件。

  • 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 页大小的文件。对于具有 32KB 页大小的文件,extent大小为 2097152 字节(2MB),对于具有 64KB 页大小的文件,extent大小为 4194304 字节(4MB)。FILES 不报告 InnoDB 页大小。页大小由innodb_page_size 系统变量定义。extent大小信息也可以从INNODB_TABLESPACES 表中获取,其中 FILES.FILE_ID = INNODB_TABLESPACES.SPACE

    对于 NDB:文件extent大小(以字节为单位)。

  • INITIAL_ SIZE

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

    对于 NDB:文件大小(以字节为单位)。这与在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: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:默认情况下,这个值为NORMALInnoDB文件表空间可能报告IMPORTING

    对于NDB:对于 NDB 集群磁盘数据文件,这个值始终是NORMAL

  • EXTRA

    对于InnoDB:这始终是NULL

    对于NDB:对于undo日志文件,这个列显示undo日志缓冲区大小;对于数据文件,它始终是NULL。下面几段将提供更多详细信息。

    NDB 在集群中的每个数据节点上存储了每个数据文件和每个undo日志文件的副本。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 则从InnoDBSYS_DATAFILES内部数据字典表获取数据。

  • FILES 提供的信息包括全局临时表空间信息,这些信息不在 InnoDB SYS_ DATAFILES 内部数据字典表中,因此不包含在INNODB_DATAFILES 中。

  • 当存在单独的undo表空间时,FILES 显示undo表空间信息,这在 MySQL 8.4 中默认情况下是如此。

  • 以下查询返回所有 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 表只提供 Disk Data 文件信息,您不能使用它来确定单个 NDB 表的磁盘空间分配或可用性。然而,可以使用NDB 表在磁盘上存储数据的总空间和剩余可用空间—以及该表在磁盘上存储数据的总空间和剩余可用空间—使用ndb_desc

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

  • CREATION_TIME、LAST_UPDATE_TIME和LAST_ACCESSED值来自操作系统报告,且不是NDB存储引擎提供的。操作系统未提供值时,这些列将显示NULL.

  • TOTAL EXTENTS和FREE_EXTENTS列之间的差异是文件当前正在使用的extent数量:

    SELECT TOTAL_EXTENTS - FREE_EXTENTS AS extents_used
        FROM INFORMATION_SCHEMA.FILES
        WHERE FILE_NAME = './myfile.dat';

    为了近似地估算文件中磁盘空间的使用量,乘以TOTAL EXTENTS和FREE_EXTENTS之间的差异,以及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被使用,它不能再次释放除非删除包含其部分的数据文件。这意味着从磁盘数据表中删除记录不会释放磁盘空间。

    可以在CREATE TABLESPACE语句中设置extent size。更多信息,请见第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 表”