MySQL 5.1.6 では、ディスクの NDB
テーブルの非インデックスのカラムを、以前のバージョンの
MySQL Cluster の RAM
以外に保存できるようになりました。
クラスタ ディスク データの作業の一貫で、ノードのリカバリおよび再起動時に多量(テラ バイト)のデータの取扱い効率を上げるための多くの改善を加えています。これらの改善点の中には非常に大きなデータセットを持つノードの起動の同期する 「no-steal」 アルゴリズムが含まれています。詳細については MySQL Cluster の開発者 Mikael Ronström および Jonas Oreland による説明書 Recovery Principles of MySQL Cluster 5.1 を参照してください。
MYSQL 5.1.6 あるいはそれ以降で稼動する MySQL Cluster をすべてのノード (マネジメント および SQL ノードを含む) を設定したと仮定すると、ディスクでクラスタ テーブル作成の基本的なステップは以下のようになります。
log file group
を作成し、1つ以上の UNDO
ログ
ファイルをそれに割り当て (UNDO
ログ ファイルは UNDOFILE
とも言われます) ます。.
tablespace を作成し、1 つい上のデータ ファイルおよびログ ファイル グループをそれに割り当てます。
データのストレージにテーブルスペースを使用するあディスク データ テーブルを作成します。
これらの各タスクは以下の例に示すように SQL ステートメントで実行できます。
lg_1
の名前のログ ファイル
グループを CREATE LOGFILE GROUP
を使用して作成します。このログ
ファイルのグループは 2 つの
UNDO
ログ
ファイルで構成され、それぞれの名前を
undo_1.dat
および
undo_2.dat
とし、それらの初期サイズはそれぞれ 16 MB
および 12 MB です。(ログ ファイルをログ
ファイル
グループに追加する際はそれらの初期サイズを指定する必要があります。オプションで、ログ
ファイル グループの UNDO
バッファのサイズを指定するか、デフォルト値の
8 MB
のまま使用することもできます。この例では、UNDO
バッファのサイズを 2 MB
にしています。UNDO
ログ
ファイルと一緒にログ
ファイルのグループを作成する必要があります。ここでは
undo_1.dat
を lg_1
にこの CREATE LOGFILE GROUP
ステートメントで追加します。
CREATE LOGFILE GROUP lg_1 ADD UNDOFILE 'undo_1.dat' INITIAL_SIZE 16M UNDO_BUFFER_SIZE 2M ENGINE NDB;
undo_2.dat
をログ
ファイルのグループに追加するには、以下の
ALTER LOGFILE GROUP
ステートメントを使用します。
ALTER LOGFILE GROUP lg_1 ADD UNDOFILE 'undo_2.dat' INITIAL_SIZE 12M ENGINE NDB;
いくつかの項目に関する備考
ここで使用されている.dat
のファイル拡張は必要ありません。ここで使用しているのはログおよびデータ
ファイルが分かり易いように使用しているだけです。
すべての CREATE LOGFILE GROUP
および ALTER LOGFILE GROUP
ステートメントには ENGINE
節を含める必要があります。MySQL 5.1
では、この節に許可された値は
NDB
および
NDBCLUSTER
です。
重要MySQL 5.1.8 およびそれ以降では、所定の時間ではログ ファイル グループは 1 つだけです。
UNDO
ログ ファイルをログ
ファイル グループに ADD UNDOFILE
'
を使用して追加するときに、filename
'filename
の名前のファイルがクラスタの各データ
ノードの Data Directory
の
ndb_
ディレクトリで作成されます。そこでは
nodeid
_fsnodeid
はデータ
ノードのノード ID です。
UNDO_BUFFER_SIZE
は利用できるシステム
メモリの容量によって制限されます。
CREATE LOGFILE GROUP
ステートメントの詳細に関しては
項12.1.9. 「CREATE LOGFILE GROUP
構文」
を参照してください。.ALTER LOGFILE
GROUP
の詳細は、
項12.1.3. 「ALTER LOGFILE GROUP
構文」
を参照してください。
ここでテーブルスペースを作成します。テーブルスペースは
MySQL Cluster ディスク データ
テーブルで使用されるそれらのデータを保存するファイルを含みます。テーブルスペースは特定のログ
ファイルのグループに関連付けられています。新たにテーブルスペースを作成する際は、UNDO
ロギングで使用されるログ
ファイルのグループを指定する必要があります。データ
ファイルも指定する必要があります。テーブルスペースを作成した後にさらにテーブルスペースを追加することもできます。データスペースからデータ
ファイルを削除することもできます (データ
ファイルの削除の例はこの項で後ほど提供します)。
ts_1
の名前で lg_1
でログ
ファイルのグループとして使用されるテーブルスペースを作成するものとします。このテーブルスペースは
2 つのデータ ファイル data_1.dat
および data_2.dat
を含むものとし、それぞれの初期のサイズをそれぞれ
32 MB および 48 MB とします。これを 2 つの SQL
ステートメントを使用して行います。CREATE
TABLESPACE
、ts_1
をデータ
ファイル data_1.dat
で作成し、ts_1
をログ ファイル
グループ lg_1
に関連付けし、
ALTER TABLESPACE
は 2 番目のデータ
ファイルを追加します。以下のこれらのステートメントを示します。
CREATE TABLESPACE ts_1 ADD DATAFILE 'data_1.dat' USE LOGFILE GROUP lg_1 INITIAL_SIZE 32M ENGINE NDB; ALTER TABLESPACE ts_1 ADD DATAFILE 'data_2.dat' INITIAL_SIZE 48M ENGINE NDB;
いくつかの項目に関する備考
ここで UNDO
ログ
ファイルに使用されたファイル名の場合と同様、.dat
ファイル拡張の特別な重要性はありません。分かり易くするためにのみ使用しています。
すべての CREATE TABLESPACE
および ALTER TABLESPACE
ステートメントは ENGINE
節を含む必要があり、テーブルスペースと同じストレージ
エンジンを使用しているテーブルのみがテーブルスペースで作成されます。MySQL
5.1 では、この節に許可された値は
NDB
および
NDBCLUSTER
だけです。
CREATE TABLESPACE
および
ALTER TABLESPACE
ステートメントに関する詳細は、
項12.1.10. 「CREATE TABLESPACE
構文」 、および
項12.1.4. 「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 NDB;
TABLESPACE ...STORAGE DISK
節が
NDB Cluster
ストレージ
エンジンにテーブルスペース
ts_1
をディスク データ
ストレージに使用するよう指示します。
以下のようにテーブル ts_1
が以下のように作成されたら、他の MySQL
テーブルでするように
INSERT
、SELECT
、UPDATE
、および
DELETE
ステートメントを実行できます。
テーブル dt_1
にはここで定義されたように、dob
および joined
カラムのみがディスクに保存できます。これは
id
にインデックスがあるからで、last_name
、および
first_name
カラム、並びにこれらのカラムに所属するが
RAM に保存されます。MySQL 5.1
では、非インデックスカラムのみがディスクの保存されます。インデックスおよびインデックスの付いたカラムはメモリに保存されます。このインデックスと
RAM の保存間の兼ね合いはディスク データ
テーブルを設計する際に忘れてはならないものです。
重要MySQL 5.1 のディスク データ テーブルには、変数長カラムがある一定のスペースを使用します。各行では、そのカラムの一番大きな値を保存するのに必要なスペースに相当します。(これらの計算に関するヘルプに関しては、項10.5. 「データタイプが必要とする記憶容量」 を参照してください。)
注:クラスタを
--initial
オプションで起動するとディスク データ
ファイルは削除されません。クラスタを最初の再起動を実行するときに手動でそうする必要があります。
これらを使用しているログ ファイル グループ、テーブルスペース、およびディスク データ テーブルは特別な順序で作成する必要があります。これらのオブジェクトを削除する際も同様です。
ログ ファイル グループはテーブルスペースがそれを使用しいる場合は削除できません。
テーブルスペースはそれがデータ ファイルを含んでいる場合には削除できません。
テーブルスペースを使用しているテーブルが残っている限りテーブルスペースからデータ ファイルを削除することはできません。
MySQL 5.1.12 以降では、ファイルが作成されたもの以外の異なるテーブルスペースに関連して作成されたファイルは削除できなくなりました。(Bug#20053)
例えば、この項でこれまで作成してきたすべてのオブジェクトを削除するには、以下のステートメントを使用します。
mysql>DROP TABLE dt_1;
mysql>ALTER TABLESPACE ts_1
->DROP DATAFILE 'data_2.dat'
->ENGINE NDB;
mysql>ALTER TABLESPACE ts_1
->DROP DATAFILE 'data_1.dat'
->ENGINE NDB;
mysql>DROP TABLESPACE ts_1
->ENGINE NDB;
mysql>DROP LOGFILE GROUP lg_1
->ENGINE NDB;
これらのステートメントは表示された順序で実行する必要があります。ALTER
TABLESPACE ...DROP DATAFILE
のこの 2
つのステートメントはどちらの順序でも実行できる場合があります。
INFOMATION_SCHEMA
データベースで
FILES
テーブルにクエリしてディスク データ
テーブルに使用されるデータ
ファイルに関する情報を取得できます。undo ログ
ファイルに関する情報を提供するために特別な
「NULL
行」 が MySQL 5.1.14
に追加されています。使用例に関する詳細は、
項21.21. 「INFORMATION_SCHEMA FILES
テーブル」 を参照してください。.
パラメータの設定により以下を含むディスク データ の振る舞いに影響を及ぼします。
DiskPageBufferMemory
これによりディスクのキャッシュ
ページに使用されるスペースを決め、config.ini
ファイルの [NDBD]
あるいは
[NDBD DEFAULT]
セクションに設定されます。そのスペースはバイトで測定されます。各ページは
32k です。このことはN
が負の整数以外の場合、クラスタ デスク
データ ストレージは常に
N
* 32k
メモリを使用することを意味します。
SharedGlobalMemory
これはログ
バッファに使用されるメモリ容量、ディスク
オペレーション(ページ
リクエストおよび待ちキューなど)、およびテーブルスペースのメタデータ、ログ
ファイル グループ、UNDO
ファイル、ならびにデータ
ファイルを決めます。それはconfig.ini
設定ファイルの [NDBD]
あるいは
[NDBD DEFAULT]
セクションで設定され、バイトで測定されます。
注:OPTIMIZE
TABLE
ステートメントはディスク データ
テーブルには影響を及ぼしません。