28.3.15 INFORMATION_SCHEMA FILES 表

  • FILES表仅提供有关磁盘数据文件的信息;您不能使用它来确定单个NDB表的磁盘空间分配或可用性。但是,可以 使用ndb_descNDB查看每个在磁盘上存储数据的表分配了多少空间,以及该表在磁盘上还有多少空间可用于存储数据 。

  • 从 NDB 8.0.29 开始,表中的许多信息 FILES也可以在表中找到 ndbinfo.files

  • CREATION_TIMELAST_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创建日志文件组后,表中会显示一个附加行,其中包含NULLFILE_NAME。在 NDB 8.0.13 及更高版本中,此行(不对应于任何文件)不再显示,需要查询表ndbinfo.logspaces 以获取撤消日志文件使用信息。有关更多信息,请参阅此表的描述以及 第 25.6.11.1 节“NDB 群集磁盘数据对象”。

    本条目中讨论的其余部分仅适用于 NDB 8.0.12 及更早版本。对于具有 NULL列的行FILE_NAME , 列的值FILE_ID始终为FILE_TYPE列的值始终为UNDO LOGSTATUS 列的值始终为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 群集磁盘数据表”。