Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


18.5.12.1 MySQL Cluster ディスクデータオブジェクト

MySQL Cluster ディスクデータストレージは、いくつかのディスクデータオブジェクトを使用して実装されます。これらには、次のものが含まれます。

  • テーブルスペースは、その他のディスクデータオブジェクト用のコンテナとして機能します。

  • Undo ログファイルは、トランザクションをロールバックするために必要な情報を元に戻します。

  • 1 つ以上の Undo ログファイルがログファイルグループに割り当てられ、ログファイルグループはテーブルスペースに割り当てられます。

  • データファイルには、ディスクデータテーブルデータが格納されます。データファイルは、テーブルスペースに直接割り当てられます。

Undo ログファイルおよびデータファイルは、各データノードのファイルシステム内にある実際のファイルです。デフォルトでは、MySQL Cluster config.ini ファイルに指定された DataDirndb_node_id_fs に配置されます。ここで、node_id はデータノードのノード ID です。Undo ログファイルまたはデータファイルの作成時に、ファイル名の一部として絶対パスまたは相対パスを指定すると、これらを別の場所に配置できます。これらのファイルを作成するステートメントは、このセクションの後半で示します。

MySQL Cluster のテーブルスペースおよびログファイルグループは、ファイルとして実装されていません。

重要

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

すべてのノード (管理ノードと SQL ノードを含む) を含む MySQL Cluster をすでに作成していると仮定すると、ディスク上に MySQL Cluster テーブルを作成するための基本ステップは次のとおりです。

  1. ログファイルグループを作成し、それに 1 つ以上の Undo ログファイルを割り当てます (Undo ログファイルは、undofile と呼ばれることもあります)。

    注記

    Undo ログファイルは、ディスクデータテーブルでのみ必要です。メモリー内にのみ格納される NDBCLUSTER テーブルでは使用されません。

  2. テーブルスペースを作成し、そのテーブルスペースにログファイルグループおよび 1 つ以上のデータファイルを割り当てます。

  3. データストレージ用に、このテーブルスペースを使用するディスクデータテーブルを作成します。

これらの各タスクは、次の例に示すように、mysql クライアントまたはその他の MySQL クライアントアプリケーションで SQL ステートメントを使用することで実現できます。

  1. 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.loglg_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 以降では、この句に許可される値は NDBCLUSTERNDB だけです。

      重要

      特定の時点で同じ MySQL Cluster には、最大でも 1 つのログファイルグループしか存在できません。

    • ADD UNDOFILE 'filename' を使用して、ログファイルグループに Undo ログファイルを追加すると、クラスタ内の各データノードの DataDir 内にある ndb_node_id_fs ディレクトリに、filename という名前のファイルが作成されます。ここで、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 構文」を参照してください。

  2. この時点で、データを格納するために 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_fs ディレクトリに、filename という名前のファイルが作成されます。ここで、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 では、この句に許可される値は NDBCLUSTERNDB だけです。

    • CREATE TABLESPACE および ALTER TABLESPACE ステートメントについての詳細は、セクション13.1.18「CREATE TABLESPACE 構文」およびセクション13.1.8「ALTER TABLESPACE 構文」を参照してください。

  3. この時点で、ディスク上のテーブルスペース 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 テーブルの場合と同様に、INSERTSELECTUPDATE、および DELETE ステートメントを実行できます。

    ここで定義されたテーブル dt_1 の場合、dob および joined カラムのみがディスク上に格納されます。この理由は、idlast_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 テーブルの表示」を参照してください。


User Comments
Sign Up Login You must be logged in to post a comment.