该FILES表提供有关NDB
存储 MySQL 磁盘数据表的文件的信息。
该FILES表有以下列:
FILE_ID文件标识符。
FILE_ID列值是自动生成的。FILE_NAME由或
UNDO创建的日志文件 的名称,或由或创建的数据文件的名称。CREATE LOGFILE GROUPALTER LOGFILE GROUPCREATE TABLESPACEALTER TABLESPACEFILE_TYPE值
UNDO LOG、DATAFILE或之一TABLESPACE。TABLESPACE_NAME与文件关联的表空间的名称。
TABLE_CATALOG该值始终为空。
TABLE_SCHEMA该值始终为
NULL.TABLE_NAME与文件关联的磁盘数据表的名称(如果有)。
LOGFILE_GROUP_NAME日志文件或数据文件所属的日志文件组的名称。
LOGFILE_GROUP_NUMBER对于
UNDO日志文件,自动生成的日志文件所属的日志文件组的ID号。ENGINE对于 NDB Cluster Disk Data 日志文件或数据文件,此值始终
NDB或NDBCLUSTER.FULLTEXT_KEYS对于 NDB Cluster Disk Data 日志文件或数据文件,此值始终为空。
DELETED_ROWS该值始终为
NULL.UPDATE_COUNT该值始终为
NULL.FREE_EXTENTS文件尚未使用的区数。
TOTAL_EXTENTS分配给文件的区总数。
EXTENT_SIZE文件范围的大小(以字节为单位)。
INITIAL_SIZE文件的大小(以字节为单位)。这与用于创建文件 的, , , or 语句的
INITIAL_SIZE子句中 使用的值相同。CREATE LOGFILE GROUPALTER LOGFILE GROUPCREATE TABLESPACEALTER TABLESPACEMAXIMUM_SIZE对于 NDB Cluster 磁盘数据文件,此值始终与
INITIAL_SIZEvalue 相同。AUTOEXTEND_SIZE对于 NDB Cluster 磁盘数据文件,此值始终为空。
CREATION_TIME创建文件的日期和时间。
LAST_UPDATE_TIME上次修改文件的日期和时间。
LAST_ACCESS_TIME服务器上次访问文件的日期和时间。
RECOVER_TIME对于 NDB Cluster 磁盘数据文件,此值始终为
0.TRANSACTION_COUNTER对于 NDB Cluster 磁盘数据文件,此值始终为
0.VERSION对于 NDB Cluster 磁盘数据文件,此值始终为
NULL.ROW_FORMAT对于 NDB Cluster 磁盘数据文件,此值始终为
NULL.TABLE_ROWS对于 NDB Cluster 磁盘数据文件,此值始终为
NULL.AVG_ROW_LENGTH对于 NDB Cluster 磁盘数据文件,此值始终为
NULL.DATA_LENGTH对于 NDB Cluster 磁盘数据文件,此值始终为
NULL.MAX_DATA_LENGTH对于 NDB Cluster 磁盘数据文件,此值始终为
NULL.INDEX_LENGTH对于 NDB Cluster 磁盘数据文件,此值始终为
NULL.DATA_FREE对于 NDB Cluster 磁盘数据文件,此值始终为
NULL.CREATE_TIME对于 NDB Cluster 磁盘数据文件,此值始终为
NULL.UPDATE_TIME对于 NDB Cluster 磁盘数据文件,此值始终为
NULL.CHECK_TIME对于 NDB Cluster 磁盘数据文件,此值始终为
NULL.CHECKSUM对于 NDB Cluster 磁盘数据文件,此值始终为
NULL.STATUS对于 NDB Cluster 磁盘数据文件,此值始终为
NORMAL.EXTRA对于 NDB Cluster Disk Data 文件,该
EXTRA列显示文件属于哪个数据节点(每个数据节点都有自己的副本),以及其撤消缓冲区的大小。假设您在具有四个数据节点的 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表。
此表仅提供有关磁盘数据 文件的信息;您不能使用它来确定单个
NDB表的磁盘空间分配或可用性。但是,可以使用ndb_descNDB查看为每个将数据存储在磁盘上的表 分配了多少空间 ,以及该表的磁盘上剩余多少空间可用于存储数据。有关更多信息,请参阅 第 18.5.10 节,“ndb_desc — 描述 NDB 表”。、和 值由操作系统报告,而不是由
CREATION_TIME存储 引擎提供。如果操作系统未提供任何值,这些列将显示。LAST_UPDATE_TIMELAST_ACCESSEDNDB0000-00-00 00:00:00TOTAL 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.18 节,“CREATE TABLESPACE 语句”。FILES创建日志文件组后,表 中会出现额外的一行 。此行具有 列NULL的值FILE_NAME。对于这一行,列的值FILE_ID总是0,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时看到这一行:FILESmysql> 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 磁盘数据对象的示例,请参阅 第 18.6.11 节,“NDB Cluster 磁盘数据表”。