Commit 2606bb1c authored by tomas@whalegate.ndb.mysql.com's avatar tomas@whalegate.ndb.mysql.com
Browse files

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

- add config param to have better behavior with large tables
parent a09ef976
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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 */

+1 −0
Original line number Diff line number Diff line
@@ -2618,6 +2618,7 @@ private:

  ArrayPool<Page> c_page_pool;
  Uint32 cnoOfAllocatedPages;
  Uint32 m_max_allocate_pages;
  
  Tablerec *tablerec;
  Uint32 cnoOfTablerec;
+6 −0
Original line number Diff line number Diff line
@@ -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));
+5 −0
Original line number Diff line number Diff line
@@ -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()
+12 −0
Original line number Diff line number Diff line
@@ -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",