MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む

このページは機械翻訳したものです。

26.15 INFORMATION_SCHEMA FILES テーブル

FILES テーブルには、MySQL テーブルスペースデータが格納されているファイルに関する情報が表示されます。

FILES テーブルには、InnoDB データファイルに関する情報が表示されます。 NDB Cluster では、このテーブルは「NDB Cluster ディスクデータ」テーブルが格納されているファイルに関する情報も提供します。 InnoDB に固有の追加情報については、このセクションの後半の InnoDB の注意 を参照してください。NDB Cluster に固有の追加情報については、NDB に関する注意事項 を参照してください。

FILES テーブルには、次のカラムがあります:

メモ

  • FILES は非標準の INFORMATION_SCHEMA テーブルです。

  • MySQL 8.0.21 では、このテーブルをクエリーするには PROCESS 権限が必要です。

InnoDB の注意

InnoDB データファイルには、次のノートが適用されます。

  • FILES によってレポートされるデータは、オープンファイルの InnoDB インメモリーキャッシュからレポートされます。 比較すると、INNODB_DATAFILESInnoDB SYS_DATAFILES 内部データディクショナリテーブルのデータをレポートします。

  • FILES によってレポートされるデータには、グローバル一時テーブルスペースデータが含まれます。 このデータは、InnoDB SYS_DATAFILES 内部データディクショナリテーブルでは使用できないため、INNODB_DATAFILES ではレポートされません。

  • undo テーブルスペースデータは、個別の undo テーブルスペースが存在する場合に FILES によってレポートされます。undo テーブルスペースデータは、デフォルトでは MySQL 8.0 にあります

  • 次のクエリーは、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
    

NDB に関する注意事項

  • FILES テーブルには、ディスクデータ files に関する情報のみが表示されます。個々の NDB テーブルのディスク領域割当てまたは可用性の決定には使用できません。 ただし、ndb_desc を使用して、データがディスク上に格納された NDB テーブルごとにどれだけの領域が割り当てられているかとともに、そのテーブルに対しディスク上のデータのストレージに利用できる領域がどれだけ残っているかも表示できます。

  • 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_EXTENTSEXTENT_SIZE とを乗算すると、特定のファイルに利用できる残りの領域の容量を見積もることができます。

    SELECT FREE_EXTENTS * EXTENT_SIZE AS bytes_free
        FROM INFORMATION_SCHEMA.FILES
        WHERE FILE_NAME = './myfile.dat';
    
    重要

    前述のクエリーで生成されたバイト値は概算に過ぎず、その精度は EXTENT_SIZE の値に反比例します。 つまり、EXTENT_SIZE が大きくなれば、概算の精度は低くなります。

    エクステントがいったん使用されると、エクステントが含まれているデータファイルを破棄せずに再度解放することはできません。 これにより、ディスクデータのテーブルからの削除はディスクスペースを解放しないことになります。

    エクステントサイズは CREATE TABLESPACE ステートメントで設定できます。 詳細は、セクション13.1.21「CREATE TABLESPACE ステートメント」を参照してください。

  • NDB 8.0.13 より前では、ログファイルグループの作成後に、FILE_NAME カラムに NULL がある FILES テーブルに追加の行が存在していました。 NDB 8.0.13 以降では、どのファイルにも対応していないこの行は表示されなくなり、ndbinfo.logspaces テーブルをクエリーして undo ログファイルの使用状況情報を取得する必要があります。 詳細は、このテーブルおよび セクション23.5.10.1「NDB Cluster ディスクデータオブジェクト」 の説明を参照してください。

    この項目の残りの説明は NDB 8.0.12 以前にのみ適用されます。 FILE_NAME カラムに NULL がある行では、FILE_ID カラムの値は常に 0 で、FILE_TYPE カラムの値は常に UNDO LOG で、STATUS カラムの値は常に NORMAL です。 ENGINE カラムの値は常に ndbcluster です。

    この行の FREE_EXTENTS カラムには、名前と番号がそれぞれ LOGFILE_GROUP_NAME カラムと LOGFILE_GROUP_NUMBER カラムに表示される特定のログファイルグループに属す、すべての Undo ファイルで利用可能な空きエクステントの合計数が表示されます。

    NDB Cluster に既存のログファイルグループがなく、次のステートメントを使用して作成するとします:

    mysql> CREATE LOGFILE GROUP lg1
             ADD UNDOFILE 'undofile.dat'
             INITIAL_SIZE = 16M
             UNDO_BUFFER_SIZE = 1M
             ENGINE = NDB;
    

    FILES テーブルにクエリーすると、NULL 行が表示されます。

    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 |
    +--------------+---------+---------+------+----------+
    

    Undo ロギングに利用できる空きエクステントの総数は常に、Undo ファイルの維持に必要なオーバーヘッドのために、ログファイルグループ内のすべての Undo ファイルの TOTAL_EXTENTS カラムの値の合計よりもいくぶん少なくなります。 これは、ログファイルグループに 2 番目の Undo ファイルを追加しから、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 |
    +----------------+---------+---------+------+----------+
    

    このログファイルグループを使用したディスクデータテーブルが Undo ロギングに利用できる空き領域の容量 (バイト単位) は、空きエクステントの数と初期サイズとを乗算すると概算できます。

    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 ディスクデータ」テーブルを作成し、そのテーブルにいくつかの行を挿入すると、次の例のように、後で undo ロギング用に残っている領域の量を確認できます:

    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 より前は、「NDB Cluster ディスクデータ」テーブルスペースごとに追加の行が FILES テーブルに存在していました。 実際のファイルに対応していなかったため、NDB 8.0.13 で削除されました。 この行には FILE_NAME カラムの値に対する NULL があり、FILE_ID カラムの値は常に 0 で、FILE_TYPE カラムの値は常に TABLESPACE で、STATUS カラムの値は NORMAL であり、ENGINE カラムの値は常に NDBCLUSTER です。

    NDB 8.0.13 以降では、ndb_desc ユーティリティーを使用して「ディスクデータ」テーブルスペースに関する情報を取得できます。 詳細は、セクション23.5.10.1「NDB Cluster ディスクデータオブジェクト」 および ndb_desc の説明を参照してください。

  • NDB Cluster ディスクデータオブジェクトに関する追加情報および情報の作成、削除、および取得の例については、セクション23.5.10「NDB Cluster ディスクデータテーブル」 を参照してください。