An error occurred fetching the project authors.
  1. 05 Nov, 2010 1 commit
    • Alfranio Correia's avatar
      BUG#57275 binlog_cache_size affects trx- and stmt-cache and gets twice the expected memory · 3f5a9c7e
      Alfranio Correia authored
            
      After the WL#2687, the binlog_cache_size and max_binlog_cache_size affect both the
      stmt-cache and the trx-cache. This means that the resource used is twice the amount
      expected/defined by the user.
            
      The binlog_cache_use is incremented when the stmt-cache or the trx-cache is used
      and binlog_cache_disk_use is incremented when the disk space from the stmt-cache or the
      trx-cache is used. This behavior does not allow to distinguish which cache may be harming
      performance due to the extra disk accesses and needs to have its in-memory cache
      increased.
            
      To fix the problem, we introduced two new options and status variables related to the
      stmt-cache:
            
        Options:
            
          . binlog_stmt_cache_size
          . max_binlog_stmt_cache_size
            
          Status Variables:
            
          . binlog_stmt_cache_use
          . binlog_stmt_cache_disk_use
      
      So there are
      
        . binlog_cache_size that defines the size of the transactional cache for
        updates to transactional engines for the binary log.
      
        . binlog_stmt_cache_size that defines the size of the statement cache for
        updates to non-transactional engines for the binary log.
      
        . max_binlog_cache_size that sets the total size of the transactional
        cache.
      
        . max_binlog_stmt_cache_size that sets the total size of the statement
        cache.
      
        . binlog_cache_use that identifies the number of transactions that used the
        temporary transactional binary log cache.
      
        . binlog_cache_disk_use that identifies the number of transactions that used
        the temporary transactional binary log cache but that exceeded the value of
        binlog_cache_size.
      
        . binlog_stmt_cache_use that identifies the number of statements that used the
        temporary non-transactional binary log cache.
      
        . binlog_stmt_cache_disk_use that identifies the number of statements that used
        the temporary non-transactional binary log cache but that exceeded the value of
        binlog_stmt_cache_size.
      
      include/my_sys.h:
        Updated message on disk_writes' usage.
      mysql-test/extra/binlog_tests/binlog_cache_stat.test:
        Updated the test case and added code to check the new status variables
        binlog_stmt_cache_use and binlog_stmt_cache_disk_use.
      mysql-test/extra/rpl_tests/rpl_binlog_max_cache_size.test:
        Updated the test case to use the new system variables max_binlog_stmt_cache_size and binlog_stmt_cache_size.
      mysql-test/r/mysqld--help-notwin.result:
        Updated the result file.
      mysql-test/suite/binlog/r/binlog_mixed_cache_stat.result:
        Updated the result file.
      mysql-test/suite/binlog/r/binlog_row_cache_stat.result:
        Updated the result file.
      mysql-test/suite/binlog/r/binlog_stm_cache_stat.result:
        Updated the result file.
      mysql-test/suite/rpl/r/rpl_mixed_binlog_max_cache_size.result:
        Update the result file.
      mysql-test/suite/rpl/r/rpl_row_binlog_max_cache_size.result:
        Update the result file.
      mysql-test/suite/rpl/r/rpl_stm_binlog_max_cache_size.result:
        Updated the result file.
      mysql-test/suite/sys_vars/inc/binlog_stmt_cache_size_basic.inc:
        Added a test case to check the binlog_stmt_cache_size.
      mysql-test/suite/sys_vars/r/binlog_stmt_cache_size_basic_32.result:
        Updated the result file.
      mysql-test/suite/sys_vars/r/binlog_stmt_cache_size_basic_64.result:
        Updated the result file.
      mysql-test/suite/sys_vars/r/max_binlog_stmt_cache_size_basic.result:
        Updated the result file.
      mysql-test/suite/sys_vars/t/binlog_stmt_cache_size_basic_32.test:
        Added a test case to check the binlog_stmt_cache_size.
      mysql-test/suite/sys_vars/t/binlog_stmt_cache_size_basic_64.test:
        Added a test case to check the binlog_stmt_cache_size.
      mysql-test/suite/sys_vars/t/max_binlog_cache_size_func-master.opt:
        Removed because there is no test case max_binlog_cache_size_func.
      mysql-test/suite/sys_vars/t/max_binlog_stmt_cache_size_basic.test:
        Added a test case to check the system variable max_binlog_stmt_cache_size.
      sql/log.cc:
        There two main changes in here:
        
          . Changed the set_write_error() as an error message is set according
          to the type of the cache.
        
          . Created the function set_binlog_cache_info where references to the
          appropriate status and system variables are set and the server can
          smoothly compute statistics and set the maximum size for each cache.
      sql/log.h:
        Changed the signature of the function in order to identify the error message
        to be printed out as there is a different error code for each type of cache.
      sql/mysqld.cc:
        Added new status variables binlog_stmt_cache_use and binlog_stmt_cache_disk_use.
      sql/mysqld.h:
        Added new system variables max_binlog_stmt_cache_size and binlog_stmt_cache_size.
      sql/share/errmsg-utf8.txt:
        Added new error message related to the statement cache.
      sql/sys_vars.cc:
        Added new system variables max_binlog_stmt_cache_size and binlog_stmt_cache_size.
      3f5a9c7e
  2. 06 Oct, 2010 1 commit
    • Alfranio Correia's avatar
      BUG#56343 binlog_cache_use status is bigger than expected · 8504580c
      Alfranio Correia authored
      The binlog_cache_use is incremented twice when changes to a transactional table
      are committed, i.e. TC_LOG_BINLOG::log_xid calls is called. The problem happens
      because log_xid calls both binlog_flush_stmt_cache and binlog_flush_trx_cache
      without checking if such caches are empty thus unintentionally increasing the
      binlog_cache_use value twice.
      
      To fix the problem we avoided incrementing the binlog_cache_use if the cache is
      empty. We also decided to increment binlog_cache_use when the cache is truncated
      as the cache is used although its content is discarded and is not written to the
      binary log.
      
      Note that binlog_cache_use is incremented for both types of cache, transactional
      and non-transactional and that the behavior presented in this patch also applies
      to the binlog_cache_disk_use.
      
      Finally, we re-organized the code around the functions binlog_flush_trx_cache and
      binlog_flush_stmt_cache.
      
      mysql-test/extra/binlog_tests/binlog_cache_stat.test:
        Updated the test case with comments and additional tests to check both
        transactional and non-transactional changes and what happens when a 
        is transaction either committed or aborted.
      mysql-test/suite/binlog/r/binlog_innodb.result:
        Updated the result file.
      mysql-test/suite/binlog/r/binlog_mixed_cache_stat.result:
        Updated the result file.
      mysql-test/suite/binlog/r/binlog_row_cache_stat.result:
        Updated the result file.
      mysql-test/suite/binlog/r/binlog_stm_cache_stat.result:
        Updated the result file.
      mysql-test/suite/binlog/t/binlog_mixed_cache_stat.test:
        Updated the test case with a new source file.
      mysql-test/suite/binlog/t/binlog_row_cache_stat.test:
        Updated the test case with a new source file.
      mysql-test/suite/binlog/t/binlog_stm_cache_stat.test:
        Updated the test case with a new source file.
      sql/log_event.cc:
        Introduced debug information to check if Query_log_event("BEGIN"),
        Query_log_event("COMMIT") and Query_log_event("ROLLBACK").
      sql/log_event.h:
        Guaranteed Xid_log_event is always classified as a transactional event.
      8504580c