### 23.5.3 ndbmtd — The NDB Cluster Data Node Daemon (Multi-Threaded)

[]()[]()[]()[]()[]()

[**ndbmtd**](mysql-cluster-programs-ndbmtd.html) is a multithreaded version of [**ndbd**](mysql-cluster-programs-ndbd.html), the process that is used to handle all the data in tables using the [`NDBCLUSTER`](mysql-cluster.html) storage engine. [**ndbmtd**](mysql-cluster-programs-ndbmtd.html) is intended for use on host computers having multiple CPU cores. Except where otherwise noted, [**ndbmtd**](mysql-cluster-programs-ndbmtd.html) functions in the same way as [**ndbd**](mysql-cluster-programs-ndbd.html); therefore, in this section, we concentrate on the ways in which [**ndbmtd**](mysql-cluster-programs-ndbmtd.html) differs from [**ndbd**](mysql-cluster-programs-ndbd.html), and you should consult [Section 23.5.1, “ndbd — The NDB Cluster Data Node Daemon”](mysql-cluster-programs-ndbd.html), for additional information about running NDB Cluster data nodes that apply to both the single-threaded and multithreaded versions of the data node process.

 Command-line options and configuration parameters used with [**ndbd**](mysql-cluster-programs-ndbd.html) also apply to [**ndbmtd**](mysql-cluster-programs-ndbmtd.html). For more information about these options and parameters, see [Section 23.5.1, “ndbd — The NDB Cluster Data Node Daemon”](mysql-cluster-programs-ndbd.html), and [Section 23.4.3.6, “Defining NDB Cluster Data Nodes”](mysql-cluster-ndbd-definition.html), respectively.

[**ndbmtd**](mysql-cluster-programs-ndbmtd.html) is also file system-compatible with [**ndbd**](mysql-cluster-programs-ndbd.html). In other words, a data node running [**ndbd**](mysql-cluster-programs-ndbd.html) can be stopped, the binary replaced with [**ndbmtd**](mysql-cluster-programs-ndbmtd.html), and then restarted without any loss of data. (However, when doing this, you must make sure that [`MaxNoOfExecutionThreads`](mysql-cluster-ndbd-definition.html#ndbparam-ndbmtd-maxnoofexecutionthreads) is set to an apppriate value before restarting the node if you wish for [**ndbmtd**](mysql-cluster-programs-ndbmtd.html) to run in multithreaded fashion.) Similarly, an [**ndbmtd**](mysql-cluster-programs-ndbmtd.html) binary can be replaced with [**ndbd**](mysql-cluster-programs-ndbd.html) simply by stopping the node and then starting [**ndbd**](mysql-cluster-programs-ndbd.html) in place of the multithreaded binary. It is not necessary when switching between the two to start the data node binary using [`--initial`](mysql-cluster-programs-ndbd.html#option_ndbd_initial).

 Using [**ndbmtd**](mysql-cluster-programs-ndbmtd.html) differs from using [**ndbd**](mysql-cluster-programs-ndbd.html) in two key respects:

1. Because [**ndbmtd**](mysql-cluster-programs-ndbmtd.html) runs by default in single-threaded mode (that is, it behaves like [**ndbd**](mysql-cluster-programs-ndbd.html)), you must configure it to use multiple threads. This can be done by setting an appropriate value in the `config.ini` file for the [`MaxNoOfExecutionThreads`](mysql-cluster-ndbd-definition.html#ndbparam-ndbmtd-maxnoofexecutionthreads) configuration parameter or the [`ThreadConfig`](mysql-cluster-ndbd-definition.html#ndbparam-ndbmtd-threadconfig) configuration parameter. Using `MaxNoOfExecutionThreads` is simpler, but `ThreadConfig` offers more flexibility. For more information about these configuration parameters and their use, see [Multi-Threading Configuration Parameters (ndbmtd)](mysql-cluster-ndbd-definition.html#mysql-cluster-ndbd-definition-ndbmtd-parameters).

2. Trace files are generated by critical errors in [**ndbmtd**](mysql-cluster-programs-ndbmtd.html) processes in a somewhat different fashion from how these are generated by [**ndbd**](mysql-cluster-programs-ndbd.html) failures. These differences are discussed in more detail in the next few paragraphs.

[]()[]()[]()[]()[]()

 Like [**ndbd**](mysql-cluster-programs-ndbd.html), [**ndbmtd**](mysql-cluster-programs-ndbmtd.html) generates a set of log files which are placed in the directory specified by [`DataDir`](mysql-cluster-ndbd-definition.html#ndbparam-ndbd-datadir) in the `config.ini` configuration file. Except for trace files, these are generated in the same way and have the same names as those generated by [**ndbd**](mysql-cluster-programs-ndbd.html).

 In the event of a critical error, [**ndbmtd**](mysql-cluster-programs-ndbmtd.html) generates trace files describing what happened just prior to the error' occurrence. These files, which can be found in the data node's [`DataDir`](mysql-cluster-ndbd-definition.html#ndbparam-ndbd-datadir), are useful for analysis of problems by the NDB Cluster Development and Support teams. One trace file is generated for each [**ndbmtd**](mysql-cluster-programs-ndbmtd.html) thread. The names of these files have the following pattern:

```
ndb_node_id_trace.log.trace_id_tthread_id,
```

 In this pattern, *`node_id`* stands for the data node's unique node ID in the cluster, *`trace_id`* is a trace sequence number, and *`thread_id`* is the thread ID. For example, in the event of the failure of an [**ndbmtd**](mysql-cluster-programs-ndbmtd.html) process running as an NDB Cluster data node having the node ID 3 and with [`MaxNoOfExecutionThreads`](mysql-cluster-ndbd-definition.html#ndbparam-ndbmtd-maxnoofexecutionthreads) equal to 4, four trace files are generated in the data node's data directory. If the is the first time this node has failed, then these files are named `ndb_3_trace.log.1_t1`, `ndb_3_trace.log.1_t2`, `ndb_3_trace.log.1_t3`, and `ndb_3_trace.log.1_t4`. Internally, these trace files follow the same format as [**ndbd**](mysql-cluster-programs-ndbd.html) trace files.

 The [**ndbd**](mysql-cluster-programs-ndbd.html) exit codes and messages that are generated when a data node process shuts down prematurely are also used by [**ndbmtd**](mysql-cluster-programs-ndbmtd.html). See [Data Node Error Messages](https://dev.mysql.com/doc/ndb-internals/en/ndb-node-error-messages.html), for a listing of these.

Note

 It is possible to use [**ndbd**](mysql-cluster-programs-ndbd.html) and [**ndbmtd**](mysql-cluster-programs-ndbmtd.html) concurrently on different data nodes in the same NDB Cluster. However, such configurations have not been tested extensively; thus, we cannot recommend doing so in a production setting at this time.

