INFORMATION_SCHEMA FILES表说明

mysql官网:https://dev.mysql.com/doc/refman/5.7/en/columns-table.html

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

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

该FILES表包含以下列:

  • FILE_ID

对于InnoDB:表空间ID,也称为space_id或 fil_space_t::id。

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

  • FILE_NAME

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

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

  • FILE_TYPE

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

对于NDB:值之一UNDO LOG,DATAFILE或 TABLESPACE。

  • TABLESPACE_NAME

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

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

  • 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.logspaces以及和 ndbinfo.logspaces表中的列所 显示的值相同 。

  • ENGINE

对于InnoDB:这始终是 InnoDB。

对于NDB:这始终是 ndbcluster。

  • FULLTEXT_KEYS

这是永远的NULL。

  • DELETED_ROWS

这是永远的NULL。

  • UPDATE_COUNT

这是永远的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_SYS_TABLESPACES表中检索范围大小信息FILES.FILE_ID = INNODB_SYS_TABLESPACES.SPACE。

对于NDB:文件范围的大小,以字节为单位。

  • INITIAL_SIZE

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

对于NDB:文件大小,以字节为单位。这是已在使用的值相同 INITIAL_SIZE的条款 CREATE LOGFILE GROUP, ALTER LOGFILE GROUP, CREATE TABLESPACE或 ALTER TABLESPACE用来创建该文件的语句。

  • MAXIMUM_SIZE

对于InnoDB:文件中允许的最大字节数。该值适用NULL 于所有数据文件,但预定义的系统表空间数据文件除外。系统表空间文件的最大大小由定义 innodb_data_file_path。临时表空间的最大文件大小由定义 innodb_temp_data_file_path。甲 NULL对于预定义的系统表空间的数据文件值指示一个文件大小限制没有被明确定义。

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

  • AUTOEXTEND_SIZE

For InnoDB: AUTOEXTEND_SIZE是由innodb_data_file_path系统表空间或由 innodb_temp_data_file_path 临时表空间定义的自动扩展大小 。

对于NDB:这始终是 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:NORMAL默认情况下,此值为 。 InnoDB每表文件表空间可能会报告IMPORTING,这表明该表空间尚不可用。

对于NDB:这始终是 NORMAL。

  • EXTRA

对于InnoDB:这始终是 NULL。

对于NDB:此列显示数据文件或撤消日志文件属于哪个数据节点(每个数据节点都有自己的每个文件副本);对于撤消日志文件,它还显示撤消日志缓冲区的大小。假设您在具有四个数据节点的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 |
+--------------------+-----------+-----------------------------------------+

笔记
FILES是非标准 INFORMATION_SCHEMA表。

  • InnoDB注意事项

以下说明适用于InnoDB数据文件。

报告的数据FILES从InnoDB内存中的高速缓存中报告打开的文件。相比之下, INNODB_SYS_DATAFILES报告来自InnoDB SYS_DATAFILES内部数据字典表的数据。

报告的数据FILES 包括临时表空间数据。该数据在InnoDB SYS_DATAFILES内部数据字典表中不可用,因此不会由报告 INNODB_SYS_DATAFILES。

撤消表空间数据由报告 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注意事项

该FILES表仅提供有关磁盘数据文件的信息。您不能将其用于确定单个NDB表的磁盘空间分配或可用性。但是,可以NDB使用ndb_desc查看为在磁盘上存储数据的每个表分配多少空间 ,以及为该表在磁盘上存储数据的 剩余空间。

的CREATION_TIME, LAST_UPDATE_TIME和 LAST_ACCESSED值作为由操作系统报告,而不是由所提供的 NDB存储引擎。如果操作系统没有提供任何值,则这些列将显示NULL。

TOTAL EXTENTS 和FREE_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_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语句中设置。有关更多信息,请参见 CREATE TABLESPACE语句。

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

将FREE_EXTENTS在此行显示栏可用到属于他的名字和号码显示在一个给定的日志文件组中的所有文件撤消空闲区总数LOGFILE_GROUP_NAME和 LOGFILE_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群集磁盘数据表。

你可能感兴趣的:(mysql)