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

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

13.1.21 CREATE TABLESPACE ステートメント

CREATE [UNDO] TABLESPACE tablespace_name

  InnoDB and NDB:
    [ADD DATAFILE 'file_name']
    [AUTOEXTEND_SIZE [=] value]

  InnoDB only:
    [FILE_BLOCK_SIZE = value]
    [ENCRYPTION [=] {'Y' | 'N'}]

  NDB only:
    USE LOGFILE GROUP logfile_group
    [EXTENT_SIZE [=] extent_size]
    [INITIAL_SIZE [=] initial_size]
    [MAX_SIZE [=] max_size]
    [NODEGROUP [=] nodegroup_id]
    [WAIT]
    [COMMENT [=] 'string']

  InnoDB and NDB:
    [ENGINE [=] engine_name]

  Reserved for future use:
    [ENGINE_ATTRIBUTE [=] 'string']
 

このステートメントは、テーブルスペースの作成に使用されます。 正確な構文とセマンティクスは、使用されるストレージエンジンによって異なります。 標準の MySQL リリースでは、これは常に InnoDB テーブルスペースです。 MySQL NDB Cluster は、NDB ストレージエンジンを使用したテーブルスペースもサポートしています。

InnoDB に関する考慮事項

CREATE TABLESPACE 構文は、一般的なテーブルスペースまたは undo テーブルスペースの作成に使用されます。 undo テーブルスペースを作成するには、MySQL 8.0.14 で導入された UNDO キーワードを指定する必要があります。

一般的なテーブルスペースは共有テーブルスペースです。 複数のテーブルを保持でき、すべてのテーブルの行フォーマットをサポートします。 一般テーブルスペースは、データディレクトリに対して相対的または独立した場所に作成できます。

InnoDB の一般テーブルスペースを作成した後、CREATE TABLE tbl_name ... TABLESPACE [=] tablespace_name または ALTER TABLE tbl_name TABLESPACE [=] tablespace_name を使用してテーブルスペースにテーブルを追加します。 詳細は、セクション15.6.3.3「一般テーブルスペース」を参照してください。

undo テーブルスペースには undo ログが含まれます。 undo テーブルスペースは、完全修飾データファイルパスを指定することで、選択した場所に作成できます。 詳細は、セクション15.6.3.4「undo テーブルスペース」を参照してください。

NDB Cluster に関する考慮事項

このステートメントは、テーブルスペースを作成するために使用します。このテーブルスペースには、「NDB Cluster ディスクデータ」テーブルの記憶領域を提供するデータファイルを 1 つ以上含めることができます (セクション23.5.10「NDB Cluster ディスクデータテーブル」 を参照)。 このステートメントを使用して 1 つのデータファイルが作成され、テーブルスペースに追加されます。 ALTER TABLESPACE ステートメントを使用して、テーブルスペースにデータファイルを追加できます (セクション13.1.10「ALTER TABLESPACE ステートメント」を参照してください)。

注記

NDB Cluster ディスクデータオブジェクトはすべて同じ名前空間を共有します。 つまり、各ディスクデータオブジェクトは (単に、特定の型の各ディスクデータオブジェクトというだけでなく)、一意の名前が付けられている必要があります。 たとえば、テーブルスペースとログファイルグループを同じ名前にしたり、テーブルスペースとデータファイルを同じ名前にしたりすることはできません。

作成されるテーブルスペースには、USE LOGFILE GROUP 句を使用して、1 つ以上の UNDO ログファイルのログファイルグループを割り当てる必要があります。logfile_group は、CREATE LOGFILE GROUP で作成された既存のログファイルグループである必要があります (セクション13.1.16「CREATE LOGFILE GROUP ステートメント」を参照してください)。 複数のテーブルスペースが UNDO ロギングのために同じログファイルグループを使用できます。

EXTENT_SIZE または INITIAL_SIZE を設定する場合は、my.cnf で使用されているものと同様に、数値の後に一文字の略称を付けることもできます。 一般に、これは M (M バイト) または G (G バイト) のどちらかの文字です。

INITIAL_SIZE および EXTENT_SIZE は、次のように丸められます:

注記

NDB は、データノードの再起動操作のためにテーブルスペースの 4% を予約します。 この予約済領域は、データ記憶域には使用できません。

今説明した丸めは明示的に実行され、このような丸めのいずれかが実行された場合は MySQL Server によって警告が発行されます。 丸められた値はまた、INFORMATION_SCHEMA.FILES カラム値の計算やその他の目的のために、NDB カーネルでも使用されます。 ただし、予期しない結果が発生しないようにするために、これらのオプションの指定では常に 32K の整数倍を使用することをお勧めします。

CREATE TABLESPACEENGINE [=] NDB とともに使用すると、各クラスタデータノードにテーブルスペースおよび関連するデータファイルが作成されます。 INFORMATION_SCHEMA.FILES テーブルをクエリーすることによって、データファイルが作成されたことを確認したり、それらに関する情報を取得したりできます。 (このセクションの後半の例を参照してください。)

