MySQL Cluster ディスクデータストレージは、いくつかのディスクデータオブジェクトを使用して実装されます。これらには、次のものが含まれます。
テーブルスペースは、その他のディスクデータオブジェクト用のコンテナとして機能します。
Undo ログファイルは、トランザクションをロールバックするために必要な情報を元に戻します。
1 つ以上の Undo ログファイルがログファイルグループに割り当てられ、ログファイルグループはテーブルスペースに割り当てられます。
データファイルには、ディスクデータテーブルデータが格納されます。データファイルは、テーブルスペースに直接割り当てられます。
Undo ログファイルおよびデータファイルは、各データノードのファイルシステム内にある実際のファイルです。デフォルトでは、MySQL Cluster config.ini
ファイルに指定された DataDir
の ndb_
に配置されます。ここで、node_id
_fsnode_id
はデータノードのノード ID です。Undo ログファイルまたはデータファイルの作成時に、ファイル名の一部として絶対パスまたは相対パスを指定すると、これらを別の場所に配置できます。これらのファイルを作成するステートメントは、このセクションの後半で示します。
MySQL Cluster のテーブルスペースおよびログファイルグループは、ファイルとして実装されていません。
すべてのディスクデータオブジェクトがファイルとして実装されるとはかぎりませんが、すべてが同じ名前空間を共有します。つまり、各ディスクデータオブジェクトは (単に、特定の型の各ディスクデータオブジェクトというだけでなく)、一意の名前が付けられている必要があります。たとえば、テーブルスペースとログファイルグループの両方に dd1
という名前を付けることはできません。
すべてのノード (管理ノードと SQL ノードを含む) を含む MySQL Cluster をすでに作成していると仮定すると、ディスク上に MySQL Cluster テーブルを作成するための基本ステップは次のとおりです。
-
ログファイルグループを作成し、それに 1 つ以上の Undo ログファイルを割り当てます (Undo ログファイルは、undofile と呼ばれることもあります)。
注記Undo ログファイルは、ディスクデータテーブルでのみ必要です。メモリー内にのみ格納される
NDBCLUSTER
テーブルでは使用されません。 テーブルスペースを作成し、そのテーブルスペースにログファイルグループおよび 1 つ以上のデータファイルを割り当てます。
データストレージ用に、このテーブルスペースを使用するディスクデータテーブルを作成します。
これらの各タスクは、次の例に示すように、mysql クライアントまたはその他の MySQL クライアントアプリケーションで SQL ステートメントを使用することで実現できます。
-
CREATE LOGFILE GROUP
を使用して、lg_1
という名前のログファイルグループを作成します。このログファイルグループは、undo_1.log
およびundo_2.log
という名前の 2 つの Undo ログファイルで構成されます。初期サイズは、それぞれ 16M バイトと 12M バイトです。(Undo ログファイルのデフォルト初期サイズは128M バイトです。)オプションで、ログファイルグループの Undo バッファーのサイズを指定したり、デフォルト値の 8M バイトになることを許可したりすることもできます。この例では、Undo バッファーのサイズを 2 M バイトに設定しています。ログファイルグループは、Undo ログファイルとともに作成する必要があります。そのため、次のCREATE LOGFILE GROUP
ステートメントでundo_1.log
をlg_1
に追加しています。CREATE LOGFILE GROUP lg_1 ADD UNDOFILE 'undo_1.log' INITIAL_SIZE 16M UNDO_BUFFER_SIZE 2M ENGINE NDBCLUSTER;
ログファイルグループに
undo_2.log
を追加するには、次のALTER LOGFILE GROUP
ステートメントを使用します。ALTER LOGFILE GROUP lg_1 ADD UNDOFILE 'undo_2.log' INITIAL_SIZE 12M ENGINE NDBCLUSTER;
いくつかの注意事項:
ここで使用される
.log
ファイル拡張子は必須ではありません。これは単に、ログファイルを簡単に認識できるようにするために使用しています。-
すべての
CREATE LOGFILE GROUP
およびALTER LOGFILE GROUP
ステートメントにはENGINE
句を含める必要があります。MySQL Cluster NDB 7.3 以降では、この句に許可される値はNDBCLUSTER
とNDB
だけです。重要特定の時点で同じ MySQL Cluster には、最大でも 1 つのログファイルグループしか存在できません。
ADD UNDOFILE '
を使用して、ログファイルグループに Undo ログファイルを追加すると、クラスタ内の各データノードのfilename
'DataDir
内にあるndb_
ディレクトリに、node_id
_fsfilename
という名前のファイルが作成されます。ここで、node_id
はデータノードのノード ID です。各 Undo ログファイルのサイズは、SQL ステートメントで指定されます。たとえば、MySQL Cluster に 4 つのデータノードが含まれている場合、ここで示したALTER LOGFILE GROUP
ステートメントは 4 つの Undo ログファイル (4 つの各データノードのデータディレクトリに 1 つずつ) を作成します。これらの各ファイルの名前はundo_2.log
であり、各ファイルのサイズは 12M バイトです。UNDO_BUFFER_SIZE
は、使用可能なシステムメモリーの量によって制限されます。CREATE LOGFILE GROUP
ステートメントの詳細は、セクション13.1.14「CREATE LOGFILE GROUP 構文」を参照してください。ALTER LOGFILE GROUP
の詳細は、セクション13.1.3「ALTER LOGFILE GROUP 構文」を参照してください。
-
この時点で、データを格納するために MySQL Cluster ディスクデータテーブルで使用されるファイルを格納するテーブルスペースを作成できます。テーブルスペースは、特定のログファイルのグループにも関連付けられます。新しいテーブルスペースを作成する際は、Undo ロギングで使用されるログファイルグループを指定する必要があります。データファイルも指定する必要があります。テーブルスペースが作成されたら、追加のデータファイルをテーブルスペースに追加できます。テーブルスペースからデータファイルを削除することもできます (データファイルを削除する例については、このセクションの後半で説明しています)。
ログファイルグループとして
lg_1
を使用するts_1
という名前のテーブルスペースを作成すると仮定します。このテーブルスペースには、data_1.dat
およびdata_2.dat
という名前で、初期サイズがそれぞれ 32 M バイトおよび 48M バイトの 2 つのデータファイルが格納されます。(INITIAL_SIZE
のデフォルトの値は 128M バイトです。)これは、次に示すように、2 つの SQL ステートメントを使用することで実行できます。CREATE TABLESPACE ts_1 ADD DATAFILE 'data_1.dat' USE LOGFILE GROUP lg_1 INITIAL_SIZE 32M ENGINE NDBCLUSTER; ALTER TABLESPACE ts_1 ADD DATAFILE 'data_2.dat' INITIAL_SIZE 48M ENGINE NDBCLUSTER;
CREATE TABLESPACE
ステートメントは、データファイルdata_1.dat
を含むテーブルスペースts_1
を作成し、ts_1
をログファイルグループlg_1
に関連付けます。ALTER TABLESPACE
は、2 つめのデータファイル (data_2.dat
) を追加します。いくつかの注意事項:
Undo ログファイルの例で使用した
.log
ファイル拡張子の場合と同様に、.dat
ファイル拡張子にも特別な意味はありません。単に、データファイルを簡単に認識できるように使用されています。ADD DATAFILE '
を使用して、テーブルスペースにデータファイルを追加すると、クラスタ内の各データノードのfilename
'DataDir
内にあるndb_
ディレクトリに、node_id
_fsfilename
という名前のファイルが作成されます。ここで、node_id
はデータノードのノード ID です。各データファイルのサイズは、SQL ステートメントで指定します。たとえば、MySQL Cluster に 4 つのデータノードが含まれている場合、ここで示したALTER TABLESPACE
ステートメントは、4 つの各データノードのデータディレクトリに 1 つずつ、4 つのデータファイルを作成します。これらの各ファイルの名前はdata_2.dat
であり、各ファイルのサイズは 48M バイトです。すべての
CREATE TABLESPACE
およびALTER TABLESPACE
ステートメントには、ENGINE
句を含める必要があります。テーブルスペースには、テーブルスペースと同じストレージエンジンを使用しているテーブルのみを作成できます。MySQL Cluster NDB 7.3 では、この句に許可される値はNDBCLUSTER
とNDB
だけです。CREATE TABLESPACE
およびALTER TABLESPACE
ステートメントについての詳細は、セクション13.1.18「CREATE TABLESPACE 構文」およびセクション13.1.8「ALTER TABLESPACE 構文」を参照してください。
-
この時点で、ディスク上のテーブルスペース
ts_1
内にインデックスなしカラムを格納するテーブルを作成できます。CREATE TABLE dt_1 ( member_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, last_name VARCHAR(50) NOT NULL, first_name VARCHAR(50) NOT NULL, dob DATE NOT NULL, joined DATE NOT NULL, INDEX(last_name, first_name) ) TABLESPACE ts_1 STORAGE DISK ENGINE NDBCLUSTER;
TABLESPACE ... STORAGE DISK
オプションは、ディスクデータストレージ用にテーブルスペースts_1
を使用するようにNDBCLUSTER
ストレージエンジンに指示します。注記CREATE TABLE
またはALTER TABLE
ステートメントでカラムの定義の一部としてSTORAGE
句を使用すると、個々のカラムをディスク上とメモリー内のどちらに格納するかを指定することもできます。STORAGE DISK
を指定するとカラムはディスク上に格納され、STORAGE MEMORY
を指定するとインメモリーストレージが使用されます。詳細は、セクション13.1.17「CREATE TABLE 構文」を参照してください。次のようにテーブル
ts_1
が作成されたら、その他の MySQL テーブルの場合と同様に、INSERT
、SELECT
、UPDATE
、およびDELETE
ステートメントを実行できます。ここで定義されたテーブル
dt_1
の場合、dob
およびjoined
カラムのみがディスク上に格納されます。この理由は、id
、last_name
、およびfirst_name
カラムにインデックスがあるため、これらのカラムに属するデータが RAM 内に格納されるためです。MySQL Cluster NDB 7.3 および MySQL Cluster NDB 7.4 では、インデックスなしカラムのみをディスク上に保持でき、インデックスおよびインデックス付きカラムのデータは引き続き、メモリー内に格納されます。インデックスの使用と RAM の保存のこのようなトレードオフは、ディスクデータテーブルを設計する際に留意する必要があります。
パフォーマンスに関する注意 データノードファイルシステムから分離された物理ディスク上にディスクデータファイルが保持されている場合、ディスクデータストレージを使用しているクラスタのパフォーマンスが大幅に改善されます。顕著な利点を引き出すには、クラスタ内のデータノードごとに、これを実行する必要があります。
ADD UNDOFILE
および ADD DATAFILE
では、ファイルシステムの完全パスおよび相対パスを使用できます。相対パスは、データノードのデータディレクトリに相対的に計算されます。シンボリックリンクを使用することもできます。詳細および例については、セクション18.5.12.2「ディスクデータオブジェクトでのシンボリックリンクの使用」を参照してください。
これらを使用しているログファイルグループ、テーブルスペース、およびディスクデータテーブルは、特定の順序で作成する必要があります。これらのオブジェクトを削除する際にも、同じことが当てはまります。
ログファイルグループは、テーブルスペースで使用されているかぎり、削除できません。
テーブルスペースは、データファイルを格納しているかぎり、削除できません。
テーブルスペースを使用しているテーブルが残っているかぎり、テーブルスペースからどのデータファイルも削除できません。
ファイルが作成されたテーブルスペースとは別のテーブルスペースに関連付けられて作成されたファイルは、削除できません。(Bug #20053)
たとえば、このセクションでこれまで作成してきたすべてのオブジェクトを削除するには、次のステートメントを使用します。
mysql> DROP TABLE dt_1;
mysql> ALTER TABLESPACE ts_1
-> DROP DATAFILE 'data_2.dat'
-> ENGINE NDBCLUSTER;
mysql> ALTER TABLESPACE ts_1
-> DROP DATAFILE 'data_1.dat'
-> ENGINE NDBCLUSTER;
mysql> DROP TABLESPACE ts_1
-> ENGINE NDBCLUSTER;
mysql> DROP LOGFILE GROUP lg_1
-> ENGINE NDBCLUSTER;
これらのステートメントは、ここで示した順序で実行する必要があります。ただし、2 つの ALTER TABLESPACE ... DROP DATAFILE
ステートメントは、どちらの順序でも実行できます。
INFORMATION_SCHEMA
データベースの FILES
テーブルをクエリーすると、ディスクデータテーブルによって使用されているデータファイルに関する情報を取得できます。追加の 「NULL
行」には、Undo ログファイルに関する追加情報が示されます。詳細および例については、セクション21.30.1「INFORMATION_SCHEMA FILES テーブル」を参照してください。
ndb_desc ユーティリティーを使用すると、ディスクデータテーブルまたはテーブルパーティションごとに、割り当て済みおよび空きディスク容量に関する情報を表示することもできます。詳細は、セクション18.4.10「ndb_desc — NDB テーブルの表示」を参照してください。