NDB Cluster Configuration Files scan buffers, and trigger operations. It also holds table rows as they are updated, before the next commit writes them to data memory. In NDB 8.0.16 and earlier, operational records used dedicated resources whose sizes were controlled by a number of configuration parameters. Beginning with NDB 8.0.17, these are all allocated from a common transaction memory resource and can also use resources from global shared memory. In NDB 8.0.19 and later, the size of this resource can be controlled using a single  TransactionMemory  configuration parameter. Reserved memory for undo log buffers can be set using the  InitialLogFileGroup  configuration parameter. If an undo log buffer is created as part of a  CREATE LOGFILE GROUP  SQL statement, the memory is taken from the transaction memory. A number of resources relating to metadata for Disk Data resources also have no reserved part, and use shared global memory only. Shared global shared memory is thus shared between send buffers, transaction memory, and Disk Data metadata. If  TransactionMemory  is not set, it is calculated based on the following parameters: • MaxNoOfConcurrentOperations • MaxNoOfConcurrentTransactions • MaxNoOfFiredTriggers • MaxNoOfLocalOperations • MaxNoOfConcurrentIndexOperations • MaxNoOfConcurrentScans • MaxNoOfLocalScans • BatchSizePerLocalScan • TransactionBufferMemory When  TransactionMemory  is set explicitly, none of the configuration parameters just listed are used to calculate memory size. In addition, the parameters  MaxNoOfConcurrentIndexOperations , MaxNoOfFiredTriggers ,  MaxNoOfLocalOperations , and  MaxNoOfLocalScans  are incompatible with  TransactionMemory  and cannot be set concurrently with it; if  TransactionMemory  is set and any of these four parameters are also set in the  config.ini  configuration file, the management server cannot start. These four parameters are deprecated in NDB 8.0.19; expect them to be removed from a future release of MySQL NDB Cluster. The transaction memory resource contains a large number of memory pools. Each memory pool represents an object type and contains a set of objects; each pool includes a reserved part allocated to the pool at startup; this reserved memory is never returned to shared global memory. Reserved records are found using a data structure having only a single level for fast retrieval, which means that a number of records in each pool should be reserved. The number of reserved records in each pool has some impact on performance and reserved memory allocation, but is generally necessary only in certain very advanced use cases to set the reserved sizes explicitly. The size of the reserved part of the pool can be controlled by setting the following configuration parameters: • ReservedConcurrentIndexOperations • ReservedFiredTriggers 4234