10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载 本手册节选

26.3.15 INFORMATION_SCHEMA文件表

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

文件表提供有关InnoDB数据文件。在NDB集群中,该表还提供NDB集群磁盘数据表存储的文件信息。具体的附加信息InnoDB,请参阅InnoDB的笔记,在本节的后面;有关NDB集群的其他信息,请参见NDB笔记

文件表有这些列:

  • FILE_ID

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

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

  • FILE_NAME

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

    NDB:用户创建的undo日志文件名创建日志文件组修改日志文件组创建的数据文件的创建表空间修改表空间.在NDB 8.0中,文件名以相对路径显示;对于undo日志文件,此路径相对于目录DataDir/ ndb_NodeId_fs / LG;对于数据文件,它是相对于目录的DataDir/ ndb_NodeId_fs / TS.这意味着,例如,创建的数据文件的名称添加数据文件data_2.dat初始大小为256M显示为。/ data_2.dat

  • FILE_TYPE

    InnoDB:表空间文件类型。有三种可能的文件类型InnoDB文件。表空间是保存表、索引或其他形式的用户数据的任何系统、通用或每表一个文件的表空间文件的文件类型。临时是临时表空间的文件类型。UNDO日志是保存undo记录的undo表空间的文件类型。

    NDB:值之一UNDO日志数据文件.在NDB 8.0.13之前,表空间也是一个可能的值。

  • TABLESPACE_NAME

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

    InnoDB:通用表空间名称与创建时指定的表空间名称一致。每个表文件的表空间名称以以下格式显示:schema_name/table_name.的InnoDB系统表空间名称为innodb_system.全局临时表空间名称为innodb_temporary.默认的undo表空间名称为innodb_undo_001而且innodb_undo_002.用户创建的undo表空间名称与创建时指定的相同。

  • TABLE_CATALOG

    这个值总是空的。

  • TABLE_SCHEMA

    这总是

  • TABLE_NAME

    这总是

  • LOGFILE_GROUP_NAME

    InnoDB:这总是

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

  • LOGFILE_GROUP_NUMBER

    InnoDB:这总是

    NDB:对于“磁盘数据”undo日志文件,为该日志文件所属的日志文件组自动生成的ID号。的值与显示的值相同idndbinfo.dict_obj_info表和log_idndbinfo.logspaces而且ndbinfo.logspaces此撤消日志文件的表。

  • 引擎

    InnoDB: alwaysInnoDB

    NDB: alwaysndbcluster

  • FULLTEXT_KEYS

    这总是

  • DELETED_ROWS

    这总是

  • UPDATE_COUNT

    这总是

  • FREE_EXTENTS

    InnoDB:当前数据文件中完全空闲的区数。

    NDB:文件尚未使用的区数。

  • TOTAL_EXTENTS

    InnoDB:当前数据文件中使用的完整区数。文件末尾的任何部分区段都不计算在内。

    NDB:分配给文件的总区数。

  • EXTENT_SIZE

    InnoDB:对于页面大小为4KB、8KB或16KB的文件,Extent大小为1048576 (1MB)。对于页面大小为32KB的文件,区段大小为2097152字节(2MB),对于页面大小为64KB的文件,区段大小为4194304 (4MB)。文件没有报告InnoDB页面大小。方法定义页面大小innodb_page_size系统变量。的区段大小信息也可以检索INNODB_TABLESPACES表在哪里文件。FILE_ID = INNODB_TABLESPACES。空间

    NDB:文件区大小(以字节为单位)。

  • INITIAL_SIZE

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

    NDB:以字节为单位的文件大小。的值是相同的INITIAL_SIZE条款的创建日志文件组修改日志文件组创建表空间,或修改表空间用于创建文件的语句。

  • MAXIMUM_SIZE

    InnoDB:文件中允许的最大字节数。这个值是对于除预定义的系统表空间数据文件外的所有数据文件。最大系统表空间文件大小由innodb_data_file_path.全局临时表空间文件的最大大小由innodb_temp_data_file_path.一个值表示未显式定义文件大小限制。

    NDB:该值始终与INITIAL_SIZE价值。

  • AUTOEXTEND_SIZE

    表空间的自动扩展大小。为NDBAUTOEXTEND_SIZE总是

  • CREATION_TIME

    这总是

  • LAST_UPDATE_TIME

    这总是

  • LAST_ACCESS_TIME

    这总是

  • RECOVER_TIME

    这总是

  • TRANSACTION_COUNTER

    这总是

  • 版本

    InnoDB:这总是

    NDB:文件的版本号。

  • ROW_FORMAT

    InnoDB:这总是

    NDB之一:固定动态

  • TABLE_ROWS

    这总是

  • AVG_ROW_LENGTH

    这总是

  • DATA_LENGTH

    这总是

  • MAX_DATA_LENGTH

    这总是

  • INDEX_LENGTH

    这总是

  • DATA_FREE

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

    NDB:这总是

  • CREATE_TIME

    这总是

  • UPDATE_TIME

    这总是

  • CHECK_TIME

    这总是

  • 校验和

    这总是

  • 状态

    InnoDB:该值为正常的默认情况下。InnoDB每个表文件的表空间可能会报告进口,表示表空间还不可用。

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

  • 额外的

    InnoDB:这总是

    NDB:(NDB 8.0.15及以上对于undo日志文件,这一列显示了undo日志缓冲区的大小;对于数据文件,总是这样.下面几段将提供更详细的解释。

    NDBCLUSTER在集群中的每个数据节点上存储每个数据文件和每个撤消日志文件的副本。在NDB 8.0.13及以后版本中文件表中每个这样的文件只包含一行。假设您在一个有四个数据节点的NDB集群上运行以下两条语句:

    创建LOGFILE组mygroup添加UNDOFILE 'new_undo.dat' INITIAL_SIZE 2G引擎创建表空间myts添加一个名为data_1.dat的数据文件:

    成功运行这两个语句之后,您应该会看到类似于针对文件表:

    mysql> SELECT LOGFILE_GROUP_NAME, FILE_TYPE, EXTRA -> FROM INFORMATION_SCHEMA。WHERE ENGINE = 'ndbcluster';+--------------------+-----------+--------------------------+ | 额外LOGFILE_GROUP_NAME | FILE_TYPE |  | +--------------------+-----------+--------------------------+ | mygroup | UNDO日志| UNDO_BUFFER_SIZE = 8388608 |组| mygroup功能| | NULL  | +--------------------+-----------+--------------------------+

    日志含义在NDB 8.0.13中无意删除undo日志缓冲区大小信息,但在NDB 8.0.15中恢复。(Bug #92796, Bug #28800252)

    在NDB 8.0.13之前,文件表包含文件所属的每个数据节点上的每个文件的一行,以及它的撤消缓冲区的大小。在这些版本中,相同查询的结果每个数据节点包含一行,如下所示:

    +--------------------+-----------+-----------------------------------------+ | 额外LOGFILE_GROUP_NAME | FILE_TYPE |  | +--------------------+-----------+-----------------------------------------+ | mygroup | UNDO日志| CLUSTER_NODE = 5; UNDO_BUFFER_SIZE = 8388608 |组| mygroup | UNDO日志| CLUSTER_NODE = 6; UNDO_BUFFER_SIZE = 8388608 |组| mygroup | UNDO日志| CLUSTER_NODE = 7; UNDO_BUFFER_SIZE = 8388608 |组| mygroup | UNDO日志| CLUSTER_NODE = 8; UNDO_BUFFER_SIZE = 8388608 |组| mygroup功能| | CLUSTER_NODE = 5 | |组mygroup功能| | CLUSTER_NODE = 6 | | mygroup功能| | CLUSTER_NODE = 7 |组| mygroup功能| | CLUSTER_NODE = 8  | +--------------------+-----------+-----------------------------------------+

笔记

  • 文件是一个非标准的INFORMATION_SCHEMA表格

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

InnoDB的笔记

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

  • 报告的数据文件报道来自InnoDB打开文件的内存缓存。相比之下,INNODB_DATAFILES报告来自InnoDBSYS_DATAFILES内部数据字典表。

  • 报告的数据文件包括全局临时表空间数据。该数据在InnoDBSYS_DATAFILES内部数据字典表,因此不报告INNODB_DATAFILES

  • 所报告的Undo表空间数据文件当单独的undo表空间存在时,这是MySQL 8.0的默认情况

  • 下面的查询返回与。相关的所有数据InnoDB表空间。

    从information_schema中选择file_id、file_name、file_type、tablespace_name、free_extents、total_extents、extent_size、initial_size、maximum_size、autoextend_size、data_free、status。文件引擎= ' InnoDB ' \ G

NDB笔记

  • 文件表提供了磁盘数据的信息文件只有;您不能使用它来确定磁盘空间分配或个人的可用性NDB表。但是,可以看到为每一个分配了多少空间NDB有数据存储在磁盘上的表—以及还有多少数据可以存储在磁盘上供该表使用ndb_desc

  • CREATION_TIMELAST_UPDATE_TIME,LAST_ACCESSED值是由操作系统报告的,而不是由NDB存储引擎。当操作系统没有提供值时,这些列显示

  • 两者之间的区别总区段而且FREE_EXTENTSColumns是文件当前使用的区数:

    从信息模式中选择TOTAL_EXTENTS - FREE_EXTENTS作为extents_using。'./myfile.dat';

    类的值乘以该差值,即可近似计算文件使用的磁盘空间量EXTENT_SIZE列,该列以字节为单位给出文件的区段大小:

    SELECT (TOTAL_EXTENTS - FREE_EXTENTS) * EXTENT_SIZE为信息模式的字节大小。'./myfile.dat';

    类似地,您可以通过相乘来估计给定文件中剩余的可用空间量FREE_EXTENTS通过EXTENT_SIZE

    从信息模式中选择FREE_EXTENTS * EXTENT_SIZE作为bytes_free。'./myfile.dat';
    重要的

    以上查询产生的字节值只是近似值,其精度与的值成反比EXTENT_SIZE.也就是说,更大的EXTENT_SIZE近似越不精确。

    同样重要的是要记住,一旦使用了一个区段,就不能在不删除其组成部分的数据文件的情况下再次释放它。这意味着从“磁盘数据”表中删除的数据将被删除释放磁盘空间。

    中可以设置区段大小创建表空间声明。有关更多信息,请参见第13.1.21节“创建表空间语句”

  • 在NDB 8.0.13之前,在文件表下面创建一个日志文件组,拥有FILE_NAME列。在NDB 8.0.13及以后版本中,这一行——它与任何文件都不对应——不再显示,需要查询ndbinfo.logspaces获取undo日志文件使用情况信息。参见该表的说明以及第23.5.10.1节“NDB集群磁盘数据对象”,以查询更多资料。

    本项目中剩下的讨论只适用于NDB 8.0.12及更早版本。对于有FILE_NAME的值FILE_ID列总是0,即FILE_TYPE列总是UNDO日志,和状态列总是正常的.的值引擎列总是ndbcluster

    FREE_EXTENTS列显示属于给定日志文件组的所有撤消文件可用的空闲区总数,该日志文件组的名称和编号在LOGFILE_GROUP_NAME而且LOGFILE_GROUP_NUMBER分别列。

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

    添加UNDOFILE ' UNDOFILE .dat' INITIAL_SIZE = 16M UNDO_BUFFER_SIZE = 1M ENGINE = NDB;

    你可以看到这个文件表:

    SELECT DISTINCT FILE_NAME为File, FREE_EXTENTS为Free, TOTAL_EXTENTS为Total, EXTENT_SIZE为Size, INITIAL_SIZE为Initial FROM INFORMATION_SCHEMA.FILES;+--------------+---------+---------+------+----------+ | 免费文件| | | |初始大小。总  | +--------------+---------+---------+------+----------+ | undofile.dat零| 4194304 | 4 | 4194304 | |零零| | 4184068 | | 4 |空  | +--------------+---------+---------+------+----------+

    可用于撤消日志记录的空闲区总数总是略小于TOTAL_EXTENTS日志文件组中所有撤消文件的列值,因为维护撤消文件需要开销。可以通过向日志文件组添加第二个undo文件,然后针对文件表:

    mysql> ALTER LOGFILE GROUP lg1 ADD UNDOFILE 'undofile02.dat' INITIAL_SIZE = 4M ENGINE = NDB;SELECT DISTINCT FILE_NAME为File, FREE_EXTENTS为Free, TOTAL_EXTENTS为Total, EXTENT_SIZE为Size, INITIAL_SIZE为Initial FROM INFORMATION_SCHEMA.FILES;+----------------+---------+---------+------+----------+ | 免费文件| | | |初始大小。总  | +----------------+---------+---------+------+----------+ | undofile.dat零| 4194304 | 4 | 4194304 | | | undofile02.dat零| 1048576 | 4 | 1048576 | |零零| | 5223944 | | 4 |空  | +----------------+---------+---------+------+----------+

    使用此日志文件组的磁盘数据表可用于撤销日志记录的空闲空间(以字节为单位)的大小可以用可用区数乘以初始大小近似表示:

    mysql> SELECT FREE_EXTENTS AS 'Free Extents', FREE_EXTENTS * EXTENT_SIZE AS 'Free Bytes' FROM INFORMATION_SCHEMA。LOGFILE_GROUP_NAME = 'lg1'且FILE_NAME为空;+--------------+------------+ | 免费区段|免费字节  | +--------------+------------+ | 5223944 | 5223944  | +--------------+------------+

    如果你创建了一个NDB集群磁盘数据表,然后在其中插入一些行,你可以看到大约有多少空间剩下来撤消日志记录,例如:

    创建表空间ts1添加数据文件组data .dat使用LOGFILE组lg1 INITIAL_SIZE 512M ENGINE = NDB;CREATE TABLE dd (c1 INT NOT NULL PRIMARY KEY, c2 INT, c3 DATE)表空间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。LOGFILE_GROUP_NAME = 'lg1'且FILE_NAME为空;+--------------+------------+ | 免费区段|免费字节  | +--------------+------------+ | 5207565 | 5207565  | +--------------+------------+
  • 在NDB 8.0.13之前,在文件表用于每个NDB集群磁盘数据表空间。因为它不对应于实际的文件,所以在NDB 8.0.13中删除了它。这一行了的值FILE_NAME的值FILE_ID列总是0,即FILE_TYPE列总是表空间,即状态列总是正常的的值引擎列总是NDBCLUSTER

    在NDB 8.0.13及以后版本中,可以通过ndb_desc实用程序。有关更多信息,请参见第23.5.10.1节“NDB集群磁盘数据对象”,以及的描述ndb_desc

  • 有关更多信息,以及创建、删除和获取NDB集群磁盘数据对象信息的示例,请参见第23.5.10节“NDB集群磁盘数据表”