- 24 Nov, 2020 5 commits
-
-
Marko Mäkelä authored
-
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.
-
Marko Mäkelä authored
-
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.
-
Marko Mäkelä authored
-
- 23 Nov, 2020 4 commits
-
-
Vladislav Vaintroub authored
-
Vladislav Vaintroub authored
Do not resend metadata, if metadata does not change between prepare and execute of prepared statement, or between executes. Currently, metadata of *every* prepared statement will be checksummed, and change is detected once checksum changes. This is not from ideal, performance-wise. The code for better/faster detection of unchanged metadata, is already in place, but currently disabled due to PS bugs, such as MDEV-23913.
-
Marko Mäkelä authored
-
Marko Mäkelä authored
Since commit 30ea63b7 we actually depend on futex on Linux. Also, we depend on std::atomic for even longer.
-
- 20 Nov, 2020 5 commits
-
-
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.
-
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.
-
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.
-
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.
-
Marko Mäkelä authored
-
- 19 Nov, 2020 2 commits
-
-
Roman Nozdrin authored
pipeline in community BB Fix for rebuild from source step Disable MCS on i386|i686 platforms This patch puts MCS debian packaging files and part of debian/control into the engine directory
-
Daniel Black authored
Centos/RHEL7 have the MAP_HUGE_SHIFT constant defined in linux/mman.h which needed to get included.
-
- 18 Nov, 2020 1 commit
-
-
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.
-
- 17 Nov, 2020 8 commits
-
-
Oleksandr Byelkin authored
The idea of Alexander Barkov: to add name derived as a slect id.
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
Starting with commit 7cffb5f6 (MDEV-23399) the function buf_flush_page() will first acquire block->lock and only after that invoke set_io_fix(). Before that, it was possible to reach a livelock between buf_page_create() and buf_flush_page(). buf_page_create(): Directly try acquiring the exclusive page latch without checking whether the page is io-fixed or buffer-fixed. (As a matter of fact, the have_x_latch() check is not strictly necessary, because we still support recursive X-latches.) In case of a latch conflict, wait while allowing buf_page_write_complete() to acquire buf_pool.mutex and release the block->lock. An attempt to wait for exclusive block->lock while holding buf_pool.mutex would lead to a hang in the tests parts.part_supported_sql_func_innodb and stress.ddl_innodb, due to a deadlock between buf_page_write_complete() and buf_page_create(). Similarly, in case of an I/O fixed compressed-only ROW_FORMAT=COMPRESSED page, we will sleep before retrying. In both cases, we will sleep for 1ms or until a flush batch is completed.
-
Dmitry Shulga authored
The data member tv_usec of the struct timeval is declared as suseconds_t on MacOS. Size of suseconds_t is 4 bytes. On the other hand, size of ulong is 8 bytes on 64-bit MacOS, so attempt to assign a value of wider type (usec) to a value (tv_usec) of narrower type leads to error.
-
Marko Mäkelä authored
-
Daniele Sciascia authored
-
Sujatha authored
MDEV-23610: Slave user can't run "SHOW SLAVE STATUS" anymore after upgrade to 10.5, mysql_upgrade should take of that Post push fix. Update version to 10.5.8.
-
- 16 Nov, 2020 7 commits
-
-
Daniel Black authored
This allows MariaDB to compile on old (limits to >2.6.32) linux kernel versions. This warns that attempts to use large pages will rely on implict kernel determination.
-
Daniel Black authored
This reverts commit 6cf8f05f. Original patch assumed that MAP_HUGETLB as consistent across achitectures which isn't the case. Defining it unconditionally broke large pages on every achitecutre where the value differed from x86_64. With the EOL for Centos/RHEL6 announced in 10.5.7, <3.8 linux kernels are no longer supported.
-
Daniel Black authored
Account for variety of mips, hppa, solaris and other messages. Copied from rpl.rpl_drop_db test.
-
Monty authored
-
Daniele Sciascia authored
-
Sujatha authored
MDEV-23610: Slave user can't run "SHOW SLAVE STATUS" anymore after upgrade to 10.5, mysql_upgrade should take of that Fixing a post push test issue.
-
Sujatha authored
MDEV-23610: Slave user can't run "SHOW SLAVE STATUS" anymore after upgrade to 10.5, mysql_upgrade should take of that Add a new privilege "SLAVE MONITOR" which will grant user the permission to execute "SHOW SLAVE STATUS" and "SHOW RELAYLOG EVENTS" commands. SHOW SLAVE STATUS requires either SLAVE MONITOR/SUPER SHOW RELAYLOG EVENTS requires SLAVE MONITOR privilege.
-
- 14 Nov, 2020 8 commits
-
-
Roman Nozdrin authored
into the engine directory
-
Oleksandr Byelkin authored
-
Roman Nozdrin authored
into the engine directory
-
Oleksandr Byelkin authored
remove version data from the test output
-
Oleksandr Byelkin authored
-
Oleksandr Byelkin authored
-
Oleksandr Byelkin authored
-
Oleksandr Byelkin authored
-