Bug #63144 | CREATE TABLE IF NOT EXISTS metadata lock is too restrictive | ||
---|---|---|---|
Submitted: | 8 Nov 2011 10:46 | Modified: | 20 Jun 2013 15:09 |
Reporter: | Michael Skulsky | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Locking | Severity: | S3 (Non-critical) |
Version: | 5.5.17 | OS: | Any |
Assigned to: | CPU Architecture: | Any |
[8 Nov 2011 10:46]
Michael Skulsky
[8 Nov 2011 11:09]
Valeriy Kravchuk
Thank you for the problem report. Verified with 5.5.17.
[8 Nov 2012 8:56]
Kaczmarek michal
Hello, Can you please provide a status on this issue? When is it going to be resolved? I am developing and maintaining an application which suffers from this problem. Issue description: In certain circumstances the application establishes 2 connections to the same MySQL database. These connections query the data simultaneously. Connection 1: SELECT * FROM TABLE_X Connection 2: CREATE TABLE_Y Result of which is the 'Waiting for table metadata lock' problem. The only cure for this when it happens is to stop and start the server. The workaround for us would be to run everything on on single connection in that case, but we get into other trouble then. Thanks, Michal
[12 Dec 2012 13:48]
MySQL Verification Team
Sorry, it is impossible to inform you when will this bug be fixed, for two reasons. First one is that it was not decided yet and second is Oracle policy, which is very sound. It is based on the fact that if we promise to have it fixed in the version xx.yy.zz and it does not get fixed, then it could lead to failed expectations and failed planning. There is also a possibility that this bug can not be fixed, id est that it is expected behavior. Please read the comments in the duplicate bug #67873. However, this will require re-thinking of how are certain locks taken, so it is possible that this behavior gets changed. But, not likely in 5.5, IMHO.
[11 Apr 2013 11:32]
Alex Davies
This bug has been fixed by Percona (although, not as of yet, in their actual binaries: https://bugs.launchpad.net/percona-server/5.5/+bug/1127008
[20 Jun 2013 15:09]
Paul DuBois
Noted in 5.6.13, 5.7.2 changelogs. If one session had any metadata lock on a table, another session attempting CREATE TABLE [IF NOT EXISTS] for the same table would hang. This occurred due to an attempt in the second session to acquire an exclusive metadata lock on the table before checking whether the table already existed. An exclusive metadata lock is not compatible with any other metadata locks, so the session hung for the lock timeout period if another session had the table locked. Now the server attempts to acquire a shared metadata lock on the table first to check whether it exists, then upgrade to an exclusive lock if it does not. If the table does exist, an error occurs for CREATE TABLE and a warning for CREATE TABLE IF NOT EXISTS.
[2 Aug 2013 14:03]
Laurynas Biveinis
revno: 5160 committer: Praveenkumar Hulakund <praveenkumar.hulakund@oracle.com> branch nick: mysql-5.6 timestamp: Fri 2013-05-24 15:26:03 +0530 message: Bug#13418638 - CREATE TABLE IF NOT EXISTS METADATA LOCK IS TOO RESTRICTIVE Analysis: --------- Creating table using "CREATE TABLE [IF NOT EXISTS]" hangs if table with same name already exists and if any other MDL lock is taken on the lock object of the table. While creating the table, we try to acquire "X" MDL lock on the lock object of the table. Lock will be acquired on table, before even checking the existence of the table. Since "X" is not compatible with any other MDL locks, if some other lock is granted on the lock object of table then "X' lock will not be granted and it will hang for lock timeout period. Fix: ---- Acquiring "X" MDL lock before even checking for the existence of table is resulting in the issue mentioned above. So, as a fix for this bug, modified a logic to acquire "S" lock and check for the existence of the table. If the table does not exists then upgrade lock to "X" and continue. If table exists then, for "CREATE TABLE" - report an error. for "CREATE TABLE IF NOT EXISTS" - Push a warning. and return.
[22 Oct 2014 13:23]
Nyaapa Arseny
What about fix for 5.5?
[10 Mar 2017 13:11]
Kapil Bhagchandani
This issue still exists with Mysql 5.6.33-0ubuntu0.14.04.1