ndbmtd is a multi-threaded version of
ndbd, the process that is used to handle
all the data in tables using the
NDBCLUSTER storage engine.
ndbmtd is intended for use on host
computers having multiple CPU cores. Except where otherwise
noted, ndbmtd functions in the same way as
ndbd; therefore, in this section, we
concentrate on the ways in which ndbmtd
differs from ndbd, and you should consult
Section 16.4.2, “ndbd — The MySQL Cluster Data Node Daemon”, for additional
information about running MySQL Cluster data nodes that apply
to both the single-threaded and multi-threaded versions of the
data node process.
Command-line options and configuration parameters used with ndbd also apply to ndbmtd. For more information about these options and parameters, see Section 16.4.2, “ndbd — The MySQL Cluster Data Node Daemon”, and Section 16.3.2.6, “Defining MySQL Cluster Data Nodes”, respectively.
ndbmtd is also file system-compatible with
ndbd. In other words, a data node running
ndbd can be stopped, the binary replaced
with ndbmtd, and then restarted without any
loss of data. (However, when doing this, you must make sure
that
MaxNoOfExecutionThreads
is set to an apppriate value before restarting the node if you
wish for ndbmtd to run in multi-threaded
fashion.) Similarly, an ndbmtd binary can
be replaced with ndbd simply by stopping
the node and then starting ndbd in place of
the multi-threaded binary. It is not necessary when switching
between the two to start the data node binary using
--initial.
Prior to MySQL Cluster NDB 7.0.6, there were known issues when
using ndbmtd with MySQL Cluster Disk Data
tables. If you wish to use multi-threaded data nodes with
disk-based NDB tables, you should ensure
that you are running MySQL Cluster NDB 7.0.6 or later (see Bug
#41915 and Bug #44915)
Using ndbmtd differs from using ndbd in two key respects:
You must set an appropriate value for the
MaxNoOfExecutionThreads
configuration parameter in the
config.ini file. If you do not do so,
ndbmtd runs in single-threaded mode;
that is, it behaves like ndbd.
Trace files are generated by critical errors in ndbmtd processes in a somewhat different fashion from how these are generated by ndbd failures.
These differences are discussed in more detail in the next few paragraphs.
Number of execution threads.
The
MaxNoOfExecutionThreads
configuration parameter is used to determine the number of
local query handler (LQH) threads spawned by
ndbmtd. Although this parameter is set in
[ndbd] or [ndbd
default] sections of the
config.ini file, it is exclusive to
ndbmtd and does not apply to
ndbd.
This parameter takes an integer value from 2 to 8 inclusive. Generally, you should set this parameter equal to the number of CPU cores on the data node host, as shown in the following table:
| Number of Cores | Recommended
MaxNoOfExecutionThreads
Value |
|---|---|
| 2 | 2 |
| 4 | 4 |
| 8 or more | 8 |
(It is possible to set this parameter to other values within the permitted range, but these are automatically rounded as shown in the Value Used column of the next table in this section.)
The multi-threaded data node process always spawns at least 4 threads, listed here:
1 local query handler (LQH) thread
1 transaction coordinator (TC) thread
1 transporter thread
1 subscription manager (SUMA) thread
Setting this parameter to a value between 4 and 8 inclusive causes additional LQH threads to be used by ndbmtd (up to a maximum of 4 LQH threads), as shown in the following table:
config.ini Value |
Value Used | Number of LQH Threads Used |
|---|---|---|
| 3 | 2 | 1 |
| 5 or 6 | 4 | 2 |
| 7 | 8 | 4 |
Setting this parameter outside the permitted range of values
causes the management server to abort on startup with the
error Error line number:
Illegal value value for parameter
MaxNoOfExecutionThreads.
In MySQL Cluster NDB 6.4.0, it is not possible to set
MaxNoOfExecutionThreads
to 2. You can safely use the value 3 instead (it is treated
as 2 internally). This issue is resolved in MySQL Cluster
NDB 6.4.1.
In MySQL Cluster NDB 6.4.0 through 6.4.3, the default value
for this parameter was undefined, although the default
behavior for ndbmtd was to use 1 LQH
thread, as though
MaxNoOfExecutionThreads
had been set to 2. Beginning with MySQL Cluster NDB 7.0.4,
this parameter has an explcit default value of 2, thus
guaranteeing this default behavior.
In MySQL Cluster NDB 7.0, it is not possible to cause ndbmtd to use more than 1 TC thread, although we plan to introduce this capability in a future MySQL Cluster release series.
Like ndbd, ndbmtd
generates a set of log files which are placed in the directory
specified by 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.
In the event of a critical error, ndbmtd
generates trace files describing what happened just prior to
the error' occurrence. These files, which can be found in
the data node's
DataDir, are useful
for analysis of problems by the MySQL Cluster Development and
Support teams. One trace file is generated for each
ndbmtd 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 process running as a MySQL Cluster
data node having the node ID 3 and with
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
trace files.
The ndbd exit codes and messages that are
generated when a data node process shuts down prematurely are
also used by ndbmtd. See
ndbd Error Messages, for a listing of these.

User Comments
Add your own comment.