FILES表
该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
对于
InnoDB
:此值始终为NULL
。对于
NDB
:与文件关联的磁盘数据表的名称(如果有)。LOGFILE_GROUP_NAME
对于
InnoDB
:此值始终为NULL
。对于
NDB
:日志文件或数据文件所属的日志文件组的名称。LOGFILE_GROUP_NUMBER
对于
InnoDB
:此值始终为NULL
。对于
NDB
:对于UNDO
日志文件,该日志文件所属的日志文件组的自动生成的ID号。ENGINE
对于
InnoDB
:此值始终为InnoDB
。对于
NDB
:对于NDB群集磁盘数据日志文件或数据文件,此值始终为NDB
或NDBCLUSTER
。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 GROUP
,ALTER LOGFILE GROUP
,CREATE TABLESPACE
或ALTER TABLESPACE
用来创建该文件的语句。MAXIMUM_SIZE
对于
InnoDB
:文件中允许的最大字节数。该值适用NULL
于除预定义系统表空间数据文件之外的所有数据文件。系统表空间的最大文件大小由定义innodb_data_file_path
。全局临时表空间的最大文件大小由定义innodb_temp_data_file_path
。甲NULL
对于预定义的系统表空间的数据文件值指示一个文件大小限制没有被明确定义。对于
NDB
:对于NDB群集磁盘数据文件,此值始终与该INITIAL_SIZE
值相同。AUTOEXTEND_SIZE
For
InnoDB
:AUTOEXTEND_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
对于
InnoDB
:NORMAL
默认情况下,此值为。InnoDB
每表文件表空间可能会报告IMPORTING
,这表明该表空间尚不可用。对于
NDB
:对于NDB群集磁盘数据文件,该值始终为NORMAL
。EXTRA
对于
InnoDB
:此值始终为NULL
。对于
NDB
:对于NDB群集磁盘数据文件,该EXTRA
列显示文件所属的数据节点(每个数据节点都有自己的副本),以及其撤消缓冲区的大小。假设您在具有四个数据节点的NDB群集上使用此语句:CREATE LOGFILE GROUP mygroupADD UNDOFILE 'new_undo.dat'INITIAL_SIZE 2GENGINE NDB ;CREATE LOGFILE GROUP
成功运行该语句后,您应该看到与针对该FILES
表的此查询类似的结果:mysql>
SELECT LOGFILE_GROUP_NAME, FILE_TYPE, EXTRAFROM INFORMATION_SCHEMA.FILESWHERE 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
数据文件。
- 报告的数据
FILES
从InnoDB
内存中的高速缓存中报告打开的文件。相比之下,INNODB_DATAFILES
报告来自InnoDB
SYS_DATAFILES
内部数据字典表的数据。 - 报告的数据
FILES
包括全局临时表空间数据。该数据在InnoDB
SYS_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.FILESWHERE ENGINE ='InnoDB'\G
NDB注意事项
- 该
FILES
表仅提供有关磁盘数据文件的信息。您不能将其用于确定单个NDB
表的磁盘空间分配或可用性。但是,可以NDB
使用ndb_desc参见为在磁盘上存储数据的每个表分配多少空间,以及为该表在磁盘上存储数据的剩余空间。有关更多信息,请参见“ndb_desc —描述NDB表”。 - 的
CREATION_TIME
,LAST_UPDATE_TIME
和LAST_ACCESSED
值作为由操作系统报告,而不是由所提供的NDB
存储引擎。如果操作系统未提供任何值,则这些列将显示0000-00-00 00:00:00
。 TOTAL EXTENTS
和FREE_EXTENTS
列之间的区别是文件当前正在使用的扩展区数:SELECT TOTAL_EXTENTS - FREE_EXTENTSAS extents_usedFROM INFORMATION_SCHEMA.FILESWHERE FILE_NAME = 'myfile.dat';要估算文件正在使用的磁盘空间量,请将该差值乘以
EXTENT_SIZE
列的值,该值将以字节为单位给出文件范围的大小:SELECT (TOTAL_EXTENTS - FREE_EXTENTS) *EXTENT_SIZE AS bytes_usedFROM INFORMATION_SCHEMA.FILESWHERE FILE_NAME = 'myfile.dat';同样,你可以估算的空间,通过乘以给定文件仍然可用金额
FREE_EXTENTS
由EXTENT_SIZE
:SELECT FREE_EXTENTS *EXTENT_SIZE AS bytes_freeFROM INFORMATION_SCHEMA.FILESWHERE 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_NAME
和LOGFILE_GROUP_NUMBER
分别列。假设您的NDB群集上没有现有的日志文件组,并使用以下语句创建一个:
mysql>
CREATE LOGFILE GROUP lg1ADD UNDOFILE 'undofile.dat'INITIAL_SIZE = 16MUNDO_BUFFER_SIZE = 1MENGINE =NDB ;现在
NULL
查询FILES
表时可以看到以下行:mysql>
SELECT DISTINCT FILE_NAMEAS File , FREE_EXTENTSAS Free, TOTAL_EXTENTSAS Total,EXTENT_SIZE AS Size,INITIAL_SIZE AS InitialFROM 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 lg1ADD UNDOFILE 'undofile02.dat'INITIAL_SIZE = 4MENGINE =NDB ; mysql>SELECT DISTINCT FILE_NAMEAS File , FREE_EXTENTSAS Free, TOTAL_EXTENTSAS Total,EXTENT_SIZE AS Size,INITIAL_SIZE AS InitialFROM 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_EXTENTSAS 'Free Extents', FREE_EXTENTS *EXTENT_SIZE AS 'Free Bytes'FROM INFORMATION_SCHEMA.FILESWHERE LOGFILE_GROUP_NAME = 'lg1' AND FILE_NAME IS NULL; +-------------- +------------ + | Free Extents | Free Bytes | +-------------- +------------ + | 5223944 | 20895776 | +-------------- +------------ +如果创建NDB群集磁盘数据表,然后在其中插入一些行,则可以看到大约剩余的空间可用于以后的撤消日志记录,例如:
mysql>
CREATE TABLESPACE ts1ADD DATAFILE 'data1.dat'USE LOGFILE GROUP lg1INITIAL_SIZE 512MENGINE =NDB ; mysql>CREATE TABLE dd ( c1 INT NOT NULLPRIMARY KEY , c2 INT, c3 DATE )TABLESPACE ts1STORAGE DISK ENGINE =NDB ; mysql>INSERT INTO ddVALUES (NULL, 1234567890, '2007-02-02'), (NULL, 1126789005, '2007-02-03'), (NULL, 1357924680, '2007-02-04'), (NULL, 1642097531, '2007-02-05'); mysql>SELECT FREE_EXTENTSAS 'Free Extents', FREE_EXTENTS *EXTENT_SIZE AS 'Free Bytes'FROM INFORMATION_SCHEMA.FILESWHERE 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群集磁盘数据表”。