Bug#29044 - memory buddy allocator "unoptimal" memory handling

- add config param to have better behavior with large tables
parent a09ef976
...@@ -118,6 +118,8 @@ ...@@ -118,6 +118,8 @@
#define CFG_DB_O_DIRECT 168 #define CFG_DB_O_DIRECT 168
#define CFG_DB_MAX_ALLOCATE 169
#define CFG_DB_SGA 198 /* super pool mem */ #define CFG_DB_SGA 198 /* super pool mem */
#define CFG_DB_DATA_MEM_2 199 /* used in special build in 5.1 */ #define CFG_DB_DATA_MEM_2 199 /* used in special build in 5.1 */
......
...@@ -2618,6 +2618,7 @@ private: ...@@ -2618,6 +2618,7 @@ private:
ArrayPool<Page> c_page_pool; ArrayPool<Page> c_page_pool;
Uint32 cnoOfAllocatedPages; Uint32 cnoOfAllocatedPages;
Uint32 m_max_allocate_pages;
Tablerec *tablerec; Tablerec *tablerec;
Uint32 cnoOfTablerec; Uint32 cnoOfTablerec;
......
...@@ -308,6 +308,12 @@ void Dbtup::execREAD_CONFIG_REQ(Signal* signal) ...@@ -308,6 +308,12 @@ void Dbtup::execREAD_CONFIG_REQ(Signal* signal)
Uint32 noOfTriggers= 0; Uint32 noOfTriggers= 0;
Uint32 tmp= 0; Uint32 tmp= 0;
if (ndb_mgm_get_int_parameter(p, CFG_DB_MAX_ALLOCATE, &tmp))
tmp = 32 * 1024 * 1024;
m_max_allocate_pages = (tmp + GLOBAL_PAGE_SIZE - 1) / GLOBAL_PAGE_SIZE;
tmp = 0;
ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_TUP_PAGE_RANGE, &tmp)); ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_TUP_PAGE_RANGE, &tmp));
initPageRangeSize(tmp); initPageRangeSize(tmp);
ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_TUP_TABLE, &cnoOfTablerec)); ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_TUP_TABLE, &cnoOfTablerec));
......
...@@ -434,6 +434,11 @@ void Dbtup::allocMoreFragPages(Fragrecord* const regFragPtr) ...@@ -434,6 +434,11 @@ void Dbtup::allocMoreFragPages(Fragrecord* const regFragPtr)
// We will grow by 18.75% plus two more additional pages to grow // We will grow by 18.75% plus two more additional pages to grow
// a little bit quicker in the beginning. // a little bit quicker in the beginning.
/* -----------------------------------------------------------------*/ /* -----------------------------------------------------------------*/
if (noAllocPages > m_max_allocate_pages)
{
noAllocPages = m_max_allocate_pages;
}
Uint32 allocated = allocFragPages(regFragPtr, noAllocPages); Uint32 allocated = allocFragPages(regFragPtr, noAllocPages);
regFragPtr->noOfPagesToGrow += allocated; regFragPtr->noOfPagesToGrow += allocated;
}//Dbtup::allocMoreFragPages() }//Dbtup::allocMoreFragPages()
......
...@@ -1313,6 +1313,18 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { ...@@ -1313,6 +1313,18 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"0", "0",
STR_VALUE(MAX_INT_RNIL) }, STR_VALUE(MAX_INT_RNIL) },
{
CFG_DB_MAX_ALLOCATE,
"MaxAllocate",
DB_TOKEN,
"Maximum size of allocation to use when allocating memory for tables",
ConfigInfo::CI_USED,
false,
ConfigInfo::CI_INT,
"32M",
"1M",
"1G" },
{ {
CFG_DB_MEMREPORT_FREQUENCY, CFG_DB_MEMREPORT_FREQUENCY,
"MemReportFrequency", "MemReportFrequency",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment