17.5.10.12 The ndbinfo memoryusage Table

Querying this table provides information similar to that provided by the ALL REPORT MemoryUsage command in the ndb_mgm client, or logged by ALL DUMP 1000.

The following table provides information about the columns in the memoryusage table in MySQL Cluster NDB 7.1.3 and later. For each column, the table shows the name, data type, and a brief description. Additional information can be found in the notes following the table.

Column NameTypeDescription
node_idintegerThe node ID of this data node.
memory_typestringOne of Data memory, Index memory, or (MySQL Cluster NDB 7.1.31 and later) Long message buffer.
usedintegerNumber of bytes currently used for data memory or index memory by this data node.
used_pagesintegerNumber of pages currently used for data memory or index memory by this data node; see text.
totalintegerTotal number of bytes of data memory or index memory available for this data node; see text.
total_pagesintegerTotal number of memory pages available for data memory or index memory on this data node; see text.

The total column represents the total amount of memory in bytes available for the given resource (data memory or index memory) on a particular data node. This number should be approximately equal to the setting of the corresponding configuration parameter in the config.ini file.

Suppose that the cluster has 2 data nodes having node IDs 5 and 6, and the config.ini file contains the following:

[ndbd default]
DataMemory = 1G
IndexMemory = 1G

Suppose also that the value of the LongMessageBuffer configuration parameter is allowed to assume its default (64 MB in MySQL Cluster NDB 7.1.31 and later).

The following query shows approximately the same values:

mysql> SELECT node_id, memory_type, total 
     > FROM ndbinfo.memoryusage;
+---------+---------------------+------------+
| node_id | memory_type         | total      |
+---------+---------------------+------------+
|       5 | Data memory         | 1073741824 |
|       5 | Index memory        | 1074003968 |
|       5 | Long message buffer |   67108864 |
|       6 | Data memory         | 1073741824 |
|       6 | Index memory        | 1074003968 |
|       6 | Long message buffer |   67108864 |
+---------+---------------------+------------+
6 rows in set (0.00 sec)

In this case, the total column values for index memory are slightly higher than the value set of IndexMemory due to internal rounding.

For the used_pages and total_pages columns, resources are measured in pages, which are 32K in size for DataMemory and 8K for IndexMemory. For long message buffer memory, the page size is 256 bytes.

Long message buffer information can be found in this table beginning with MySQL Cluster NDB 7.1.31; in earlier versions, only data memory and index memory were included.

MySQL Cluster NDB 7.1.2 and earlier.  The remainder of this section provides information about the memoryusage table as implemented prior to MySQL Cluster NDB 7.1.3. (If you are using MySQL Cluster NDB 7.1.3 or later, refer to the beginning of this section.) For each column, the table shown here provides the name, data type, and a brief description. Additional information can be found in the notes following the table.

Column NameTypeDescription
node_idintegerThe node ID of this data node.
memory_typestringOne of Data memory or Index memory
usedintegerNumber of memory pages used; see text.
maxintegerTotal number of memory pages available; see text.

For the used and max columns, resources are measured in pages, which (in MySQL Cluster NDB 7.1.2 and earlier) are 16K in size for DataMemory and 8K for IndexMemory. This example shows how to use this information in obtaining totals for DataMemory, IndexMemory, or both, which you can do by summing across data nodes and table columns, like this:

mysql> USE ndbinfo;
Database changed
mysql> SET @IPAGE := 8 * 1024;
Query OK, 0 rows affected (0.03 sec)

mysql> SET @DPAGE := 2 * @IPAGE;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT
    ->     @DPAGE * SUM(used) as 'Total DataMemory Used',
    ->     @DPAGE * SUM(max) as 'Total DataMemory Available',
    ->     @DPAGE * SUM(used) DIV COUNT(*) as 'Average DataMemory Used Per Node',
    ->     @DPAGE * SUM(max) DIV COUNT(*) as 'Average DataMemory Available Per Node'
    ->         FROM memoryusage WHERE memory_type = 'Data memory'\G
*************************** 1. row ***************************
                Total DataMemory Used: 106102784
           Total DataMemory Available: 209977344
     Average DataMemory Used Per Node: 53051392
Average DataMemory Available Per Node: 104988672
1 row in set (0.34 sec)

mysql> SELECT
    ->     @IPAGE * SUM(used) as 'Total IndexMemory Used',
    ->     @IPAGE * SUM(max) as 'Total IndexMemory Available',
    ->     @IPAGE * SUM(used) DIV COUNT(*) as 'Average IndexMemory Used Per Node',
    ->     @IPAGE * SUM(max) DIV COUNT(*) as 'Average IndexMemory Available Per Node'
    ->     FROM memoryusage WHERE memory_type = 'INDEX_MEMORY'\G
*************************** 1. row ***************************
                Total IndexMemory Used: 376832
           Total IndexMemory Available: 210239488
     Average IndexMemory Used Per Node: 188416
Average IndexMemory Available Per Node: 105119744
1 row in set (0.33 sec)

(We use DIV rather than / in both queries so that the results in all of the output columns are integers.)

Prior to MySQL Cluster NDB 7.1.2, the memory_type column was named DATA_MEMORY. (Bug #50926)