28.3.15 INFORMATION_SCHEMA FILES 表
-
该
FILES
表仅提供有关磁盘数据文件的信息;您不能使用它来确定单个NDB
表的磁盘空间分配或可用性。但是,可以 使用ndb_descNDB
查看每个在磁盘上存储数据的表分配了多少空间,以及该表在磁盘上还有多少空间可用于存储数据 。 -
从 NDB 8.0.29 开始,表中的许多信息
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 8.0.13 之前,
FILES
创建日志文件组后,表中会显示一个附加行,其中包含NULL
列FILE_NAME
。在 NDB 8.0.13 及更高版本中,此行(不对应于任何文件)不再显示,需要查询表ndbinfo.logspaces
以获取撤消日志文件使用信息。有关更多信息,请参阅此表的描述以及 第 25.6.11.1 节“NDB 群集磁盘数据对象”。本条目中讨论的其余部分仅适用于 NDB 8.0.12 及更早版本。对于具有
NULL
列的行FILE_NAME
, 列的值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 群集磁盘数据表,然后向其中插入一些行,则可以大致看到之后还剩下多少用于撤消日志记录的空间,例如:
解释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 8.0.13 之前,表中
FILES
为每个 NDB 群集磁盘数据表空间都存在一个附加行。由于它不对应于实际文件,因此在 NDB 8.0.13 中已将其删除。此行具有NULL
列的值FILE_NAME
,列的值FILE_ID
始终为,
FILE_TYPE
列的值始终为TABLESPACE
,列的 值STATUS
始终为NORMAL
,列的值ENGINE
始终为NDBCLUSTER
。在 NDB 8.0.13 及更高版本中,您可以使用ndb_desc 实用程序获取有关磁盘数据表空间的信息。有关更多信息,请参见 第 25.6.11.1 节“NDB 群集磁盘数据对象”以及ndb_desc的描述。
-
有关其他信息以及创建、删除和获取有关 NDB 群集磁盘数据对象的信息的示例,请参见第 25.6.11 节“NDB 群集磁盘数据表”。