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 17.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 17.4.2, “ndbd — The MySQL Cluster Data Node Daemon”, and Section 17.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.
(Bug#41915, 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:
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
follow the pattern
ndb_
,
where node_id
_trace.log.trace_id
_tthread_id
node_id
is 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.
It is possible to use ndbd and ndbmtd concurrently on different data nodes in the same MySQL Cluster. However, such configurations have not been tested extensively; thus, we cannot not recommend doing so in a production setting at this time.
User Comments
Add your own comment.