diff --git a/mysql-test/ndb/ndb_config_1_node.ini b/mysql-test/ndb/ndb_config_1_node.ini index 53a54161432..b5a765364bb 100644 --- a/mysql-test/ndb/ndb_config_1_node.ini +++ b/mysql-test/ndb/ndb_config_1_node.ini @@ -11,6 +11,7 @@ MaxNoOfOrderedIndexes= CHOOSE_MaxNoOfOrderedIndexes MaxNoOfAttributes= CHOOSE_MaxNoOfAttributes TimeBetweenGlobalCheckpoints= 500 NoOfFragmentLogFiles= 3 +DiskPageBufferMemory= CHOOSE_DiskPageBufferMemory [ndbd] HostName= CHOOSE_HOSTNAME_1 # hostname is a valid network adress diff --git a/mysql-test/ndb/ndb_config_2_node.ini b/mysql-test/ndb/ndb_config_2_node.ini index f3c9f42a7ac..e7a12dbde77 100644 --- a/mysql-test/ndb/ndb_config_2_node.ini +++ b/mysql-test/ndb/ndb_config_2_node.ini @@ -11,6 +11,7 @@ MaxNoOfOrderedIndexes= CHOOSE_MaxNoOfOrderedIndexes MaxNoOfAttributes= CHOOSE_MaxNoOfAttributes TimeBetweenGlobalCheckpoints= 500 NoOfFragmentLogFiles= 3 +DiskPageBufferMemory= CHOOSE_DiskPageBufferMemory [ndbd] HostName= CHOOSE_HOSTNAME_1 # hostname is a valid network adress diff --git a/mysql-test/ndb/ndb_config_4_node.ini b/mysql-test/ndb/ndb_config_4_node.ini index 207b383bb83..89688666a35 100644 --- a/mysql-test/ndb/ndb_config_4_node.ini +++ b/mysql-test/ndb/ndb_config_4_node.ini @@ -11,6 +11,7 @@ MaxNoOfOrderedIndexes= CHOOSE_MaxNoOfOrderedIndexes MaxNoOfAttributes= CHOOSE_MaxNoOfAttributes TimeBetweenGlobalCheckpoints= 500 NoOfFragmentLogFiles= 3 +DiskPageBufferMemory= CHOOSE_DiskPageBufferMemory [ndbd] HostName= CHOOSE_HOSTNAME_1 # hostname is a valid network adress diff --git a/mysql-test/ndb/ndbcluster.sh b/mysql-test/ndb/ndbcluster.sh index 991c5a5291d..bc5d1000fe5 100644 --- a/mysql-test/ndb/ndbcluster.sh +++ b/mysql-test/ndb/ndbcluster.sh @@ -58,6 +58,7 @@ ndb_no_attr=2048 ndb_con_op=105000 ndb_dmem=80M ndb_imem=24M +ndb_pbmem=32M VERBOSE=100 NDB_MGM_EXTRA_OPTS= @@ -90,6 +91,7 @@ while test $# -gt 0; do ndb_con_op=5000 ndb_dmem=10M ndb_imem=1M + ndb_pbmem=4M ;; --diskless) ndb_diskless=1 @@ -206,6 +208,7 @@ if [ $initial_ndb ] ; then -e s,"CHOOSE_HOSTNAME_".*,"$ndb_host",g \ -e s,"CHOOSE_FILESYSTEM","$fs_ndb",g \ -e s,"CHOOSE_PORT_MGM","$ndb_mgmd_port",g \ + -e s,"CHOOSE_DiskPageBufferMemory","$ndb_pbmem",g \ < "$config_ini" \ > "$fs_ndb/config.ini" fi diff --git a/storage/ndb/include/kernel/ndb_limits.h b/storage/ndb/include/kernel/ndb_limits.h index 11c429463ef..3f46f3802c7 100644 --- a/storage/ndb/include/kernel/ndb_limits.h +++ b/storage/ndb/include/kernel/ndb_limits.h @@ -141,4 +141,16 @@ */ #define NDB_SECTION_SEGMENT_SZ 60 +/* + * Restore Buffer in pages + * 4M + */ +#define LCP_RESTORE_BUFFER (4*32) + +/* + * Log buffer pages + * 8M + */ +#define LGMAN_LOG_BUFFER (8*32) + #endif diff --git a/storage/ndb/include/mgmapi/mgmapi_config_parameters.h b/storage/ndb/include/mgmapi/mgmapi_config_parameters.h index c257a61bcab..c2524cddfc3 100644 --- a/storage/ndb/include/mgmapi/mgmapi_config_parameters.h +++ b/storage/ndb/include/mgmapi/mgmapi_config_parameters.h @@ -85,6 +85,8 @@ #define CFG_DB_MAX_OPEN_FILES 159 +#define CFG_DB_DISK_PAGE_BUFFER_MEMORY 160 + #define CFG_NODE_ARBIT_RANK 200 #define CFG_NODE_ARBIT_DELAY 201 diff --git a/storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp b/storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp index 7b6ebd76b33..123b57ee31d 100644 --- a/storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp +++ b/storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp @@ -93,7 +93,6 @@ Cmvmi::Cmvmi(const Configuration & conf) : addRecSignal(GSN_TESTSIG, &Cmvmi::execTESTSIG); subscriberPool.setSize(5); - m_global_page_pool.setSize(1024+256, true); const ndb_mgm_configuration_iterator * db = theConfig.getOwnConfigIterator(); for(unsigned j = 0; j 0) + { + page_buffer += LGMAN_LOG_BUFFER; + } + page_buffer += LCP_RESTORE_BUFFER; + m_global_page_pool.setSize(page_buffer + 64, true); + ReadConfigConf * conf = (ReadConfigConf*)signal->getDataPtrSend(); conf->senderRef = reference(); conf->senderData = senderData; diff --git a/storage/ndb/src/kernel/blocks/pgman.cpp b/storage/ndb/src/kernel/blocks/pgman.cpp index 7525f9c2402..e7285fc7058 100644 --- a/storage/ndb/src/kernel/blocks/pgman.cpp +++ b/storage/ndb/src/kernel/blocks/pgman.cpp @@ -84,8 +84,6 @@ Pgman::Pgman(const Configuration & conf) : m_cleanup_ptr.i = RNIL; // should be a factor larger than number of pool pages - m_page_entry_pool.setSize(2000); - m_page_request_pool.setSize(10000); m_data_buffer_pool.setSize(1); m_page_hashlist.setSize(512); @@ -115,6 +113,18 @@ Pgman::execREAD_CONFIG_REQ(Signal* signal) theConfiguration.getOwnConfigIterator(); ndbrequire(p != 0); + Uint64 page_buffer = 64*1024*1024; + ndb_mgm_get_int64_parameter(p, CFG_DB_DISK_PAGE_BUFFER_MEMORY, &page_buffer); + + if (page_buffer > 0) + { + page_buffer /= GLOBAL_PAGE_SIZE; // in pages + m_page_entry_pool.setSize(2*page_buffer); + m_page_request_pool.setSize(10000); + m_param.m_max_pages = page_buffer; + m_param.m_max_hot_pages = (page_buffer * 9) / 10; + } + ReadConfigConf * conf = (ReadConfigConf*)signal->getDataPtrSend(); conf->senderRef = reference(); conf->senderData = senderData; diff --git a/storage/ndb/src/kernel/blocks/restore.cpp b/storage/ndb/src/kernel/blocks/restore.cpp index c4cac7abe74..2f4ed55c072 100644 --- a/storage/ndb/src/kernel/blocks/restore.cpp +++ b/storage/ndb/src/kernel/blocks/restore.cpp @@ -31,7 +31,7 @@ #include #include -#define PAGES (4*32) +#define PAGES LCP_RESTORE_BUFFER Restore::Restore(const Configuration & conf) : SimulatedBlock(RESTORE, conf), diff --git a/storage/ndb/src/mgmsrv/ConfigInfo.cpp b/storage/ndb/src/mgmsrv/ConfigInfo.cpp index 817943f5e51..b2592c0deea 100644 --- a/storage/ndb/src/mgmsrv/ConfigInfo.cpp +++ b/storage/ndb/src/mgmsrv/ConfigInfo.cpp @@ -760,6 +760,18 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { "512k", STR_VALUE(MAX_INT_RNIL)}, + { + CFG_DB_DISK_PAGE_BUFFER_MEMORY, + "DiskPageBufferMemory", + DB_TOKEN, + "Number bytes on each "DB_TOKEN_PRINT" node allocated for disk page buffer cache", + ConfigInfo::CI_USED, + false, + ConfigInfo::CI_INT64, + "64M", + "4M", + "1024G" }, + { CFG_DB_START_PARTIAL_TIMEOUT, "StartPartialTimeout",