This post comes from Daniel Nichter at the MySQL Performance Blog.
Like Ovais said in Implications of Metadata Locking Changes in MySQL 5.5, the hot topic these days is MySQL 5.6, but there was an important metadata locking change in MySQL 5.5. As I began to dig into the Percona Toolkitbug he reported concerning this change apropos pt-online-schema-change, I discovered something about lock_wait_timeout that shocked me. From the MySQL 5.5 docs for lock_wait_timeout:
This variable specifies the timeout in seconds for attempts to acquire metadata locks. The permissible values range from 1 to 31536000 (1 year). The default is 31536000.
Translation: by default, MySQL 5.5 will “meta-block” for 1 year! In my humble opinion, this is a bug, especially given the various subtle and sometimes quiet ways that metadata locking can lock the server as Ovais describes in his blog post. The default for innodb_lock_wait_timeout, by comparison, is 50 seconds. That’s reasonable, but 31536000 is not. I would only set a timeout, or any kind of wait or interval value, to such a high value to play a practical joke on someone.
Second, and finally, if: “This variable specifies the timeout in seconds for attempts to acquire metadata locks,” then why isn’t it called metadata_lock_wait_timeout?
In conclusion: be careful when upgrading to MySQL 5.5 because the solstices may pass before your DLL statement completes.