InnoDB/NDB Clusterストレージエンジンのすべてがわかる!FILES テーブル
MariaDBのINFORMATION_SCHEMAデータベースには、FILESテーブルと呼ばれる特殊なテーブルが存在します。このテーブルは、InnoDBおよびNDB Clusterストレージエンジンで使用されるデータファイルに関するメタデータを格納します。FILESテーブルは、データベース管理者やアプリケーション開発者が、データベースファイルの場所、サイズ、種類、関連するテーブルスペースなどを確認するのに役立ちます。
テーブル構造
FILESテーブルは次のカラムで構成されています。
- LOGFILE_GROUP_NAME: データファイルが属するログファイルグループの名前 (該当する場合)
- TABLE_NAME: データファイルが属するテーブルの名前 (通常は空文字)
- TABLE_SCHEMA: データファイルが属するスキーマの名前 (通常は空文字)
- TABLE_CATALOG: データファイルが属するカタログの名前 (通常は "def" またはデータベース名)
- TABLESPACE_NAME: データファイルが属するテーブルスペースの名前
- FILE_TYPE: データファイルの種類 (例:INNODB DATAFILE、NDB DATAFILEなど)
- FILE_NAME: データファイルのオペレーティングシステムパス名
- FILE_ID: 各データファイルに一意に割り当てられる識別番号
使い方
FILESテーブルは、次のSQLステートメントを使用してクエリできます。
SELECT * FROM INFORMATION_SCHEMA.FILES;
このステートメントは、すべてのデータファイルに関する情報を返します。特定のデータファイルに関する情報のみを取得するには、WHERE句を使用できます。たとえば、特定のテーブルスペースに関連するすべてのデータファイルを取得するには、次のステートメントを使用します。
SELECT * FROM INFORMATION_SCHEMA.FILES
WHERE TABLESPACE_NAME = 'my_tablespace';
例
次の例では、すべてのInnoDBデータファイルのファイル名とテーブルスペース名を表示する方法を示します。
SELECT FILE_NAME, TABLESPACE_NAME
FROM INFORMATION_SCHEMA.FILES
WHERE FILE_TYPE = 'INNODB DATAFILE';
- MySQL 8.0.21以降では、このテーブルをクエリするにはPROCESS権限が必要です。
- FILESテーブルは、非標準のINFORMATION_SCHEMAテーブルです。
すべてのデータファイルのファイル名とテーブルスペース名を表示
SELECT FILE_NAME, TABLESPACE_NAME
FROM INFORMATION_SCHEMA.FILES;
特定のテーブルスペースに関連するすべてのデータファイルの情報を取得
SELECT *
FROM INFORMATION_SCHEMA.FILES
WHERE TABLESPACE_NAME = 'my_tablespace';
特定のファイルIDを持つデータファイルに関する情報を取得
SELECT *
FROM INFORMATION_SCHEMA.FILES
WHERE FILE_ID = 12345;
InnoDBデータファイルのファイルサイズ合計を取得
SELECT SUM(FILE_SIZE) AS TOTAL_SIZE
FROM INFORMATION_SCHEMA.FILES
WHERE FILE_TYPE = 'INNODB DATAFILE';
NDB Clusterデータファイルの最新チェックポイントタイムスタンプを取得
SELECT MAX(CHECKPOINT_AGE) AS LATEST_CHECKPOINT
FROM INFORMATION_SCHEMA.FILES
WHERE FILE_TYPE = 'NDB DATAFILE';
これらの例は、FILESテーブルを使用して取得できる情報のほんの一例です。このテーブルは、データベース管理者やアプリケーション開発者がデータベースファイルに関する詳細な情報を取得するための貴重なリソースとなります。
- MySQL 8.0.21以降では、このテーブルをクエリするにはPROCESS権限が必要です。
- 上記のコードを実行するには、MariaDB 8.0.21以降を使用している必要があります。
- 情報量が少ない: FILES テーブルには、ファイル名、テーブルスペース名、ファイルの種類などの基本的な情報しか含まれていません。
- 権限要件: MySQL 8.0.21 以降では、このテーブルをクエリするには PROCESS 権限が必要です。
- 非標準: FILES テーブルは標準の INFORMATION_SCHEMA テーブルではなく、MySQL 5.7.6 以降でのみ利用可能です。
これらの制限により、FILES テーブルが常に最適なソリューションとは限らない場合があります。代替手段として以下の方法が考えられます。
PERFORMANCE_SCHEMA INNODB_FILE_SUMMARY_V2_STATISTICS テーブル
PERFORMANCE_SCHEMA データベースには、INNODB_FILE_SUMMARY_V2_STATISTICS テーブルという、より詳細なデータファイル情報を提供するテーブルがあります。このテーブルには、ファイルサイズ、I/O 統計、チェックポイント情報など、FILES テーブルにはない情報が含まれています。
SELECT * FROM PERFORMANCE_SCHEMA.INNODB_FILE_SUMMARY_V2_STATISTICS;
SHOW INNODB STATUS コマンド
SHOW INNODB STATUS コマンドは、InnoDBストレージエンジンに関する様々な情報を表示します。この出力には、各データファイルに関する情報が含まれています。
SHOW INNODB STATUS;
パーティション管理ツール
InnoDBおよびNDB Cluster テーブルはパーティション化できます。パーティション管理ツールを使用すると、各パーティションに関する詳細な情報 (ファイル名、サイズ、場所など) を取得できます。
オペレーティングシステムツール
オペレーティングシステムのツールを使用して、ファイルシステム上のデータファイルを調査することもできます。ただし、この方法では、データベース固有の情報は取得できません。
適切な代替手段の選択
最適な代替手段は、特定のニーズによって異なります。詳細なデータファイル情報が必要な場合は、PERFORMANCE_SCHEMA INNODB_FILE_SUMMARY_V2_STATISTICS テーブルを使用するのが良いでしょう。より基本的な情報のみが必要な場合は、SHOW INNODB STATUS コマンドを使用する方が簡単です。パーティション化されたテーブルを扱っている場合は、パーティション管理ツールが役立ちます。
FILES テーブルの使用を検討すべき場合
- 他の方法が複雑すぎる場合
- 基本的なファイル情報のみが必要な場合
- MySQL 5.7.6 より前のバージョンを使用している場合
- パーティション化されたテーブルを扱っている場合
- MySQL 8.0.21 以降を使用している場合
- 詳細なデータファイル情報が必要な場合