1. 20 Jan, 2018 15 commits
    • Sergey Vojtovich's avatar
      MVCC simplifications · 95070bf9
      Sergey Vojtovich authored
      Simplified away MVCC::get_oldest_view()
      Simplified away MVCC::get_view()
      Removed unused MVCC::view_release()
      95070bf9
    • Sergey Vojtovich's avatar
      Misc trx_sys scalability fixes · 90bf5567
      Sergey Vojtovich authored
      trx_erase_lists(): trx->read_view is owned by current thread and thus
      doesn't need trx_sys.mutex protection for reading it's value. Move
      trx->read_view check out of mutex
      
      trx_start_low(): moved assertion out of mutex.
      
      Call ReadView::creator_trx_id() directly: allows to inline this one-line
      method.
      90bf5567
    • Sergey Vojtovich's avatar
      Removed purge_trx_id_age and purge_view_trx_id_age · 64048baf
      Sergey Vojtovich authored
      These were unused status variables available in debug builds only.
      Also removed trx_sys.rw_max_trx_id: not used anymore.
      64048baf
    • Sergey Vojtovich's avatar
      Allocate trx_sys.mvcc at link time · db5bb785
      Sergey Vojtovich authored
      trx_sys.mvcc was allocated dynamically for no good reason.
      db5bb785
    • Marko Mäkelä's avatar
      Replace trx_sys_t* trx_sys with trx_sys_t trx_sys · f8882cce
      Marko Mäkelä authored
      There is only one transaction system object in InnoDB.
      Allocate the storage for it at link time, not at runtime.
      
      lock_rec_fetch_page(): Use the correct fetch mode BUF_GET.
      Pages may never be deallocated from a tablespace while
      record locks are pointing to them.
      f8882cce
    • Sergey Vojtovich's avatar
      MDEV-14756 - Remove trx_sys_t::rw_trx_list · 70782033
      Sergey Vojtovich authored
      Use atomic operations when accessing trx_sys_t::max_trx_id. We can't yet
      move trx_sys_t::get_new_trx_id() out of mutex because it must be updated
      atomically along with trx_sys_t::rw_trx_ids.
      70782033
    • Sergey Vojtovich's avatar
      MDEV-14756 - Remove trx_sys_t::rw_trx_list · c6d2842d
      Sergey Vojtovich authored
      Remove rw_trx_list.
      c6d2842d
    • Sergey Vojtovich's avatar
      MDEV-14756 - Remove trx_sys_t::rw_trx_list · a447980f
      Sergey Vojtovich authored
      Let lock_print_info_all_transactions() iterate rw_trx_hash instead of
      rw_trx_list.
      
      When printing info of locks for transactions, InnoDB monitor doesn't
      attempt to read relevant page from disk anymore. The code was prone
      to race conditions.
      
      Note that TrxListIterator didn't work as advertised: it iterated
      rw_trx_list only.
      a447980f
    • Sergey Vojtovich's avatar
      MDEV-14756 - Remove trx_sys_t::rw_trx_list · 886af392
      Sergey Vojtovich authored
      Let trx_rollback_recovered() iterate rw_trx_hash instead of rw_trx_list.
      886af392
    • Sergey Vojtovich's avatar
      MDEV-14756 - Remove trx_sys_t::rw_trx_list · 02270b44
      Sergey Vojtovich authored
      Let lock_validate_table_locks(), lock_rec_other_trx_holds_expl(),
      lock_table_locks_lookup(), trx_recover_for_mysql(), trx_get_trx_by_xid(),
      trx_roll_must_shutdown(), fetch_data_into_cache() iterate rw_trx_hash
      instead of rw_trx_list.
      02270b44
    • Sergey Vojtovich's avatar
      MDEV-14756 - Remove trx_sys_t::rw_trx_list · d8c0caad
      Sergey Vojtovich authored
      Removed trx_sys_validate_trx_list(): with rw_trx_hash elements are not
      required to be ordered by transaction id. Transaction state is now guarded
      by asserts in rw_trx_hash_t.
      d8c0caad
    • Sergey Vojtovich's avatar
      MDEV-14756 - Remove trx_sys_t::rw_trx_list · 900b0790
      Sergey Vojtovich authored
      Removed trx_sys_t::n_prepared_recovered_trx: never used.
      
      Removed trx_sys_t::n_prepared_trx: used only at shutdown, we can perfectly
      get this value from rw_trx_hash.
      900b0790
    • Sergey Vojtovich's avatar
      MDEV-14756 - Remove trx_sys_t::rw_trx_list · a0b385ea
      Sergey Vojtovich authored
      Determine minimum transaction id by iterating rw_trx_hash, not rw_trx_list.
      
      It is more expensive than previous implementation since it does linear
      search, especially if there're many concurrent transactions running. But in
      such case mutex is much bigger evil. And since it doesn't require
      trx_sys->mutex protection it scales better.
      
      For low concurrency performance difference is neglible.
      a0b385ea
    • Sergey Vojtovich's avatar
      MDEV-14756 - Remove trx_sys_t::rw_trx_list · 868c77df
      Sergey Vojtovich authored
      Replaced UT_LIST_GET_LEN(trx_sys->rw_trx_list) with
      trx_sys->rw_trx_hash.size().
      Moved freeing of trx objects at shutdown to rw_trx_hash destructor.
      Small clean-up in trx_rollback_recovered().
      868c77df
    • Sergey Vojtovich's avatar
      MDEV-14756 - Remove trx_sys_t::rw_trx_list · d09f1469
      Sergey Vojtovich authored
      Reduce divergence between trx_sys_t::rw_trx_hash and trx_sys_t::rw_trx_list
      by not adding recovered COMMITTED transactions to trx_sys_t::rw_trx_list.
      
      Such transactions are discarded immediately without creating trx object.
      
      This also required to split rollback and cleanup phases of recovery. To
      reflect these updates the following renames happened:
      trx_rollback_or_clean_all_recovered() -> trx_rollback_all_recovered()
      trx_rollback_or_clean_is_active -> trx_rollback_is_active
      trx_rollback_or_clean_recovered() -> trx_rollback_recovered()
      trx_cleanup_at_db_startup() -> trx_cleanup_recovered()
      
      Also removed a hack from lock_trx_release_locks(). Instead let recovery
      rollback thread to skip committed XA transactions.
      d09f1469
  2. 19 Jan, 2018 1 commit
  3. 18 Jan, 2018 2 commits
  4. 17 Jan, 2018 4 commits
    • Marko Mäkelä's avatar
      Merge bb-10.2-ext into 10.3 · 4ef2e430
      Marko Mäkelä authored
      4ef2e430
    • Marko Mäkelä's avatar
      Merge 10.2 into bb-10.2-ext · c6cd64f3
      Marko Mäkelä authored
      c6cd64f3
    • Marko Mäkelä's avatar
      Follow-up fix to MDEV-14585 Automatically remove #sql- tables in InnoDB dictionary during recovery · 656f66de
      Marko Mäkelä authored
      If InnoDB is killed while ALTER TABLE...ALGORITHM=COPY is in progress,
      after recovery there could be undo log records some records that were
      inserted into an intermediate copy of the table. Due to these undo log
      records, InnoDB would resurrect locks at recovery, and the intermediate
      table would be locked while we are trying to drop it. This would cause
      a call to row_rename_table_for_mysql(), either from
      row_mysql_drop_garbage_tables() or from the rollback of a RENAME
      operation that was part of the ALTER TABLE.
      
      row_rename_table_for_mysql(): Do not attempt to parse FOREIGN KEY
      constraints when renaming from #sql-something to #sql-something-else,
      because it does not make any sense.
      
      row_drop_table_for_mysql(): When deferring DROP TABLE due to locks,
      do not rename the table if its name already starts with the #sql-
      prefix, which is what row_mysql_drop_garbage_tables() uses.
      Previously, the too strict prefix #sql-ib was used, and some
      tables were renamed unnecessarily.
      656f66de
    • Marko Mäkelä's avatar
      Do not define unused function mark_blocks_free() · 04eef79b
      Marko Mäkelä authored
      Follow-up to commit 9ec19b9b
      04eef79b
  5. 16 Jan, 2018 18 commits