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

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

23.3.3.6 NDB Cluster データノードの定義

クラスタのデータノードの動作を構成するには、[ndbd] および [ndbd default] セクションを使用します。

データノードのプロセスとして ndbd バイナリと ndbmtd バイナリのどちらを使用する場合でも、セクション名としては常に [ndbd][ndbd default] が使用されます。

バッファーサイズ、プールサイズ、タイムアウトなどを制御する数多くのパラメータがあります。 唯一の必須パラメータは、ExecuteOnComputer または HostName のいずれかです。これは、ローカルの [ndbd] セクションで定義する必要があります。

NoOfReplicas パラメータは、すべてのクラスタデータノードに共通であるため、[ndbd default] セクションに定義してください。 NoOfReplicas を設定する必要は必ずしもありませんが、これを明示的に設定することをお勧めします。

ほとんどのデータノードパラメータは [ndbd default] セクションに設定します。 [ndbd] セクションでの変更が許可されるのは、ローカル値の設定を明示的に規定されているパラメータだけです。 HostNameNodeId、および ExecuteOnComputer (存在する場合) は、config.ini のほかのセクションではなく、ローカルの [ndbd] で定義する必要があります。 つまり、これらのパラメータの設定は 1 つのデータノードに固有のものです。

メモリー使用状況やバッファーサイズに影響を与えるパラメータでは、1024、1024 * 1024、または 1024 * 1024 * 1024 の単位を示すサフィクスとして KM、または G を使用できます。 (たとえば、100K は 100 * 1024 = 102400 を意味します。)

MySQL Server my.cnf または my.ini ファイルで使用されている場合を除き、パラメータ名および値では大/小文字が区別されません。

「NDB Cluster ディスクデータ」テーブルに固有の構成パラメータの詳細は、このセクション (ディスクデータの構成パラメータ を参照) で後述します。

これらのパラメータはすべて、ndbmtd (ndbd のマルチスレッドバージョン) にも適用されます。 追加の 3 つのデータノード構成パラメータ (MaxNoOfExecutionThreadsThreadConfig、および NoOfFragmentLogParts) は、ndbmtd にのみ適用されます。これらを ndbd に使用しても、無効になります。 詳細は、マルチスレッドの構成パラメータ (ndbmtd)を参照してください。 セクション23.4.3「ndbmtd — NDB Cluster データノードデーモン (マルチスレッド)」も参照してください。

データノードの識別.  NodeId または Id の値 (つまり、データノードの識別子) は、ノード起動時のコマンド行、または構成ファイルで割り当てることができます。

データメモリー、インデックスメモリー、および文字列メモリー

DataMemoryIndexMemory は、実際のレコードとインデックスの格納に使用されるメモリーセグメントのサイズを指定する [ndbd] パラメータです。 これらの値を設定する場合、DataMemory の使用方法を理解することが重要です。これは通常、クラスタによる実際の使用状況を反映するために更新する必要があるためです。

注記

IndexMemory は非推奨であり、NDB Cluster の将来のバージョンで削除される可能性があります。 詳細は、次の説明を参照してください。

次の例は、1 つのテーブルでメモリーがどのように使用されるかを示しています。 このテーブル定義について考えます。

CREATE TABLE example (
  a INT NOT NULL,
  b INT NOT NULL,
  c INT NOT NULL,
  PRIMARY KEY(a),
  UNIQUE(b)
) ENGINE=NDBCLUSTER;

各レコードに、12 バイトのデータと 12 バイトのオーバーヘッドがあります。 NULL 可能カラムがない場合は、4 バイトのオーバーヘッドを節約できます。 さらに、カラム a および b に対して 2 つの順序付けされたインデックスがあり、レコードごとにおよそ 10 バイトが消費されます。 ベーステーブルには主キーのハッシュインデックスがあり、レコードあたりおよそ 29 バイトが使用されます。 b を主キーとし、a をカラムとする別のテーブルによって一意の制約が実装されています。 この別のテーブルでは、8 バイトのレコードデータと 12 バイトのオーバーヘッドに加えて、example テーブル内のレコードあたり 29 バイトのインデックスメモリーが追加で消費されます。

