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

- add config param to have better behavior with large tables
parent a09ef976
......@@ -118,6 +118,8 @@
#define CFG_DB_O_DIRECT 168
#define CFG_DB_MAX_ALLOCATE 169
#define CFG_DB_SGA 198 /* super pool mem */
#define CFG_DB_DATA_MEM_2 199 /* used in special build in 5.1 */
......
......@@ -2618,6 +2618,7 @@ private:
ArrayPool<Page> c_page_pool;
Uint32 cnoOfAllocatedPages;
Uint32 m_max_allocate_pages;
Tablerec *tablerec;
Uint32 cnoOfTablerec;
......
......@@ -308,6 +308,12 @@ void Dbtup::execREAD_CONFIG_REQ(Signal* signal)
Uint32 noOfTriggers= 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));
initPageRangeSize(tmp);
ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_TUP_TABLE, &cnoOfTablerec));
......
......@@ -434,6 +434,11 @@ void Dbtup::allocMoreFragPages(Fragrecord* const regFragPtr)
// We will grow by 18.75% plus two more additional pages to grow
// a little bit quicker in the beginning.
/* -----------------------------------------------------------------*/
if (noAllocPages > m_max_allocate_pages)
{
noAllocPages = m_max_allocate_pages;
}
Uint32 allocated = allocFragPages(regFragPtr, noAllocPages);
regFragPtr->noOfPagesToGrow += allocated;
}//Dbtup::allocMoreFragPages()
......
......@@ -1313,6 +1313,18 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"0",
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,
"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