MySQL 8.0 リファレンスマニュアル


13.1.20.11 NDB_TABLE オプションの設定

NDB Cluster では、CREATE TABLE または ALTER TABLE ステートメントのテーブルコメントを使用して NDB_TABLE オプションを指定することもできます。NDB_TABLE オプションは、文字列 NDB_TABLE= に続いて、必要に応じてカンマで区切り、1 つ以上の名前 - 値ペアで構成されます。 名前と値の構文の完全な構文を次に示します:

COMMENT="NDB_TABLE=ndb_table_option[,ndb_table_option[,...]]"

ndb_table_option: {
    NOLOGGING={1 | 0}
  | READ_BACKUP={1 | 0}
  | PARTITION_BALANCE={FOR_RP_BY_NODE | FOR_RA_BY_NODE | FOR_RP_BY_LDM
                      | FOR_RA_BY_LDM | FOR_RA_BY_LDM_X_2
                      | FOR_RA_BY_LDM_X_3 | FOR_RA_BY_LDM_X_4}
  | FULLY_REPLICATED={1 | 0}
}

引用符で囲まれた文字列内ではスペースを使用できません。 文字列では大文字と小文字は区別されません。

この方法でコメントの一部として設定できる 4 つの NDB テーブルオプションについては、次のいくつかの段落で詳しく説明します。

NOLOGGING: 1 を使用することは、ndb_table_no_logging を有効にすることに対応していますが、実際の影響はありません。 プレースホルダとして提供され、主に ALTER TABLE ステートメントの完全性のために使用されます。

READ_BACKUP: このオプションを 1 に設定すると、ndb_read_backup が有効になっている場合と同じ効果があり、レプリカからの読取りが可能になります。 これにより、テーブルからの読取りのパフォーマンスが大幅に向上しますが、書込みパフォーマンスに対するコストは比較的低くなります。 NDB 8.0.19 以降、1 が READ_BACKUP のデフォルトであり、ndb_read_backup のデフォルトは ON です (以前は、すべてのレプリカからの読み取りがデフォルトで無効になっていました)。

次に示すような ALTER TABLE ステートメントを使用して、既存のテーブルに対して READ_BACKUP をオンラインで設定できます:

ALTER TABLE ... ALGORITHM=INPLACE, COMMENT="NDB_TABLE=READ_BACKUP=1";

ALTER TABLE ... ALGORITHM=INPLACE, COMMENT="NDB_TABLE=READ_BACKUP=0";

ALTER TABLEALGORITHM オプションの詳細は、セクション23.5.11「NDB Cluster での ALTER TABLE を使用したオンライン操作」 を参照してください。

PARTITION_BALANCE: パーティションの割当ておよび配置をさらに制御します。 次の 4 つのスキームがサポートされています:

  1. FOR_RP_BY_NODE: ノードごとに 1 つのパーティション。

    プライマリパーティションを格納する LDM はノードごとに 1 つのみです。 各パーティションは、すべてのノードの同じ LDM (同じ ID) に格納されます。

  2. FOR_RA_BY_NODE: ノードグループごとに 1 つのパーティション。

    各ノードには、単一のパーティション (プライマリレプリカまたはバックアップレプリカのいずれか) が格納されます。 各パーティションは、すべてのノードの同じ LDM に格納されます。

  3. FOR_RP_BY_LDM: 各ノードの LDM ごとに 1 つのパーティション (デフォルト)。

    これは、READ_BACKUP が 1 に設定されている場合に使用する設定です。

  4. FOR_RA_BY_LDM: 各ノードグループの LDM ごとに 1 つのパーティション。

    これらのパーティションには、プライマリパーティションまたはバックアップパーティションを指定できます。

  5. FOR_RA_BY_LDM_X_2: 各ノードグループの LDM ごとに 2 つのパーティション。

    これらのパーティションには、プライマリパーティションまたはバックアップパーティションを指定できます。

  6. FOR_RA_BY_LDM_X_3: 各ノードグループの LDM ごとに 3 つのパーティション。

    これらのパーティションには、プライマリパーティションまたはバックアップパーティションを指定できます。

  7. FOR_RA_BY_LDM_X_4: 各ノードグループの LDM ごとに 4 つのパーティション。

    これらのパーティションには、プライマリパーティションまたはバックアップパーティションを指定できます。

