• Sergey Vojtovich's avatar
    MDEV-7660 - MySQL WL#6671 "Improve scalability by not using thr_lock.c locks · d665e79c
    Sergey Vojtovich authored
                for InnoDB tables"
    
    Don't use thr_lock.c locks for InnoDB tables. Below is list of changes that
    were needed to implement this:
    - HANDLER OPEN acquireis MDL_SHARED_READ instead of MDL_SHARED
    - HANDLER READ calls external_lock() even if SE is not going to be locked by
      THR_LOCK
    - InnoDB lock wait timeouts are now honored which are much shorter by default
      than server lock wait timeouts (1 year vs 50 seconds)
    - with @@autocommit= 1 LOCK TABLES disables autocommit implicitely, though
      user still sees @@autocommt= 1
    - the above starts implicit transaction
    - transactions started by LOCK TABLES are now rolled back on disconnect
      (previously everything was committed due to autocommit)
    - transactions started by LOCK TABLES are now rolled back by ROLLBACK
      (previously everything was committed due to autocommit)
    - it is now impossible to change BINLOG_FORMAT under LOCK TABLES (at least
      to statement) due to running transaction
    - LOCK TABLES WRITE is additionally handled by MDL
    - ...in contrast LOCK TABLES READ protection against DML is pure InnoDB
    - combining transactional and non-transactional tables under LOCK TABLES
      may cause rolled back changes in transactional table and "committed"
      changes in non-transactional table
    - user may disable innodb_table_locks, which will cause LOCK TABLES to be
      noop basically
    
    Removed tests for BUG#45143 and BUG#55930 which cover InnoDB + THR_LOCK. To
    operate properly these tests require code flow to go through THR_LOCK debug
    sync points, which is not the case after this patch. These tests are removed
    by WL#6671 as well. An alternative is to port them to different storage engine.
    d665e79c
handler.inc 38 KB