• Alfranio Correia's avatar
    BUG#46364 MyISAM transbuffer problems (NTM problem) · 0aa3aee0
    Alfranio Correia authored
    It is well-known that due to concurrency issues, a slave can become
    inconsistent when a transaction contains updates to both transaction and
    non-transactional tables in statement and mixed modes.
    
    In a nutshell, the current code-base tries to preserve causality among the
    statements by writing non-transactional statements to the txn-cache which
    is flushed upon commit. However, modifications done to non-transactional
    tables on behalf of a transaction become immediately visible to other
    connections but may not immediately get into the binary log and therefore
    consistency may be broken.
    
    In general, it is impossible to automatically detect causality/dependency
    among statements by just analyzing the statements sent to the server. This
    happen because dependency may be hidden in the application code and it is
    necessary to know a priori all the statements processed in the context of
    a transaction such as in a procedure. Moreover, even for the few cases that
    we could automatically address in the server, the computation effort
    required could make the approach infeasible.
    
    So, in this patch we introduce the option
        - "--binlog-direct-non-transactional-updates" that can be used to bypass
        the current behavior in order to write directly to binary log statements
        that change non-transactional tables.
    0aa3aee0
mysqld.cc 321 KB