PARTITION_BALANCE は、テーブル当たりのパーティション数を設定するための推奨インタフェースです。 MAX_ROWS を使用したパーティションの数の強制は非推奨ですが、下位互換性のために引き続きサポートされます。MySQL NDB Cluster の将来のリリースでは削除される予定です。 (Bug #81759、Bug #23544301)

FULLY_REPLICATED は、テーブルが完全にレプリケートされるかどうか、つまり各データノードにテーブルの完全なコピーがあるかどうかを制御します。 テーブルの完全レプリケーションを有効にするには、FULLY_REPLICATED=1 を使用します。

この設定は、ndb_fully_replicated システム変数を使用して制御することもできます。 これを ON に設定すると、すべての新しい NDB テーブルに対してデフォルトでオプションが有効になります。デフォルトは OFF です。 ndb_data_node_neighbour システム変数は完全にレプリケートされたテーブルにも使用され、完全にレプリケートされたテーブルにアクセスしたときに、この MySQL Server に対してローカルなデータノードにアクセスするようにします。

NDB テーブルの作成時にこのようなコメントを使用する CREATE TABLE ステートメントの例を次に示します:

mysql> CREATE TABLE t1 (
     >     c1 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
     >     c2 VARCHAR(100),
     >     c3 VARCHAR(100) )
     > ENGINE=NDB
     >
COMMENT="NDB_TABLE=READ_BACKUP=0,PARTITION_BALANCE=FOR_RP_BY_NODE";

コメントは、SHOW CREATE TABLE の出力の一部として表示されます。 コメントのテキストは、次の例に示すように、MySQL Information Schema TABLES テーブルのクエリーからも使用できます:

mysql> SELECT TABLE_NAME, TABLE_SCHEMA, TABLE_COMMENT
     > FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME="t1"\G
*************************** 1. row ***************************
   TABLE_NAME: t1
 TABLE_SCHEMA: test
TABLE_COMMENT: NDB_TABLE=READ_BACKUP=0,PARTITION_BALANCE=FOR_RP_BY_NODE
1 row in set (0.01 sec)

このコメント構文は、次に示すように、NDB テーブルの ALTER TABLE ステートメントでもサポートされます:

mysql> ALTER TABLE t1 COMMENT="NDB_TABLE=PARTITION_BALANCE=FOR_RA_BY_NODE";
Query OK, 0 rows affected (0.40 sec)
Records: 0  Duplicates: 0  Warnings: 0

NDB 8.0.21 以降、TABLE_COMMENT カラムには、次のように ALTER TABLE ステートメントのあとにテーブルを再作成するために必要なコメントが表示されます:

mysql> SELECT TABLE_NAME, TABLE_SCHEMA, TABLE_COMMENT
    ->     FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME="t1"\G
*************************** 1. row ***************************
   TABLE_NAME: t1
 TABLE_SCHEMA: test
TABLE_COMMENT: NDB_TABLE=READ_BACKUP=0,PARTITION_BALANCE=FOR_RP_BY_NODE
1 row in set (0.01 sec)
mysql> SELECT TABLE_NAME, TABLE_SCHEMA, TABLE_COMMENT
     > FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME="t1";
+------------+--------------+--------------------------------------------------+
| TABLE_NAME | TABLE_SCHEMA | TABLE_COMMENT                                    |
+------------+--------------+--------------------------------------------------+
| t1         | c            | NDB_TABLE=PARTITION_BALANCE=FOR_RA_BY_NODE       |
| t1         | d            |                                                  |
+------------+--------------+--------------------------------------------------+
2 rows in set (0.01 sec)

ALTER TABLE で使用されるテーブルコメントは、テーブルに存在する可能性のある既存のコメントを置き換えることに注意してください。

mysql> ALTER TABLE t1 COMMENT="NDB_TABLE=PARTITION_BALANCE=FOR_RA_BY_NODE";
Query OK, 0 rows affected (0.40 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> SELECT TABLE_NAME, TABLE_SCHEMA, TABLE_COMMENT
     > FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME="t1";
+------------+--------------+--------------------------------------------------+
| TABLE_NAME | TABLE_SCHEMA | TABLE_COMMENT                                    |
+------------+--------------+--------------------------------------------------+
| t1         | c            | NDB_TABLE=PARTITION_BALANCE=FOR_RA_BY_NODE       |
| t1         | d            |                                                  |
+------------+--------------+--------------------------------------------------+
2 rows in set (0.01 sec)

NDB 8.0.21 より前は、ALTER TABLE で使用されていたテーブルコメントによって、テーブルに存在する可能性のある既存のコメントが置き換えられていました。 これは、たとえば、READ_BACKUP 値が ALTER TABLE ステートメントによって設定された新しいコメントに引き継がれず、未指定の値がデフォルトに戻されたことを意味します。 (BUG#30428829) そのため、SQL を使用して以前にコメントに設定された値を取得する方法がなくなりました。 コメント値がデフォルトに戻らないようにするには、既存のコメント文字列からそのような値を保持し、ALTER TABLE に渡されるコメントに含める必要がありました。

PARTITION_BALANCE オプションの値は、ndb_desc の出力にも表示されます。ndb_desc には、READ_BACKUP および FULLY_REPLICATED オプションがテーブルに設定されているかどうかも表示されます。 詳細は、このプログラムの説明を参照してください。


関連キーワード:  ステートメント, TABLE, CREATE, NDB, テーブル, FOR, LDM, DROP, コメント, 設定