FILES
表提供了有关 MySQL 表空间数据存储在哪些文件中的信息。
FILES
表提供了有关 InnoDB
数据文件的信息。在 NDB Cluster 中,此表还提供了有关存储 NDB Cluster 磁盘数据表的文件的信息。有关 InnoDB
特定的附加信息,请参阅本节后面的 InnoDB 说明;有关 NDB Cluster 特定的附加信息,请参阅 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
:由CREATE LOGFILE GROUP
或ALTER LOGFILE GROUP
创建的撤消日志文件的名称,或由CREATE TABLESPACE
或ALTER TABLESPACE
创建的数据文件的名称。在 NDB 9.0 中,文件名显示为相对路径;对于撤消日志文件,此路径相对于目录
;对于数据文件,它相对于目录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
是撤消表空间文件的类型,这些文件包含撤消记录。对于
NDB
:值UNDO LOG
或DATAFILE
之一。TABLESPACE_NAME
与文件关联的表空间的名称。
对于
InnoDB
:通用表空间名称与创建时指定的名称相同。每个表文件表空间名称显示在以下格式中:
。schema_name
/table_name
InnoDB
系统表空间名称为innodb_system
。全局临时表空间名称为innodb_temporary
。默认撤消表空间名称为innodb_undo_001
和innodb_undo_002
。用户创建的撤消表空间名称与创建时指定的名称相同。TABLE_CATALOG
此值始终为空。
TABLE_SCHEMA
此值始终为
NULL
。TABLE_NAME
此值始终为
NULL
。LOGFILE_GROUP_NAME
对于
InnoDB
:此值始终为NULL
。对于
NDB
:日志文件或数据文件所属的日志文件组的名称。LOGFILE_GROUP_NUMBER
对于
InnoDB
:此值始终为NULL
。对于
NDB
:对于磁盘数据撤消日志文件,日志文件所属的日志文件组的自动生成 ID 号。这与ndbinfo.dict_obj_info
表中显示的id
列值以及ndbinfo.logspaces
和ndbinfo.logspaces
表中显示的log_id
列值相同。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_TABLESPACES
表中检索,其中FILES.FILE_ID = INNODB_TABLESPACES.SPACE
。对于
NDB
:文件区的大小(以字节为单位)。INITIAL_SIZE
对于
InnoDB
:文件的初始大小(以字节为单位)。对于
NDB
:文件的大小(以字节为单位)。这与用于创建文件的CREATE LOGFILE GROUP
、ALTER LOGFILE GROUP
、CREATE TABLESPACE
或ALTER TABLESPACE
语句中的INITIAL_SIZE
子句中使用的值相同。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
:对于撤销日志文件,此列显示撤销日志缓冲区大小;对于数据文件,它始终为 NULL。接下来的几段将提供更详细的说明。NDB
在集群中的每个数据节点上存储每个数据文件和每个撤销日志文件的副本。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 | +--------------------+-----------+--------------------------+
以下注释适用于 InnoDB
数据文件。
FILES
报告的信息是从打开文件的InnoDB
内存缓存中获取的,而INNODB_DATAFILES
从InnoDB
SYS_DATAFILES
内部数据字典表中获取其数据。由
FILES
提供的信息包括全局临时表空间信息,这些信息在InnoDB
SYS_DATAFILES
内部数据字典表中不可用,因此未包含在INNODB_DATAFILES
中。当存在独立的撤销表空间时,
FILES
会显示撤销表空间信息,就像它们在 MySQL 9.0 中默认存在一样。以下查询将返回与
InnoDB
表空间相关的FILES
表的所有信息。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_desc 查看存储在磁盘上的每个NDB
表分配了多少空间,以及在磁盘上该表的数据存储空间中还剩下多少可用空间。FILES
表中包含的大部分信息也可以在ndbinfo
files
表中找到。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
语句中设置区大小。有关更多信息,请参见 第 15.1.21 节,“CREATE TABLESPACE 语句”.您可以使用 ndb_desc 实用程序获取有关磁盘数据表空间的信息。有关更多信息,请参见 第 25.6.11.1 节,“NDB 集群磁盘数据对象”,以及对 ndb_desc 的描述。
有关其他信息以及创建、删除和获取有关 NDB 集群磁盘数据对象的示例,请参见 第 25.6.11 节,“NDB 集群磁盘数据表”.