1. 25 Nov, 2020 4 commits
    • Marko Mäkelä's avatar
    • Marko Mäkelä's avatar
      4a22056c
    • Marko Mäkelä's avatar
      MDEV-24270: Collect multiple completed events at a time · 6479006e
      Marko Mäkelä authored
      tpool::aio::N_PENDING: Replaces OS_AIO_N_PENDING_IOS_PER_THREAD.
      This limits two similar things: the number of outstanding requests
      that a thread may io_submit(), and the number of completed requests
      collected at a time by io_getevents().
      6479006e
    • Marko Mäkelä's avatar
      MDEV-24270 Misuse of io_getevents() causes wake-ups at least twice per second · 7a9405e3
      Marko Mäkelä authored
      In the asynchronous I/O interface, InnoDB is invoking io_getevents()
      with a timeout value of half a second, and requesting exactly 1 event
      at a time.
      
      The reason to have such a short timeout is to facilitate shutdown.
      
      We can do better: Use an infinite timeout, wait for a larger maximum
      number of events. On shutdown, we will invoke io_destroy(), which
      should lead to the io_getevents system call reporting EINVAL.
      
      my_getevents(): Reimplement the libaio io_getevents() by only invoking
      the system call. The library implementation would try to elide the
      system call and return 0 immediately if aio_ring_is_empty() holds.
      Here, we do want a blocking system call, not 100% CPU usage. Neither
      do we want the aio_ring_is_empty() trigger SIGSEGV because it is
      dereferencing some memory that was freed by io_destroy().
      7a9405e3
  2. 24 Nov, 2020 1 commit
  3. 23 Nov, 2020 1 commit
  4. 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
  5. 19 Nov, 2020 2 commits
  6. 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
  7. 17 Nov, 2020 7 commits
  8. 16 Nov, 2020 7 commits
  9. 14 Nov, 2020 6 commits
  10. 13 Nov, 2020 6 commits