1. 24 Nov, 2020 5 commits
    • Marko Mäkelä's avatar
      MDEV-24167: Replace trx_i_s_cache_lock · 63dd2a97
      Marko Mäkelä authored
      63dd2a97
    • Marko Mäkelä's avatar
      MDEV-24167: Use lightweight srw_lock for btr_search_latch · c561f9e6
      Marko Mäkelä authored
      Many InnoDB rw-locks unnecessarily depend on the complex
      InnoDB rw_lock_t implementation that support the SX lock mode
      as well as recursive acquisition of X or SX locks.
      One of them is the bunch of adaptive hash index search latches,
      instrumented as btr_search_latch in PERFORMANCE_SCHEMA.
      Let us introduce a simpler lock for those in order to
      reduce overhead.
      
      srw_lock: A simple read-write lock that does not support recursion.
      On Microsoft Windows, this wraps SRWLOCK, only adding
      runtime overhead if PERFORMANCE_SCHEMA is enabled.
      On Linux (all architectures), this is implemented with
      std::atomic<uint32_t> and the futex system call.
      On other platforms, we will wrap mysql_rwlock_t with
      zero runtime overhead.
      
      The PERFORMANCE_SCHEMA instrumentation differs
      from InnoDB rw_lock_t in that we will only invoke
      PSI_RWLOCK_CALL(start_rwlock_wrwait) or
      PSI_RWLOCK_CALL(start_rwlock_rdwait)
      if there is an actual conflict.
      c561f9e6
    • Marko Mäkelä's avatar
      Merge 10.5 into 10.6 · f87e4b4e
      Marko Mäkelä authored
      f87e4b4e
    • Marko Mäkelä's avatar
      MDEV-24271 rw_lock::read_lock_yield() may cause writer starvation · 1b12e251
      Marko Mäkelä authored
      The greedy fetch_add(1) approach of read_trylock() may cause
      starvation of a waiting write lock request. Let us use a
      compare-and-swap for the read lock acquisition in order to
      guarantee the progress of writers.
      1b12e251
    • Marko Mäkelä's avatar
      After-merge fix: Update ColumnStore · c2ea036b
      Marko Mäkelä authored
      c2ea036b
  2. 23 Nov, 2020 4 commits
  3. 20 Nov, 2020 5 commits
    • Marko Mäkelä's avatar
      MDEV-24167: Remove PFS instrumentation of buf_block_t · 1e5d989d
      Marko Mäkelä authored
      We always defined PFS_SKIP_BUFFER_MUTEX_RWLOCK, that is,
      the latches of the buffer pool blocks were never instrumented
      in PERFORMANCE_SCHEMA.
      
      For some reason, the debug_latch (which enforce proper usage of
      buffer-fixing in debug builds) was instrumented.
      1e5d989d
    • Marko Mäkelä's avatar
      MDEV-22871 fixup: Relax a debug assertion · 156cb94b
      Marko Mäkelä authored
      In commit bf3c862f we introduced
      an assertion that may dereference a null pointer.
      
      This regression was caught by running the following:
      ./mtr --parallel=auto --suite=innodb \
      --mysqld=--loose-innodb-adaptive-hash-index
      
      The adaptive hash index is disabled by default since
      commit 88cdfc5c (MDEV-20487)
      and hence the problem was not caught earlier.
      156cb94b
    • Marko Mäkelä's avatar
      Run innodb_wl6326_big only in debug builds · 3c8ecb5b
      Marko Mäkelä authored
      The test seems to deterministically fail on RelWithDebInfo builds
      due to a timeout in wait_condition.inc.
      
      According to Matthias Leich (the original author of the test),
      the failure rate would reduce if we disabled the purge of
      transaction history by setting innodb_force_recovery=2.
      
      For now, let us run this stress test on debug builds only.
      3c8ecb5b
    • Marko Mäkelä's avatar
      Cleanup: Fix build problems with the Intel compiler · 8ac19be8
      Marko Mäkelä authored
      fil_space_t::flush_low(): Define and declare without inline.
      
      ut_is_2pow(): Remove UNIV_LIKELY. This is almost exclusively
      used in debug assertions. UNIV_LIKELY is not compatible with
      static_assert in some compilers.
      8ac19be8
    • Marko Mäkelä's avatar
      9c455945
  4. 19 Nov, 2020 2 commits
  5. 18 Nov, 2020 1 commit
    • Marko Mäkelä's avatar
      MDEV-24224 Gap lock on delete in 10.5 using READ COMMITTED · 33d41167
      Marko Mäkelä authored
      When MDEV-19544 (commit 1a6f4704)
      simplified the initialization of the local variable
      set_also_gap_locks, an inadvertent change was included.
      Essentially, all code branches that are executed when
      set_also_gap_locks hold must also ensure that
      trx->isolation_level > TRX_ISO_READ_COMMITTED holds.
      This was being violated in a few code paths.
      
      It turns out that there is an even simpler fix: Remove the test
      of thd_is_select() completely. In that way, the first part of
      UPDATE or DELETE should work exactly like SELECT...FOR UPDATE.
      
      thd_is_select(): Remove.
      33d41167
  6. 17 Nov, 2020 8 commits
  7. 16 Nov, 2020 7 commits
  8. 14 Nov, 2020 8 commits