したがって、100 万個のレコードに対して、主キーと一意の制約のハッシュインデックスを処理するには 58M バイトのインデックスメモリーが必要です。 さらに、ベーステーブルのレコード、一意のインデックステーブル、および 2 つの順序付けされたインデックステーブルに 64M バイトが必要です。

ハッシュインデックスがかなりのメモリー量を占有しますが、データへのアクセスは非常に高速になります。 また、NDB Cluster で一意性制約を処理するためにも使用されます。

現在、唯一のパーティション化アルゴリズムはハッシュ化であり、順序付けされたインデックスは各ノードでローカルに使用されます。 したがって、一般的なケースで順序付けされたインデックスを使用して一意制約を処理することはできません。

IndexMemoryDataMemory の両方で重要な点は、各ノードグループのすべてのデータメモリーとインデックスメモリーの合計がデータベースの合計サイズになることです。 各ノードグループはレプリケートされた情報の格納に使用されるため、2 つのフラグメントレプリカを持つ 4 つのノードがある場合は、2 つのノードグループがあります。 したがって、使用可能なデータメモリーの合計はデータノードごとに 2 * DataMemory です。

すべてのノードで DataMemoryIndexMemory を同じ値に設定することを強くお勧めします。 データの分布はクラスタ内のすべてのノードで均等であるため、各ノードで使用できるスペースの最大量はクラスタ内でもっとも小さいノードの最大量と同じになります。

DataMemory は変更できますが、それを減らすとリスクが高くなる可能性があります。そうすると、メモリー領域が不足しているためにノードまたは NDB Cluster 全体が再起動できなくなる可能性があります。 これらの値を増やすことは問題ありませんが、このようなアップグレードはソフトウェアのアップグレードと同じ方法で行うことをお勧めします。つまり、最初に構成ファイルを更新し、次に管理サーバーを起動して、各データノードを順に再起動します。

MinFreePct.  DataMemory を含むデータノードリソースの比率 (デフォルトでは 5%) は、再起動の実行時にデータノードがメモリーを使い果たさないように予約されています。 これは、MinFreePct データノード構成パラメータを使用して調整できます (デフォルトは 5)。

バージョン (またはそれ以降) NDB 8.0.13
タイプまたは単位 unsigned
デフォルト 5
範囲 0 - 100
再起動タイプ

N (NDB 8.0.13)

更新によって、使用されるインデックスメモリーの量は増えません。 挿入はただちに有効になりますが、行の削除はトランザクションがコミットされるまで実際には行われません。

トランザクションパラメータ.  次に説明する [ndbd] のいくつかのパラメータは、システムで処理できる並列トランザクションの数とトランザクションのサイズに影響を与えるという点で重要です。 MaxNoOfConcurrentTransactions は、ノード内で実行できる並列トランザクションの数を設定します。 MaxNoOfConcurrentOperations は、同時に更新フェーズに入ったり、ロックしたりできるレコードの数を設定します。

これらのパラメータはどちらも (特に MaxNoOfConcurrentOperations は)、デフォルト値を使用せずに特定の値を設定するユーザーのターゲットになる可能性があります。 デフォルト値は、小規模なトランザクションを使用するシステムで過大なメモリーが使用されないように設定されています。

MaxDMLOperationsPerTransaction は、特定のトランザクションで実行できる DML 操作の最大数を設定します。

トランザクションの一時ストレージ.  次の一連の [ndbd] パラメータは、クラスタトランザクションの一部であるステートメントの実行時に一時ストレージを決定するために使用されます。 このステートメントが完了し、クラスタがコミットまたはロールバックを待機しているときに、すべてのレコードが解放されます。

これらのパラメータのデフォルト値は、ほとんどの状況に適しています。 ただし、多数の行または操作が関与するトランザクションをサポートする必要がある場合は値を増やして、システム内の並列性を高める必要があることがあります。一方、比較的小規模なトランザクションを必要とするアプリケーションでは、これらの値を減らしてメモリーを節約できます。

