MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  INFORMATION_SCHEMA テーブル  /  INFORMATION_SCHEMA FILES テーブル

26.15 INFORMATION_SCHEMA FILES テーブル

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

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

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

  • FILE_ID

    InnoDB の場合: space_id または fil_space_t::id とも呼ばれるテーブルスペース ID。

    NDB の場合: ファイル識別子。 FILE_ID カラムの値は自動生成されます。

  • FILE_NAME

    InnoDB の場合: データファイルの名前。 File-per-table および general テーブルスペースには、.ibd ファイル名拡張子が付いています。 undo テーブルスペースには、接頭辞として undo が付きます。 システムテーブルスペースには、接頭辞として ibdata が付きます。 グローバル一時テーブルスペースには、接頭辞として ibtmp が付きます。 ファイル名にはファイルパスが含まれており、これは MySQL データディレクトリ (datadir システム変数の値) に対して相対的である可能性があります。

    NDB の場合: CREATE LOGFILE GROUP または ALTER LOGFILE GROUP によって作成された undo ログファイル、あるいは CREATE TABLESPACE または ALTER TABLESPACE によって作成されたデータファイルの名前。 NDB 8.0 では、ファイル名は相対パスで表示されます。undo ログファイルの場合、このパスはディレクトリ DataDir/ndb_NodeId_fs/LG を基準とした相対パスで、データファイルの場合はディレクトリ DataDir/ndb_NodeId_fs/TS を基準とした相対パスです。 これは、たとえば、ALTER TABLESPACE ts ADD DATAFILE 'data_2.dat' INITIAL SIZE 256M で作成されたデータファイルの名前が ./data_2.dat として表示されることを意味します。

  • FILE_TYPE

    InnoDB の場合: テーブルスペースのファイルタイプ。 InnoDB ファイルには、3 つのファイルタイプがあります。 TABLESPACE は、テーブル、インデックスまたはその他の形式のユーザーデータを保持するシステムテーブルスペースファイル、一般テーブルスペースファイルまたはファイルごとのテーブルスペースファイルのファイルタイプです。 TEMPORARY は、一時テーブルスペースのファイルタイプです。 UNDO LOG は、undo レコードを保持する undo テーブルスペースのファイルタイプです。

    NDB の場合: UNDO LOG または DATAFILE のいずれかの値。 NDB 8.0.13 より前では、TABLESPACE も可能な値でした。

  • TABLESPACE_NAME

    ファイルが関連付けられているテーブルスペースの名前。

    InnoDB の場合: 一般的なテーブルスペース名は、作成時に指定したとおりです。 テーブルごとのファイルテーブルスペース名は、次の形式で表示されます: schema_name/table_nameInnoDB システムのテーブルスペース名は innodb_system です。 グローバル一時テーブルスペース名は innodb_temporary です。 デフォルトの UNDO テーブルスペース名は、innodb_undo_001 および innodb_undo_002 です。 ユーザーが作成した UNDO テーブルスペースの名前は、作成時に指定したとおりです。

  • TABLE_CATALOG

    この値は常に空です。

  • TABLE_SCHEMA

    これは常に NULL です。

  • TABLE_NAME

    これは常に NULL です。

  • LOGFILE_GROUP_NAME

    InnoDB の場合: これは常に NULL です。

    NDB の場合: ログファイルまたはデータファイルが属するログファイルグループの名前。

  • LOGFILE_GROUP_NUMBER

    InnoDB の場合: これは常に NULL です。

    NDB の場合: ディスクデータ undo ログファイルの場合、ログファイルが属するログファイルグループの自動生成された ID 番号。 これは、この undo ログファイルの 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 システム変数によって定義されます。 エクステントサイズ情報は、FILES.FILE_ID = INNODB_TABLESPACES.SPACE が存在する INNODB_TABLESPACES テーブルから取得することもできます。

    NDB の場合: ファイルのエクステントのサイズ (バイト単位)。

  • INITIAL_SIZE

    InnoDB の場合: ファイルの初期サイズ (バイト単位)。

    NDB の場合: ファイルのサイズ (バイト単位)。 これは、ファイルの作成に使用された CREATE LOGFILE GROUPALTER LOGFILE GROUPCREATE 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 の場合: テーブルスペース全体の空き領域の合計量 (バイト)。 システムテーブルスペースおよび一時テーブルのテーブルスペースを含む事前定義済のシステムテーブルスペースには、1 つ以上のデータファイルを含めることができます。

    NDB の場合: これは常に NULL です。

  • CREATE_TIME

    これは常に NULL です。

  • UPDATE_TIME

    これは常に NULL です。

  • CHECK_TIME

    これは常に NULL です。

  • CHECKSUM

    これは常に NULL です。

  • STATUS

    InnoDB の場合: デフォルトでは、この値は NORMAL です。 InnoDB file-per-table テーブルスペースは、テーブルスペースがまだ使用できないことを示す IMPORTING を報告する場合があります。

    NDB の場合: NDB Cluster ディスクデータファイルの場合、この値は常に NORMAL です。

  • EXTRA

    InnoDB の場合: これは常に NULL です。

    NDB の場合: (NDB 8.0.15 以降) undo ログファイルの場合、このカラムには undo ログバッファサイズが表示され、データファイルの場合は常に NULL になります。 詳細は、次のいくつかの段落で説明します。

    NDBCLUSTER では、各データファイルと各 undo ログファイルのコピーがクラスタ内の各データノードに格納されます。 NDB 8.0.13 以降では、FILES テーブルにはそのようなファイルごとに 1 つの行のみが含まれます。 4 つのデータノードを持つ NDB Cluster で次の 2 つのステートメントを実行するとします:

    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;

    これら 2 つのステートメントを正常に実行すると、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                     |
    +--------------------+-----------+--------------------------+

    undo ログバッファーサイズ情報が NDB 8.0.13 で誤って削除されましたが、NDB 8.0.15 で復元されました。 (Bug #92796、Bug #28800252)

    NDB 8.0.13 より前では、FILES テーブルには、ファイルが属する各データノード上のこれらの各ファイルの行と、その Undo バッファーのサイズが含まれていました。 これらのバージョンでは、次に示すように、同じクエリーの結果にデータノードごとに 1 つの行が含まれます:

    +--------------------+-----------+-----------------------------------------+
    | 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 |
    | mygroup            | DATAFILE  | CLUSTER_NODE=5                          |
    | mygroup            | DATAFILE  | CLUSTER_NODE=6                          |
    | mygroup            | DATAFILE  | CLUSTER_NODE=7                          |
    | mygroup            | DATAFILE  | CLUSTER_NODE=8                          |
    +--------------------+-----------+-----------------------------------------+

メモ

  • 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 ディスクデータテーブル」 を参照してください。


関連キーワード:  テーブル, SCHEMA, INFORMATION, NDB, INNODB, InnoDB, スペース, SIZE, FILES, FILE