A week or so ago at the MySQL conference, I visited one of the
backup vendors in the Expo Hall. I started to chat with them
about their MySQL backup product. One of the representatives told
me that their backup product uses FLUSH TABLES WITH READ LOCK,
which he admitted takes a global lock on the whole database
server. However, he proudly told me that it only takes a lock for
"a couple of milliseconds." This is a harmful misconception that
many backup vendors seem to hold dear.
The truth is, this command can take a lock for an indeterminate
amount of time. It might complete in milliseconds on a test
system in a laboratory, but I have seen it take an extremely long
time on production systems, measured in many minutes, or
potentially even hours. And during this time, the server will get
completely blocked (not just read-only!) To understand why, let's
look at what this command actually does. There are several
important parts of processing …
[Read more]