トランザクションリソース割当てパラメータ.  次のリストのパラメータは、トランザクションコーディネータ (DBTC) でトランザクションリソースを割り当てるために使用されます。 これらのいずれかをデフォルト (0) に設定したままにすると、対応するリソースの推定合計データノード使用量の 25% のトランザクションメモリー専用になります。 これらのパラメータに指定できる実際の最大値は、通常、データノードで使用可能なメモリー量によって制限されます。これらの値を設定しても、データノードに割り当てられるメモリーの合計量には影響しません。 また、MaxDMLOperationsPerTransaction, MaxNoOfConcurrentIndexOperations, MaxNoOfConcurrentOperations, MaxNoOfConcurrentScans, MaxNoOfConcurrentTransactions, MaxNoOfFiredTriggers, MaxNoOfLocalScans または TransactionBufferMemory の設定に関係なく、データノード用に予約された内部レコードの数を制御することに注意する必要があります (トランザクションパラメータ および トランザクションの一時ストレージ を参照)。

スキャンとバッファリング.  (ndb/src/kernel/blocks/Dblqh/Dblqh.hpp 内の) Dblqh モジュールには、読み取りと更新に影響を与える追加の [ndbd] パラメータがあります。 これらには、デフォルトで 10000 * 128 バイト (1250K バイト) に設定される ZATTRINBUF_FILESIZE と、デフォルトで 10000 * 16 バイト (およそ 156K バイト) のバッファースペースに設定される ZDATABUF_FILE_SIZE が含まれます。 これまでに、これらのコンパイル時制限のいずれかを増やすことを示すユーザーからの報告または弊社の大規模なテストの結果はありません。

メモリー割り当て

MaxAllocate

バージョン (またはそれ以降) NDB 8.0.13
タイプまたは単位 unsigned
デフォルト 32M
範囲 1M - 1G
再起動タイプ

N (NDB 8.0.13)

これは、テーブル用のメモリーを割り当てるときに使用するメモリーユニットの最大サイズです。 NDB「メモリー不足」エラーが発生したが、使用可能なすべてのメモリーがまだ使用されていないことをクラスタログまたは DUMP 1000 の出力を調べることで明らかになる場合は、このパラメータの値 (MaxNoOfTables またはその両方) を増やして、NDB で十分なメモリーを使用できるようにすることができます。

複数のトランスポータ

バージョン 8.0.20 以降、NDB はデータノードのペア間の通信に複数のトランスポータを割り当てます。 このように割り当てられたトランスポータの数は、そのリリースで導入された NodeGroupTransporters パラメータに適切な値を設定することによって影響を受ける可能性があります。

NodeGroupTransporters

バージョン (またはそれ以降) NDB 8.0.20
タイプまたは単位 integer
デフォルト 0
範囲 0 - 32
追加 NDB 8.0.20
再起動タイプ

N (NDB 8.0.13)

このパラメータは、同じノードグループ内のノード間で使用されるトランスポータの数を決定します。 デフォルト値 (0) は、使用されるトランスポータの数がノード内の LDM の数と同じであることを意味します。 ほとんどのユースケースではこれで十分です。したがって、この値をデフォルトから変更する必要はほとんどありません。

NodeGroupTransporters を LDM スレッドの数または TC スレッドの数 (いずれか大きい方) より大きい値に設定すると、NDB はこれらの 2 つのスレッドの最大数を使用します。 つまり、これより大きい値は事実上無視されます。

ハッシュマップサイズ

DefaultHashMapSize

バージョン (またはそれ以降) NDB 8.0.13
タイプまたは単位 LDM threads
デフォルト 240
範囲 0 - 3840
再起動タイプ

N (NDB 8.0.13)

このパラメータの元の使用目的は、アップグレードを容易にし、特にデフォルトのハッシュマップサイズが異なる非常に古いリリースとの間のダウングレードを容易にすることでした。 NDB Cluster 7.3 以降から新しいバージョンにアップグレードする場合、これは問題ではありません。

DefaultHashMapSize を 3840 に設定してテーブルを作成または変更したあと、オンラインでこのパラメータを減らす方法は、現在サポートされていません。

ロギングとチェックポイント.  次の [ndbd] パラメータは、ログとチェックポイントの動作を制御します。

メタデータオブジェクト.  次の一連の [ndbd] パラメータは、インデックス、イベント、およびクラスタ間のレプリケーションで使用される属性、テーブル、インデックス、およびトリガーオブジェクトの最大数を定義するために使用されるメタデータオブジェクトのプールサイズを定義します。

