28.3.15 INFORMATION_SCHEMA 文件表
FILES 表提供了 MySQL 表空间数据存储在文件中的信息。
FILES 表提供了 InnoDB 数据文件的信息。在 NDB 集群中,这个表还提供了 NDB 集群磁盘数据表存储在文件中的信息。关于 InnoDB 的详细信息,请见InnoDB 注释,在本节后面;关于 NDB 集群的详细信息,请见NDB 注释。
FILES 表具有以下列:
-
FILE_ID
对于 InnoDB:表空间 ID,也称为
space_id
或fil_space_t::id
。对于 NDB:文件标识符。
FILE_ID
列值是自动生成的。 -
FILE_NAME
对于
InnoDB
:数据文件的名称。每个表和通用表空间都有一个.ibd
文件名扩展名。undo 表空间以undo
开头。系统表空间以ibdata
开头。全局临时表空间以ibtmp
开头。文件名包括文件路径,该路径可能是相对于 MySQL 数据目录(datadir
系统变量的值)。对于
NDB
:该文件名是由CREATE LOGFILE GROUP
或ALTER LOGFILE GROUP
创建的undo日志文件,或者由CREATE TABLESPACE
或ALTER TABLESPACE
创建的数据文件。在 NDB 8.4 中,该文件名显示相对路径;对于undo日志文件,这个路径是相对于目录
;对于数据文件,它是相对于目录DataDir
/ndb_NodeId
_fs/LG
。这意味着,例如,使用DataDir
/ndb_NodeId
_fs/TSALTER TABLESPACE ts ADD DATAFILE 'data_2.dat' INITIAL SIZE 256M
创建的数据文件名将显示为./data_2.dat
。 -
FILE_TYPE
对于
InnoDB
:文件类型。对InnoDB
文件有三个可能的文件类型。TABLESPACE
是任何系统、通用或按表文件的文件类型,该文件持有表、索引或其他用户数据形式。TEMPORARY
是临时表空间文件类型。UNDO LOG
是 undo 表空间文件类型,该文件持有undo记录。对于
NDB
:其中之一是UNDO LOG
或DATAFILE
。 -
TABLESPACE_NAME
与文件相关的表空间名称。
对于
InnoDB
:通用表空间名称是创建时指定的。按表文件表空间名称以以下格式显示:
。InnoDB 系统表空间名称为schema_名
/table_名
innodb_系统
。全局临时表空间名称为innodb_临时
。默认 undo 表空间名称为innodb_undo_001
和innodb_undo_002
。用户创建的 undo 表空间名称是创建时指定的。 -
TABLE_CAT
这个值总是为空。
-
TABLE_SCHEMA
总是
NULL
。 -
TABLE_NAME
总是
NULL
。 -
LOGFILE_GROUP_NAME
对于
InnoDB
:总是NULL
。对于
NDB
:日志文件组或数据文件的名称。 -
LOGFILE_ GROUP_NUMBER
对于
InnoDB
:总是为NULL
。对于
NDB
:磁盘数据undo日志文件的自动生成ID号,表示该日志文件所属的日志文件组。这个值与ndbinfo.dict_obj_info
表中的id
列和logspaces
表中的log_id
列相同,为该undo日志文件。 -
ENGINE
对于
InnoDB
:总是为InnoDB
。对于
NDB
:总是为ndbcluster
。 -
FULLTEXT_KEYS
总是为
NULL
。 -
DELETED_ROWS
总是为
NULL
。 -
UPDATE_COUNT
总是为
NULL
。 -
FREE_EXTENTS
对于
InnoDB
:当前数据文件中的完全免费的extent数量。对于
NDB
:未使用的文件extent数量。 -
TOTAL_EXTENTS
对于
InnoDB
:当前数据文件中已使用的完整extent数量。文件末尾的部分extent不被计数。对于
NDB
:文件分配给extent的总数量。 -
EXTENT_SIZE
对于
InnoDB
:extent大小为 1048576 字节(1MB)对于具有 4KB、8KB 或 16KB 页大小的文件。对于具有 32KB 页大小的文件,extent大小为 2097152 字节(2MB),对于具有 64KB 页大小的文件,extent大小为 4194304 字节(4MB)。FILES
不报告InnoDB
页大小。页大小由innodb_page_size
系统变量定义。extent大小信息也可以从INNODB_TABLESPACES
表中获取,其中FILES.FILE_ID = INNODB_TABLESPACES.SPACE
。对于
NDB
:文件extent大小(以字节为单位)。 -
INITIAL_ SIZE
对于
InnoDB
:文件初始大小(以字节为单位)。对于
NDB
:文件大小(以字节为单位)。这与在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
表空间的自动扩展大小。对于
NDB
,AUTOEXTEND__SIZE
总是为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
:对于 NDB 集群磁盘数据文件,这个值始终是NORMAL
。 -
EXTRA
对于
InnoDB
:这始终是NULL
。对于
NDB
:对于undo日志文件,这个列显示undo日志缓冲区大小;对于数据文件,它始终是NULL。下面几段将提供更多详细信息。NDB
在集群中的每个数据节点上存储了每个数据文件和每个undo日志文件的副本。FILES
表包含每个这样的文件的一行记录。假设您在一个由四个数据节点组成的NDB集群上运行以下两个语句:CREATE LOGFILE GROUP mygroup ADD UNDOFILE 'new_undo.dat' INITIAL_SIZE 2G ENGINE NDBCLUSTER; CREATE TABLESPACE myts ADD DATAFILE 'data_1.dat' USE LOGFILE GROUP mygroup INITIAL_SIZE 256M ENGINE NDBCLUSTER;
在成功运行这两个语句后,您应该看到类似于对
FILES
表的查询结果:mysql> SELECT LOGFILE_GROUP_NAME, FILE_TYPE, EXTRA -> FROM INFORMATION_SCHEMA.FILES -> WHERE ENGINE = 'ndbcluster'; +--------------------+-----------+--------------------------+ | LOGFILE_GROUP_NAME | FILE_TYPE | EXTRA | +--------------------+-----------+--------------------------+ | mygroup | UNDO LOG | UNDO_BUFFER_SIZE=8388608 | | mygroup | DATAFILE | NULL | +--------------------+-----------+--------------------------+
-
FILES
是一个非标准的INFORMATION_ SCHEMA表。 -
您必须拥有PROCESS特权,以便查询该表。
以下注意事项适用于InnoDB数据文件。
-
FILES
表中的信息来自InnoDB内存缓存中打开的文件,而INNODB_DATAFILES
则从InnoDB的SYS_DATAFILES内部数据字典表获取数据。 -
FILES
提供的信息包括全局临时表空间信息,这些信息不在InnoDB
SYS_ DATAFILES
内部数据字典表中,因此不包含在INNODB_DATAFILES
中。 -
当存在单独的undo表空间时,
FILES
显示undo表空间信息,这在 MySQL 8.4 中默认情况下是如此。 -
以下查询返回所有
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
表只提供 Disk Data 文件信息,您不能使用它来确定单个NDB
表的磁盘空间分配或可用性。然而,可以使用NDB
表在磁盘上存储数据的总空间和剩余可用空间—以及该表在磁盘上存储数据的总空间和剩余可用空间—使用ndb_desc。 -
FILES
表中的许多信息也可以在ndbinfo
files
表中找到。 -
CREATION_TIME、LAST_UPDATE_TIME和LAST_ACCESSED值来自操作系统报告,且不是
NDB
存储引擎提供的。操作系统未提供值时,这些列将显示NULL
. -
TOTAL EXTENTS和FREE_EXTENTS列之间的差异是文件当前正在使用的extent数量:
SELECT TOTAL_EXTENTS - FREE_EXTENTS AS extents_used FROM INFORMATION_SCHEMA.FILES WHERE FILE_NAME = './myfile.dat';
为了近似地估算文件中磁盘空间的使用量,乘以TOTAL EXTENTS和FREE_EXTENTS之间的差异,以及
EXTENT_SIZE
列中的值,该值表示文件中extent大小(以字节为单位):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';
Important前面的查询结果是近似值,精度与
EXTENT_SIZE
的值成反比。也就是说,EXTENT_SIZE
变得越大,近似值就越不准确。需要注意的是,一旦extent被使用,它不能再次释放除非删除包含其部分的数据文件。这意味着从磁盘数据表中删除记录不会释放磁盘空间。
可以在
CREATE TABLESPACE
语句中设置extent size。更多信息,请见第15.1.21节,“CREATE TABLESPACE 语句”. -
可以使用ndb_desc实用工具获取关于Disk Data表空间的信息。更多信息,请见第25.6.11.1节,“NDB 集群 Disk Data 对象”,以及ndb_desc的描述。
-
对于更多信息和创建、删除和获取NDB 集群 Disk Data 对象的示例,请见第25.6.11节,“NDB 集群 Disk Data 表”。