• 首页
  • css3教程
  • html5教程
  • jQuery手册
  • vue手册
  • php手册
  • MySQL手册
  • apache手册
  • redis手册
  • FILES表

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

    FILES表提供有关InnoDB数据文件的信息。在NDB群集中,此表还提供有关存储NDB群集磁盘数据表的文件的信息。有关特定于的其他信息InnoDB,请参阅本节后面的InnoDB Notes。有关NDB群集的特定其他信息,请参见 NDB注释。

    FILES表包含以下列:

    • FILE_ID

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

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

    • FILE_NAME

      对于InnoDB:数据文件的名称。每表文件和常规表空间都有.ibd文件扩展名。撤消表空间的前缀为undo。系统表空间的前缀为ibdata。全局临时表空间的前缀为ibtmp。文件名包括文件路径,该路径可能相对于MySQL数据目录(datadir系统变量的值)。

      对于NDBUNDOCREATE LOGFILE GROUP或创建的日志文件的名称ALTER LOGFILE GROUP,或由CREATE TABLESPACE或创建的数据文件的名称ALTER TABLESPACE

    • FILE_TYPE

      对于InnoDB:表空间文件类型。文件有三种可能的文件类型InnoDBTABLESPACE是保存表,索引或其他形式的用户数据的任何系统,常规或每表文件表空间文件的文件类型。TEMPORARY是临时表空间的文件类型。UNDO LOG是撤消表空间的文件类型,撤消表空间保存撤消记录。

      对于NDB:值之一UNDO LOGDATAFILETABLESPACE

    • TABLESPACE_NAME

      对于InnoDB:表空间的SQL名称。常规表空间名称是SYS_TABLESPACES.NAME值。对于其他表空间文件,名称以开始innodb_,如innodb_systeminnodb_undoinnodb_file_per_table。每表文件表空间名称格式为,其中表空间ID为。innodb_file_per_table_####

      对于NDB:与文件关联的表空间的名称。

    • TABLE_CATALOG

      此值始终为空。

    • TABLE_SCHEMA

      此值始终为NULL

    • TABLE_NAME

      对于InnoDB:此值始终为NULL

      对于NDB:与文件关联的磁盘数据表的名称(如果有)。

    • LOGFILE_GROUP_NAME

      对于InnoDB:此值始终为NULL

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

    • LOGFILE_GROUP_NUMBER

      对于InnoDB:此值始终为NULL

      对于NDB:对于UNDO日志文件,该日志文件所属的日志文件组的自动生成的ID号。

    • ENGINE

      对于InnoDB:此值始终为InnoDB

      对于NDB:对于NDB群集磁盘数据日志文件或数据文件,此值始终为NDBNDBCLUSTER

    • FULLTEXT_KEYS

      对于InnoDB:此值始终为NULL

      对于NDB:对于NDB群集磁盘数据日志文件或数据文件,此值始终为空。

    • DELETED_ROWS

      对于InnoDB:此值始终为NULL

    • UPDATE_COUNT

      对于InnoDB:此值始终为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_TABLESPACES表中检索范围大小信息FILES.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:对于NDB群集磁盘数据文件,此值始终与该INITIAL_SIZE值相同。

    • AUTOEXTEND_SIZE

      For InnoDBAUTOEXTEND_SIZE是由innodb_data_file_path系统表空间或由innodb_temp_data_file_path全局临时表空间定义的自动扩展大小。

      对于NDB:对于NDB群集磁盘数据文件,此值始终为空。

    • CREATION_TIME

      对于InnoDB:此值始终为NULL

      对于NDB:文件创建的日期和时间。

    • LAST_UPDATE_TIME

      对于InnoDB:此值始终为NULL

      对于NDB:上次修改文件的日期和时间。

    • LAST_ACCESS_TIME

      对于InnoDB:此值始终为NULL

      对于NDB:服务器上次访问文件的日期和时间。

    • RECOVER_TIME

      对于InnoDB:此值始终为NULL

      对于NDB:对于NDB群集磁盘数据文件,该值始终为0

    • TRANSACTION_COUNTER

      对于InnoDB:此值始终为NULL

      对于NDB:对于NDB群集磁盘数据文件,该值始终为0

    • VERSION

      对于InnoDB:此值始终为NULL

      对于NDB:对于NDB群集磁盘数据文件,该值始终为NULL

    • ROW_FORMAT

      对于InnoDB:此值始终为NULL

      对于NDB:对于NDB群集磁盘数据文件,该值始终为NULL

    • TABLE_ROWS

      对于InnoDB:此值始终为NULL

      对于NDB:对于NDB群集磁盘数据文件,该值始终为NULL

    • AVG_ROW_LENGTH

      对于InnoDB:此值始终为NULL

      对于NDB:对于NDB群集磁盘数据文件,该值始终为NULL

    • DATA_LENGTH

      对于InnoDB:此值始终为NULL

      对于NDB:对于NDB群集磁盘数据文件,该值始终为NULL

    • MAX_DATA_LENGTH

      对于InnoDB:此值始终为NULL

      对于NDB:对于NDB群集磁盘数据文件,该值始终为NULL

    • INDEX_LENGTH

      对于InnoDB:此值始终为NULL

      对于NDB:对于NDB群集磁盘数据文件,该值始终为NULL

    • DATA_FREE

      对于InnoDB:整个表空间的可用空间总量(以字节为单位)。包括系统表空间和临时表表空间的预定义系统表空间可能具有一个或多个数据文件。

      对于NDB:对于NDB群集磁盘数据文件,该值始终为NULL

    • CREATE_TIME

      对于InnoDB:此值始终为NULL

      对于NDB:对于NDB群集磁盘数据文件,该值始终为NULL

    • UPDATE_TIME

      对于InnoDB:此值始终为NULL

      对于NDB:对于NDB群集磁盘数据文件,该值始终为NULL

    • CHECK_TIME

      对于InnoDB:此值始终为NULL

      对于NDB:对于NDB群集磁盘数据文件,该值始终为NULL

    • CHECKSUM

      对于InnoDB:此值始终为NULL

      对于NDB:对于NDB群集磁盘数据文件,该值始终为NULL

    • STATUS

      对于InnoDBNORMAL默认情况下,此值为。InnoDB每表文件表空间可能会报告IMPORTING,这表明该表空间尚不可用。

      对于NDB:对于NDB群集磁盘数据文件,该值始终为NORMAL

    • EXTRA

      对于InnoDB:此值始终为NULL

      对于NDB:对于NDB群集磁盘数据文件,该EXTRA列显示文件所属的数据节点(每个数据节点都有自己的副本),以及其撤消缓冲区的大小。假设您在具有四个数据节点的NDB群集上使用此语句:

      CREATE LOGFILE GROUP mygroup
          ADD UNDOFILE 'new_undo.dat'
          INITIAL_SIZE 2G
          ENGINE NDB;
      

      CREATE LOGFILE GROUP成功运行该语句后,您应该看到与针对该FILES表的此查询类似的结果:

      mysql> SELECT LOGFILE_GROUP_NAME, FILE_TYPE, EXTRA
               FROM INFORMATION_SCHEMA.FILES
               WHERE FILE_NAME = 'new_undo.dat';
      
      +--------------------	+-----------	+-----------------------------------------	+
      | 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	|
      +--------------------	+-----------	+-----------------------------------------	+
      

      NDB 8.0.15之前的NDB Cluster 8.0中未包含此信息。(缺陷#92796,错误#28800252)

    注意

    • FILES表是非标准INFORMATION_SCHEMA表。

    InnoDB注意事项

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

    • 报告的数据FILESInnoDB内存中的高速缓存中报告打开的文件。相比之下,INNODB_DATAFILES报告来自InnoDBSYS_DATAFILES内部数据字典表的数据。
    • 报告的数据FILES包括全局临时表空间数据。该数据在InnoDBSYS_DATAFILES内部数据字典表中不可用,因此不会由报告INNODB_DATAFILES
    • FILES当存在单独的撤消表空间时,将报告撤消表空间数据,默认情况下,它们在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注意事项

    • FILES表仅提供有关磁盘数据文件的信息。您不能将其用于确定单个NDB表的磁盘空间分配或可用性。但是,可以NDB使用ndb_desc参见为在磁盘上存储数据的每个表分配多少空间,以及为该表在磁盘上存储数据的剩余空间。有关更多信息,请参见“ndb_desc —描述NDB表”。
    • CREATION_TIMELAST_UPDATE_TIMELAST_ACCESSED值作为由操作系统报告,而不是由所提供的NDB存储引擎。如果操作系统未提供任何值,则这些列将显示0000-00-00 00:00:00
    • TOTAL EXTENTSFREE_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_EXTENTSEXTENT_SIZE

      SELECT FREE_EXTENTS * EXTENT_SIZE AS bytes_free
          FROM INFORMATION_SCHEMA.FILES
      WHERE FILE_NAME = 'myfile.dat';
      
      重要

      先前查询产生的字节值仅是近似值,其精度与的值成反比EXTENT_SIZE。即,EXTENT_SIZE变得越大,则近似精度越差。

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

      范围大小可以在CREATE TABLESPACE语句中设置。有关更多信息,请参见“ CREATE TABLESPACE语句”。

    • FILES创建日志文件组后,表中还会出现另一行。该行具有该列NULL的值FILE_NAME。对于此行,FILE_ID列的值始终0为,FILE_TYPE列的值始终UNDO FILE为,STATUS列的值始终为NORMAL。该ENGINE列的值始终为NDBCLUSTER

      FREE_EXTENTS在此行显示栏可用到属于他的名字和号码显示在一个给定的日志文件组中的所有文件撤消空闲区总数LOGFILE_GROUP_NAMELOGFILE_GROUP_NUMBER分别列。

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

      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	|
      +--------------	+------------	+
      
    • FILES无论任何数据文件与表空间相关联,任何NDB群集表空间都在表中附加一行。该行具有该列NULL的值FILE_NAME。对于此行,FILE_ID列的值始终0为,FILE_TYPE列的值始终TABLESPACE为,STATUS列的值始终为NORMAL。该ENGINE列的值始终为NDBCLUSTER
    • 有关其他信息,以及创建和删除NDB群集磁盘数据对象的示例,请参见“ NDB群集磁盘数据表”。