• unknown's avatar
    Fix for bug #25966 "2MB per second endless memory consumption after LOCK · cdd2a2e4
    unknown authored
    TABLE ... WRITE".
    
    Memory and CPU hogging occured when connection which had to wait for table
    lock was serviced by thread which previously serviced connection that was
    killed (note that connections can reuse threads if thread cache is enabled).
    One possible scenario which exposed this problem was when thread which
    provided binlog dump to replication slave was implicitly/automatically
    killed when the same slave reconnected and started pulling data through
    different thread/connection.
    The problem also occured when one killed particular query in connection
    (using KILL QUERY) and later this connection had to wait for some table
    lock.
    
    This problem was caused by the fact that thread-specific mysys_var::abort
    variable, which indicates that waiting operations on mysys layer should
    be aborted (this includes waiting for table locks), was set by kill
    operation but was never reset back. So this value was "inherited" by the
    following statements or even other connections (which reused the same
    physical thread). Such discrepancy between this variable and THD::killed
    flag broke logic on SQL-layer and caused CPU and memory hogging.
    
    This patch tries to fix this problem by properly resetting this member.
    
    There is no test-case associated with this patch since it is hard to test
    for memory/CPU hogging conditions in our test-suite.
    
    
    sql/mysqld.cc:
      We should not forget to reset THD::mysys_var::abort after kill operation
      if we are going to use thread to which this operation was applied for
      handling of other connections.
    sql/sp_head.cc:
      We should not forget to reset THD::mysys_var::abort after kill operation
      if we are going to use thread to which this operation was applied for
      handling of further statements.
    sql/sql_parse.cc:
      We should not forget to reset THD::mysys_var::abort after kill operation
      if we are going to use thread to which this operation was applied for
      handling of further statements.
    cdd2a2e4
sql_parse.cc 225 KB