• Dmitry Lenev's avatar
    Patch that changes metadata locking subsystem to use mutex per lock and · a63f8480
    Dmitry Lenev authored
    condition variable per context instead of one mutex and one conditional
    variable for the whole subsystem.
    
    This should increase concurrency in this subsystem.
    
    It also opens the way for further changes which are necessary to solve
    such bugs as bug #46272 "MySQL 5.4.4, new MDL: unnecessary deadlock"
    and bug #37346 "innodb does not detect deadlock between update and alter
    table".
    
    Two other notable changes done by this patch:
    
    - MDL subsystem no longer implicitly acquires global intention exclusive
      metadata lock when per-object metadata lock is acquired. Now this has
      to be done by explicit calls outside of MDL subsystem.
    - Instead of using separate MDL_context for opening system tables/tables
      for purposes of I_S we now create MDL savepoint in the main context
      before opening tables and rollback to this savepoint after closing
      them. This means that it is now possible to get ER_LOCK_DEADLOCK error
      even not inside a transaction. This might happen in unlikely case when
      one runs DDL on one of system tables while also running DDL on some
      other tables. Cases when this ER_LOCK_DEADLOCK error is not justified
      will be addressed by advanced deadlock detector for MDL subsystem which
      we plan to implement.
    a63f8480
sql_help.cc 23.1 KB