MySQL 8.0 now supports the thread sanitizer.
This is good news as the thread
sanitizer provides MySQL developers another tool to help find
bugs in the multi-threaded MySQL server. What happens when
we build MySQL 8.0 with the thread sanitizer enabled and try to
run some basic MySQL tests? Unfortunately, no MySQL tests
run since the MySQL bootstrap fails with lots of data races and
other issues raised by the thread sanitizer. When these
issues are suppressed, some of the basic MySQL and InnoDB tests
pass. Some of these issues are real bugs and need to be
investigated.
Both gcc 6.1 and clang 3.9 support the thread sanitizer.
Just add the 'WITH_TSAN=ON' cmake option when
configuring and building MySQL 8.0, and the MySQL code will be
compiled with the …
The "mysql_real_connect" function is used by MySQL clients, including multi-threaded clients, to connect to a MySQL server. The "mysql_real_connect" function is allowed to be run by concurrent threads without application level serialization. Unfortunately, the thread sanitizer found a data race in the "mysql_real_connect" function when processing the …
[Read more]
InnoDB and the Thread
Sanitizer do not work well together in MySQL 5.7. There are hundreds of possible
data races reported by the Thread Sanitizer in the InnoDB code
for the simplest case of initializing the MySQL server and
shutting it down. Luckily, most of these data races are
benign. The problem of finding an interesting data race in
the InnoDB software is similar to finding evidence of a
sub-atomic particle in a particle accelerator; many Thread
Sanitizer events must be analyzed before something interesting is
found.
One example of a benign data race is InnoDB's implementation of
fuzzy counters. A …
This blog continues the investigation into possible data races in the MySQL server reported by the Thread Sanitizer. The previous blog investigated several possible data races that were detected when the MySQL server is initialized. This blog investigates three data races in the performance schema that are reported when the MySQL server is shut down. The first data race is a racy increment of thread statistics. The second data race is a problem that may leave the state of the performance schema memory allocator incorrect. The final data race is in the lock …
[Read more]The MySQL server is a large multi-threaded program primarily written in the C++ programming language. Unfortunately, data races and deadlocks in concurrent C++ programs are common. Fortunately, the Thread Sanitizer can be used to find data races and deadlocks. MySQL 5.7 does not support the Thread Sanitizer, but is is easy to add to the MySQL configuration using a simple build procedure. When MySQL 5.7 is built with the Thread Sanitizer and database …
[Read more]
Percona recently open sourced TokuBackup, a library that may be used to take a
snapshot of a set of files while these files are being changed by
a running application like MySQL or MongoDB. Making
TokuBackup open source allows a larger set of users to improve
and extend the software. This blog describes how the
Address Sanitizer and Thread Sanitizer found bugs in the TokuBackup
library.
The TokuBackup library is used by Percona Server for MySQL and …
When MySQL 5.7.8 is built and run with the Thread
Sanitizer, one of the first issues reported is a data race
with MySQL's use of pthread barrier wait and pthread barrier destroy. The data race
report is:
WARNING: ThreadSanitizer: data race (pid=30104)
Write of size 1 at 0x7ffd33054298 by main thread:
#0 pthread_barrier_destroy
/home/rfp/llvm/projects/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc:1236
(mysqld+0x000000d5a71b) #1 start_helper_thread …