注記

これらはクラスタに対する「提案」としてのみ機能し、指定されていないものは表示されているデフォルト値に戻ります。

ブールパラメータ.  データノードの動作は、ブール値を取る一連の [ndbd] パラメータにも影響されます。 これらの各パラメータは、TRUE として指定する場合は 1 または Y に設定し、FALSE として指定する場合は 0 または N に設定します。

タイムアウト、間隔、およびディスクページングの制御

クラスタデータノード内のさまざまなアクション間のタイムアウトと間隔を指定する、いくつかの [ndbd] パラメータがあります。 ほとんどのタイムアウト値はミリ秒単位で指定します。 この例外については、該当する箇所で説明します。

バッファリングとロギング.  上級ユーザーは、いくつかの [ndbd] 構成パラメータを使用するとことで、ノードプロセスが使用するリソースをより細かく制御したり、必要に応じてさまざまなバッファーサイズを調整したりできます。

これらのバッファーは、ログレコードをディスクに書き込む際に、ファイルシステムに対するフロントエンドとして使用されます。 ノードがディスクレスモードで実行されている場合は、NDB ストレージエンジンのファイルシステム抽象化レイヤーによってディスク書き込みが偽装されるため、ペナルティーなしでこれらのパラメータを最小値に設定できます。

ログメッセージの制御.  クラスタの管理では、stdout に送信されるさまざまなイベントタイプのログメッセージ数を制御できることが非常に重要です。 イベントカテゴリごとに、16 個の設定可能なイベントレベル (番号 0-15) があります。 特定のイベントカテゴリのイベントレポートをレベル 15 に設定すると、そのカテゴリのすべてのイベントレポートが stdout に送信されます。0 に設定すると、そのカテゴリのイベントレポートは作成されません。

デフォルトでは、起動メッセージのみが stdout に送信され、残りのイベントレポートのレベルはデフォルトの 0 に設定されます。 これは、これらのメッセージが管理サーバーのクラスタログにも送信されるためです。

管理クライアントで同じようなレベルのセットを設定すると、クラスタログに記録するイベントのレベルを指定できます。

データノードのデバッグパラメータ

次のパラメータは、データノードのテストまたはデバッグ中に使用することを目的としており、本番では使用しません。

バックアップパラメータ.  このセクションで説明する [ndbd] パラメータは、オンラインバックアップの実行用に確保されるメモリーバッファーを定義します。

注記

バックアップファイルの場所は、BackupDataDir データノード構成パラメータによって決まります。

追加要件.  これらのパラメータを指定するときは、次の関係が有効である必要があります。 そうしないと、データノードを起動できません。

NDB Cluster のリアルタイムパフォーマンスパラメータ

このセクションで説明する [ndbd] パラメータは、マルチプロセッサのデータノードホスト上の特定の CPU に対するスレッドのスケジューリングとロックで使用されます。

注記

これらのパラメータを使用するには、システムの root としてデータノードプロセスを実行する必要があります。

マルチスレッドの構成パラメータ (ndbmtd).  ndbmtd は、デフォルトではシングルスレッドプロセスとして動作するため、2 つの方法のいずれかを使用して、複数のスレッドを使用するように構成する必要があります。どちらの場合も、config.ini ファイルに構成パラメータを設定する必要があります。 1 つ目の方法では、MaxNoOfExecutionThreads 構成パラメータに適切な値を設定します。 別の方法として、ThreadConfig を使用して ndbmtd マルチスレッドのより複雑なルールを設定できます。 次のいくつかの段落では、これらのパラメータおよびマルチスレッドデータノードでのそれらの使用に関する情報を提供します。

注記

データノードで並列性を使用したバックアップでは、バックアップを取得する前に、クラスタ内のすべてのデータノードで複数の LDM が使用されている必要があります。 詳細は、セクション23.5.8.5「並列データノードを使用した NDB バックアップの作成」 および セクション23.4.23.3「パラレルで作成されたバックアップからのリストア」 を参照してください。

ディスクデータの構成パラメータ.  ディスクデータの動作に影響を与える構成パラメータには、次が含まれます。

