Skip to content
  • Venkatesh Duggirala's avatar
    efc00255
    Bug#19704825 TEMPORARY SLAVE TYPE CONVERSION TABLES RELEASED TO EARLY · efc00255
    Venkatesh Duggirala authored
    Problem: The memory used in preparing slave type conversion temporary table
    is getting released early and causing unexpected results
          
    Analysis: As part of bug#18770469 fix, We introduced an event
    m_event_mem_root (a special mem root), added to Log_event
    class. While server is creating the temporary table, the memory needed
    is allocated from this special mem root which will be freed in ~Log_event()
    i.e., the scope of this memroot is one event. But it could happen
    that in some cases, server might need to access this
    conversion temporary table for next following event. 
    For eg: A nested row event (insert is causing insert in a trigger)
    In this situation, the memory is getting delayed too early 
    and causing issues when the server is trying to access the temporary
    table inside the trigger.
          
    Fix: We cannot use a mem_root whose scope is limited to an event
    execution in this situation. With some further analysis, found out
    that clearing a thd->mem_root at the end of statement (upon applying
    an event which has STMT_END_F flag) will solve out of memory problem
    while running a long transactions (bug#18770469) and will also
    make this reported problem (memory is getting released early) to go away.
    efc00255
    Bug#19704825 TEMPORARY SLAVE TYPE CONVERSION TABLES RELEASED TO EARLY
    Venkatesh Duggirala authored
    Problem: The memory used in preparing slave type conversion temporary table
    is getting released early and causing unexpected results
          
    Analysis: As part of bug#18770469 fix, We introduced an event
    m_event_mem_root (a special mem root), added to Log_event
    class. While server is creating the temporary table, the memory needed
    is allocated from this special mem root which will be freed in ~Log_event()
    i.e., the scope of this memroot is one event. But it could happen
    that in some cases, server might need to access this
    conversion temporary table for next following event. 
    For eg: A nested row event (insert is causing insert in a trigger)
    In this situation, the memory is getting delayed too early 
    and causing issues when the server is trying to access the temporary
    table inside the trigger.
          
    Fix: We cannot use a mem_root whose scope is limited to an event
    execution in this situation. With some further analysis, found out
    that clearing a thd->mem_root at the end of statement (upon applying
    an event which has STMT_END_F flag) will solve out of memory problem
    while running a long transactions (bug#18770469) and will also
    make this reported problem (memory is getting released early) to go away.
Loading