(セクション26.15「INFORMATION_SCHEMA FILES テーブル」を参照してください。)

オプション

メモ

InnoDB の例

この例では、一般的なテーブルスペースを作成し、異なる行形式の 3 つの非圧縮テーブルを追加する方法を示します。

mysql> CREATE TABLESPACE `ts1` ADD DATAFILE 'ts1.ibd' ENGINE=INNODB;

mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY) TABLESPACE ts1 ROW_FORMAT=REDUNDANT;

mysql> CREATE TABLE t2 (c1 INT PRIMARY KEY) TABLESPACE ts1 ROW_FORMAT=COMPACT;

mysql> CREATE TABLE t3 (c1 INT PRIMARY KEY) TABLESPACE ts1 ROW_FORMAT=DYNAMIC;

この例では、一般的なテーブルスペースを作成し、圧縮テーブルを追加する方法を示します。 この例では、デフォルトの innodb_page_size 値が 16K であると想定しています。 8192 の FILE_BLOCK_SIZE では、圧縮テーブルの KEY_BLOCK_SIZE が 8 である必要があります。

mysql> CREATE TABLESPACE `ts2` ADD DATAFILE 'ts2.ibd' FILE_BLOCK_SIZE = 8192 Engine=InnoDB;

mysql> CREATE TABLE t4 (c1 INT PRIMARY KEY) TABLESPACE ts2 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;

この例では、MySQL 8.0.14 の時点でオプションの ADD DATAFILE 句を指定せずに一般的なテーブルスペースを作成する方法を示します。

mysql> CREATE TABLESPACE `ts3` ENGINE=INNODB;

この例では、undo テーブルスペースの作成方法を示します。

mysql> CREATE UNDO TABLESPACE undo_003 ADD DATAFILE 'undo_003.ibu';

NDB の例

mydata-1.dat という名前のデータファイルを使用して、myts という名前の「NDB Cluster ディスクデータ」テーブルスペースを作成するとします。 NDB テーブルスペースでは、常に 1 つ以上の undo ログファイルで構成されるログファイルグループを使用する必要があります。 この例では、まず、次に示す CREATE LOGFILE GROUP ステートメントを使用して、myundo-1.dat という名前の undo ログファイルを含む mylg という名前のログファイルグループを作成します:

mysql> CREATE LOGFILE GROUP myg1
    ->     ADD UNDOFILE 'myundo-1.dat'
    ->     ENGINE=NDB;
Query OK, 0 rows affected (3.29 sec)

これで、次のステートメントを使用して、前述のテーブルスペースを作成できます:

mysql> CREATE TABLESPACE myts
    ->     ADD DATAFILE 'mydata-1.dat'
    ->     USE LOGFILE GROUP mylg
    ->     ENGINE=NDB;
Query OK, 0 rows affected (2.98 sec)

次に示すように、TABLESPACE および STORAGE DISK オプションを指定した CREATE TABLE ステートメントを使用して、「ディスクデータ」テーブルを作成できるようになりました:

mysql> CREATE TABLE mytable (
    ->     id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ->     lname VARCHAR(50) NOT NULL,
    ->     fname VARCHAR(50) NOT NULL,
    ->     dob DATE NOT NULL,
    ->     joined DATE NOT NULL,
    ->     INDEX(last_name, first_name)
    -> )
    ->     TABLESPACE myts STORAGE DISK
    ->     ENGINE=NDB;
Query OK, 0 rows affected (1.41 sec)

idlname および fname カラムはすべてインデックス付けされているため、実際には mytabledob および joined カラムのみがディスクに格納されることに注意してください。

前述のように、CREATE TABLESPACEENGINE [=] NDB とともに使用すると、テーブルスペースおよび関連するデータファイルが NDB Cluster データノードごとに作成されます。 次に示すように、INFORMATION_SCHEMA.FILES テーブルをクエリーして、データファイルが作成されたことを確認し、その情報を取得できます:

mysql> SELECT FILE_NAME, FILE_TYPE, LOGFILE_GROUP_NAME, STATUS, EXTRA
    ->     FROM INFORMATION_SCHEMA.FILES
    ->     WHERE TABLESPACE_NAME = 'myts';

+--------------+------------+--------------------+--------+----------------+
| file_name    | file_type  | logfile_group_name | status | extra          |
+--------------+------------+--------------------+--------+----------------+
| mydata-1.dat | DATAFILE   | mylg               | NORMAL | CLUSTER_NODE=5 |
| mydata-1.dat | DATAFILE   | mylg               | NORMAL | CLUSTER_NODE=6 |
| NULL         | TABLESPACE | mylg               | NORMAL | NULL           |
+--------------+------------+--------------------+--------+----------------+
3 rows in set (0.01 sec)

追加情報および例については、セクション23.5.10.1「NDB Cluster ディスクデータオブジェクト」を参照してください。