该FILES
表提供了有关存储 MySQL 表空间数据的文件的信息。
该FILES
表提供有关InnoDB
数据文件的信息。在 NDB Cluster 中,此表还提供有关存储 NDB Cluster 磁盘数据表的文件的信息。有关特定于 的其他信息InnoDB
,请参阅
本节后面的InnoDB 注释;有关特定于 NDB Cluster 的其他信息,请参阅
NDB Notes。
该FILES
表有以下列:
FILE_ID
For
InnoDB
:表空间 ID,也称为space_id
orfil_space_t::id
。对于
NDB
:文件标识符。FILE_ID
列值是自动生成的。FILE_NAME
For
InnoDB
: 数据文件的名称。File-per-table 和 general 表空间有一个.ibd
文件扩展名。撤消表空间以undo
. 系统表空间以ibdata
. 临时表空间以ibtmp
. 文件名包含文件路径,可能是相对于MySQL数据目录(datadir
系统变量的值)。For
NDB
:由 or 创建的日志文件的名称 ,UNDO
或由 or创建的数据文件的名称。CREATE LOGFILE GROUP
ALTER LOGFILE GROUP
CREATE TABLESPACE
ALTER TABLESPACE
FILE_TYPE
对于
InnoDB
:表空间文件类型。文件有三种可能的文件类型InnoDB
。TABLESPACE
是保存表、索引或其他形式的用户数据的任何系统文件、通用文件或 file-per-table 表空间文件的文件类型。TEMPORARY
是临时表空间的文件类型。UNDO LOG
是撤消表空间的文件类型,它保存撤消记录。对于
NDB
:值之一UNDO LOG
,,DATAFILE
或TABLESPACE
。TABLESPACE_NAME
与文件关联的表空间的名称。
TABLE_CATALOG
该值始终为空。
TABLE_SCHEMA
这总是
NULL
。TABLE_NAME
这总是
NULL
。LOGFILE_GROUP_NAME
对于
InnoDB
:这总是NULL
。For
NDB
:日志文件或数据文件所属的日志文件组的名称。LOGFILE_GROUP_NUMBER
对于
InnoDB
:这总是NULL
。For
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
For
InnoDB
:当前数据文件中完全空闲的区数。For
NDB
:文件尚未使用的范围数。TOTAL_EXTENTS
For
InnoDB
:当前数据文件中使用的完整范围数。不计算文件末尾的任何部分范围。For
NDB
:分配给文件的盘区总数。EXTENT_SIZE
对于
InnoDB
:对于页面大小为 4KB、8KB 或 16KB 的文件,扩展区大小为 1048576 (1MB)。对于页面大小为 32KB 的文件,扩展区大小为 2097152 字节 (2MB),对于页面大小为 64KB 的文件,扩展区大小为 4194304 (4MB)。FILES
不报告InnoDB
页面大小。页面大小由innodb_page_size
系统变量定义。也可以从INNODB_SYS_TABLESPACES
表 where中检索范围大小信息FILES.FILE_ID = INNODB_SYS_TABLESPACES.SPACE
。For
NDB
:文件范围的大小(以字节为单位)。INITIAL_SIZE
For
InnoDB
:文件的初始大小(以字节为单位)。For
NDB
:文件的大小(以字节为单位)。这与用于创建文件 的, , , or 语句的INITIAL_SIZE
子句中 使用的值相同 。CREATE LOGFILE GROUP
ALTER LOGFILE GROUP
CREATE TABLESPACE
ALTER TABLESPACE
MAXIMUM_SIZE
For
InnoDB
:文件中允许的最大字节数。该值NULL
适用于除预定义系统表空间数据文件之外的所有数据文件。最大系统表空间文件大小由innodb_data_file_path
. 最大临时表空间文件大小由innodb_temp_data_file_path
. 预定义系统表空间数据文件的NULL
值表示未明确定义文件大小限制。For
NDB
:此值始终与INITIAL_SIZE
值相同。AUTOEXTEND_SIZE
表空间的自动扩展大小。对于
NDB
,AUTOEXTEND_SIZE
总是NULL
。CREATION_TIME
这总是
NULL
。LAST_UPDATE_TIME
这总是
NULL
。LAST_ACCESS_TIME
这总是
NULL
。RECOVER_TIME
这总是
NULL
。TRANSACTION_COUNTER
这总是
NULL
。VERSION
对于
InnoDB
:这总是NULL
。For
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
For
InnoDB
:整个表空间的可用空间总量(以字节为单位)。预定义的系统表空间,包括系统表空间和临时表表空间,可能有一个或多个数据文件。对于
NDB
:这总是NULL
。CREATE_TIME
这总是
NULL
。UPDATE_TIME
这总是
NULL
。CHECK_TIME
这总是
NULL
。CHECKSUM
这总是
NULL
。STATUS
对于
InnoDB
:此值为NORMAL
默认值。InnoDB
file-per-table tablespaces 可能会报告IMPORTING
,这表明该表空间尚不可用。对于
NDB
:这总是NORMAL
。EXTRA
对于
InnoDB
:这总是NULL
。For
NDB
:这一列显示了数据文件或undo log文件属于哪个数据节点(每个数据节点都有自己的每个文件副本);对于撤消日志文件,它还显示撤消日志缓冲区的大小。假设您在具有四个数据节点的 NDB Cluster 上使用此语句: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
数据文件。
报告的数据
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
该
FILES
表仅提供有关磁盘数据文件的信息;您不能使用它来确定单个NDB
表的磁盘空间分配或可用性。但是,可以使用ndb_descNDB
查看为每个将数据存储在磁盘上的表 分配了多少空间 ,以及该表的磁盘上剩余多少空间可用于存储数据。、和 值由操作系统报告,而不是由
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
变得越大,近似值就越不准确。同样重要的是要记住,一旦使用了一个盘区,如果不删除它所属的数据文件,就不能再次释放它。这意味着从磁盘数据表中删除不会释放磁盘空间。
extent 大小可以在
CREATE TABLESPACE
语句中设置。有关详细信息,请参阅 第 13.1.19 节,“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 Cluster 上没有现有的日志文件组,并且您使用以下语句创建一个:
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 Cluster Disk Data 表,然后向其中插入一些行,您可以看到大约还有多少空间用于之后的撤消日志记录,例如:
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 | +--------------+------------+
对于任何 NDB Cluster 表空间,表中都存在一个附加行
FILES
,无论是否有任何数据文件与该表空间关联。此行具有列的NULL
值,FILE_NAME
列的值FILE_ID
始终为0
。列中显示的值FILE_TYPE
始终为TABLESPACE
,而STATUS
列中的值始终为NORMAL
。此行的ENGINE
列值始终为ndbcluster
。有关其他信息以及创建和删除 NDB Cluster 磁盘数据对象的示例,请参阅 第 21.6.11 节,“NDB Cluster 磁盘数据表”。
从 MySQL 5.7.31 开始,您必须具有
PROCESS
查询此表的权限。