ディスクデータと GCP 停止エラー.  「GCP 停止が検出されたため、ノード nodeid はこのノードを強制終了しました」 (エラー 2303) などの「ディスクデータ」テーブルの使用時に発生する エラーは、多くの場合「GCP 停止エラー」と呼ばれます。 このようなエラーは、Redo ログが十分な速さでディスクにフラッシュされていない場合に発生します。これは通常、ディスクの速度が低く、ディスクのスループットが十分でないことが原因です。

高速なディスクを使用し、ディスクデータファイルをデータノードファイルシステムとは別のディスクに配置することで、これらのエラーを回避しやすくなります。 TimeBetweenGlobalCheckpoints の値を減らすと、グローバルチェックポイントごとに書き込まれるデータの量が減りやすくなるため、グローバルチェックポイントを書き込もうとしたときに Redo ログバッファーのオーバーフローをある程度回避できる可能性があります。ただし、この値を減らすと GCP を書き込むことができる時間も減るため、注意が必要です。

前述の DiskPageBufferMemory について示した考慮事項に加えて、DiskIOThreadPool 構成パラメータを正しく設定することも非常に重要です。DiskIOThreadPool の設定値が大きすぎると、GCP 停止エラーが発生する可能性が非常に高くなります (Bug #37227)。

GCP の停止は、保存またはコミットのタイムアウトによって発生することがあります。TimeBetweenEpochsTimeout データノード構成パラメータは、コミットのタイムアウトを指定します。 ただし、このパラメータを 0 に設定することで、両方のタイプのタイムアウトを無効にできます。

送信バッファーメモリーの割り当てを構成するためのパラメータ.  送信バッファーメモリーは、すべてのトランスポータ間で共有されるメモリープールから動的に割り当てられます。これは、送信バッファーのサイズを必要に応じて調整できることを意味します。 (以前は、クラスタ内のすべてのノードで NDB カーネルが固定サイズの送信バッファーを使用していました。これは、ノードの起動時に割り当てられ、ノードの実行中は変更できませんでした。) TotalSendBufferMemory および OverLoadLimit データノード構成パラメータを使用して、このメモリー割り当ての制限を設定できます。 これらのパラメータ (および SendBufferMemory) の使用方法の詳細は、セクション23.3.3.14「NDB Cluster 送信バッファーパラメータの構成」を参照してください。

セクション23.5.7「NDB Cluster データノードのオンラインでの追加」も参照してください。

Redo ログのオーバーコミット処理.  Redo ログをディスクにフラッシュする時間が長すぎる場合の、データノードによる操作の処理を制御できます。 これは、特定の Redo ログのフラッシュが RedoOverCommitLimit 秒より長い時間をかけて RedoOverCommitCounter 回を超える回数分行われ、保留中のトランザクションが中止されたときに発生します。 これが発生すると、トランザクションを送信した API ノードは、コミットされるはずだった操作を (DefaultOperationRedoProblemAction の指定に従って) キューに配置して再試行するか、中止することで処理できます。 API ノードでこのアクションが実行される前に超過が許されるタイムアウトと回数を設定するためのデータノード構成パラメータについて、次のリストで説明します。

再起動試行の制御.  MaxStartFailRetries および StartFailRetryDelay データノード構成パラメータを使用すると、データノードによる起動失敗時の再起動試行を細かく制御できます。

MaxStartFailRetries は、データノードの起動を中止するまでに行われる再試行の合計数を制限します。StartFailRetryDelay は、再試行間の秒数を設定します。 これらのパラメータをここに示します。

NDB インデックス統計のパラメータ.  次のリストのパラメータは NDB インデックス統計の生成に関連しています。

再起動のタイプ.  このセクションのパラメータの説明で使用される再起動タイプに関する情報を次のテーブルに示します:

表 23.16 NDB Cluster の再起動タイプ

シンボル 再起動タイプ 説明
N ノード パラメータはローリング再起動を使用して更新できます (セクション23.5.5「NDB Cluster のローリング再起動の実行」 を参照)
S システム このパラメータの変更を有効にするには、すべてのクラスタノードを完全に停止してから再起動する必要があります
I Initial --initial オプションを使用してデータノードを再起動する必要があります