Documentation Home
MySQL NDB Cluster 7.6 Release Notes
Related Documentation Download these Release Notes
PDF (US Ltr) - 1.1Mb
PDF (A4) - 1.1Mb

MySQL NDB Cluster 7.6 Release Notes  /  Changes in MySQL NDB Cluster 7.6.22 (5.7.38-ndb-7.6.22) (2022-04-27, General Availability)

Changes in MySQL NDB Cluster 7.6.22 (5.7.38-ndb-7.6.22) (2022-04-27, General Availability)

MySQL NDB Cluster 7.6.22 is a new release of NDB 7.6, based on MySQL Server 5.7 and including features in version 7.6 of the NDB storage engine, as well as fixing recently discovered bugs in previous NDB Cluster releases.

Obtaining NDB Cluster 7.6.  NDB Cluster 7.6 source code and binaries can be obtained from

For an overview of changes made in NDB Cluster 7.6, see What is New in NDB Cluster 7.6.

This release also incorporates all bug fixes and changes made in previous NDB Cluster releases, as well as all bug fixes and feature changes which were added in mainline MySQL 5.7 through MySQL 5.7.38 (see Changes in MySQL 5.7.38 (2022-04-26, General Availability)).

Functionality Added or Changed

  • The client receive thread was enabled only when under high load, where the criterion for determining high load was that the number of clients waiting in the poll queue (the receive queue) was greater than min_active_clients_recv_thread (default: 8).

    This was a poor metric for determining high load, since a single client, such as the binary log injector thread handling incoming replication events, could experience high load on its own as well. The same was true of a pushed join query (in which very large batches of incoming TRANSID_AI signals are received).

    We change the receive thread such that it now sleeps in the poll queue rather than being deactivated completely, so that it is now always available for handling incoming signals, even when the client is not under high load. (Bug #33752914)

Bugs Fixed

  • Important Change: The maximum value supported for the --ndb-batch-size server option has been increased from 31536000 to 2147483648 (2 GB). (Bug #21040523)

  • Performance: When inserting a great many rows into an empty or small table in the same transaction, the rate at which rows were inserted quickly declined to less than 50% of the initial rate; subsequently, it was found that roughly 50% of all CPU time was spent in Dbacc::getElement(), and the root cause identified to be the timing of resizing the structures used for storing elements by DBACC, growing with the insertion of more rows in the same transaction, and shrinking following a commit.

    We fix this issue by checking for a need to resize immediately following the insertion or deletion of an element. This also handles the subsequent rejection of an insert. (Bug #33803487)

    References: See also: Bug #33803541.

  • Performance: The internal function computeXorChecksum() was implemented such that great care was taken to aid the compiler in generating optimal code, but it was found that it consumed excessive CPU resources, and did not perform as well as a simpler implementation. This function is now reimplemented with a loop summing up XOR results over an array, which appears to result in better optimization with both GCC and Clang compilers. (Bug #33757412)

  • In some cases, NDB did not validate all node IDs of data nodes correctly. (Bug #33896409)

  • In some cases, array indexes were not handled correctly. (Bug #33896389, Bug #33896399, Bug #33916134)

  • NdbEventBuffer hash key generation for non-character data reused the same 256 hash keys; in addition, strings of zero length were ignored when calculating hash keys. (Bug #33783274)

  • The collection of NDB API statistics based on the EventBytesRecvdCount event counter incurred excessive overhead. Now this counter is updated using a value which is aggregated as the event buffer is filled, rather than traversing all of the event buffer data in a separate function call.

    For more information, see NDB API Statistics Counters and Variables. (Bug #33778923)

  • The receiver thread ID was hard-coded in the internal method TransporterFacade::raise_thread_prio() such that it always acted to raise the priority of the receiver thread, even when called from the send thread. (Bug #33752983)

  • The deprecated -r option for ndbd has been removed. In addition, this change also removes extraneous text from the output of ndbd --help. (Bug #33362935)

    References: See also: Bug #31565810.

  • The ndb_import tool handled only the hidden primary key which is defined by NDB when a table does not have an explicit primary key. This caused an error when inserting a row containing NULL for an auto-increment primary key column, even though the same row was accepted by LOAD DATA INFILE.

    We fix this by adding support for importing a table with one or more instances of NULL in an auto-increment primary key column. This includes a check that a table has no more than one auto-increment column; if this column is nullable, it is redefined by ndb_import as NOT NULL, and any occurrence of NULL in this column is replaced by a generated auto-increment value before inserting the row into NDB. (Bug #30799495)

  • When a node failure is detected, surviving nodes in the same nodegroup as this node attempt to resend any buffered change data to event subscribers. In cases in which there were no outstanding epoch deliveries, that is, the list of unacknowledged GCIs was empty, the surviving nodes made the incorrect assumption that this list would never be empty. (Bug #30509416)