When does InnoDB lock a row? Multiple rows? Why would it lock a gap? How do transactions affect these scenarios? Locking is one of the more opaque features of MySQL, but it’s very important for both developers and DBA’s to understand if they want their applications to work with high performance and concurrency. This is a creative presentation to illustrate the scenarios for locking in InnoDB and make these scenarios easier to visualize. I'll cover: key locks, table locks, gap locks, shared locks, exclusive locks, intention locks, insert locks, auto-inc locks, and also conditions for deadlocks.
2. Bill Karwin
• Senior Database Architect at School Messenger
(West Corporation)
• Author of SQL Antipatterns: Avoiding the Pitfalls of
Database Programming
• 20+ years experience with SQL databases, software
development, MySQL consulting and training
3. why locking?
• When multiple clients
access the same data,
they have to avoid
clobbering each others’
work.
• Databases must restrict
access to one client at a
time for a given table or
row.
https://commons.wikimedia.org/wiki/File:New_York_City_Gridlock.jpg
4. why locking?
• The DBMS creates locks
against tables and rows, and
gives them to clients, first-
come, first-serve.
• When a client requests a
exclusive lock, but a different
client currently holds it, the
requestor waits until the
holder releases its lock.
• Most locks last until the end of
the transaction.
https://commons.wikimedia.org/wiki/Traffic_lights#/media/File:LED_traffic_light.jpg
8. reads
• Many visitors can view paintings at the same time—
no locking required.
https://commons.wikimedia.org/wiki/File:L%27%C3%A9glise_d%27Auvers-‐‑sur-‐‑Oise.jpg
9. writes
• A curator can change the paintings—while casual
visitors are viewing them.
https://commons.wikimedia.org/wiki/File:Vincent_Willem_van_Gogh_128.jpg
10. writes
• A curator can change the paintings—while casual
visitors are viewing them.
11. repeatable reads
• The viewers still see the prior painting in spite of the
change, because they used their tablets to capture
the image.*
* Please do not take photographs of the art in a real museum.
12. read committed
• If the viewers are okay allowing their view to
change, they can simply say so.
READ
COMMITTED
13. read committed
• If the viewers are okay allowing their view to
change, they can simply say so.
READ
COMMITTED
I don’t mind
17. exclusive locks
• A second curator who tries to change the same
painting must wait for the first curator to finish.
X-‐‑lock!…
https://commons.wikimedia.org/wiki/Vincent_van_Gogh#/media/File:Vincent_Willem_van_Gogh_107.jpg
18. what is an exclusive lock?
• A lock that does not share.
• It must be the only lock on the resource.
• Request for an exclusive lock waits for the release of
any other shared or exclusive lock on that resource.
20. shared locks
• The curator cannot make changes while the art
critic is viewing a painting.
S-‐‑lock!
. . .
21. shared locks
• Art critics can share—they do not block each other.
S-‐‑lock!
. . .
S-‐‑lock!
22. shared locks
• Once the art critics leave, the curator can proceed
to change the art.
X-‐‑lock!
23. shared locks
• A new art critic will not begin his viewing while the
curator is still working on changing the painting.
X-‐‑lock!…
24. what is a shared lock?
• A lock that allows other shared locks on the same
table or rows.
• Shared locks blocks exclusive locks.
• Exclusive locks block shared locks.
26. table locks
• A construction worker needs to remodel the
museum, but not while visitors are inside.
27. table locks
• Each person is given a special badge as they enter
the museum, showing their
intention to view or change
the paintings.
IS!IX!
28. table locks
• A construction worker requests exclusive access to
the museum, but can not get it.
. . .IS!
IX!
29. table locks
• When all the visitors have left, the worker can finally
get his exclusive access to do his work.
LOCK
TABLE!
30. table locks
• While the construction is going on, visitors cannot
get their badges, and therefore
cannot enter the museum.
…
https://commons.wikimedia.org/wiki/Category:Under_construction_icons#/media/File:Enobras.PNG
LOCK
TABLE!
…
31. what is an intention lock?
• Before SELECT…LOCK IN SHARE MODE or other
shared lock, request an intention shared lock (“IS”)
on the table.
• Before SELECT…FOR UPDATE, INSERT, UPDATE,
DELETE, request an intention exclusive lock (“IX”).
• IS and IX locks allow access by multiple clients.
They won’t necessarily conflict until they try to get
real locks on the same rows.
• But a table lock (ALTER TABLE, DROP TABLE, LOCK
TABLES) blocks both IS and IX, and vice-versa.
33. gap locks
• The art critic needs to view the whole collection
without changes and no new inserts.
gap
. . .
S-‐‑lock!
34. what is a gap lock?
• A lock on a painting locks the “space” before the
painting.
• The gap lock prevents inserts of new paintings
before the locked painting (within the space).
• This happens automatically, to prevent “phantom
reads”—i.e. the view of data changes during a
transaction.
35. what is a gap lock?
• Exception: if the art critic is okay with seeing the
latest additions among the paintings, he can
choose to use the READ COMMITTED transaction
isolation level.
• Another exception: no gap lock is needed for a
UNIQUE or PRIMARY KEY index.
39. installation plans
• The curators must keep records of how to install the
art, so the show is the same at each museum.
Label all
paintings on
this wall with
“Van Gogh”
40. installation plans
• The curators must keep records of how to install the
art, so the show is the same at each museum.
Van Gogh Van Gogh
41. installation plans
• Another painting is added.
Van Gogh Van Gogh
Install this in
the gap and
label it
“Lautrec”
https://commons.wikimedia.org/wiki/Moulin_Rouge#/media/File:Lautrec_at_the_moulin_rouge_two_women_waltzing_1892.jpg
46. order matters
• The installation instructions are carried out in the
wrong order!
Install this in
the gap and
label it
“Lautrec”
47. order matters
• The installation instructions are carried out in the
wrong order!
Lautrec
Label all
paintings on
this wall with
“Van Gogh”
48. order matters
• The installation instructions are carried out in the
wrong order!
Van GoghVan Gogh Van Gogh
49. what happened?
• Installation instructions are recorded in the order
they were committed, not the order they were
originally done.
• Therefore the installation at the next museum may
repeat the steps in an incorrect order.
50. how to solve this?
• Labeling “Van Gogh” should have first locked all
the spaces on that wall.
Van Gogh Van Gogh
gap
51. how to solve this?
• The addition would be forced to wait for the locks
to be released.
Van Gogh Van Gogh
gap
…
54. insert intention locks
• The second curator wants to insert an 1887 painting,
but it would fall within the existing gap lock.
X-‐‑lock! …
gap
55. insert intention locks
---TRANSACTION 32070411, ACTIVE 6 sec inserting
mysql tables in use 1, locked 1
LOCK WAIT 2 lock struct(s), heap size 360, 1 row lock(s),
undo log entries 1
MySQL thread id 26, OS thread handle 0x7f2ba845f700,
query id 1423 192.168.50.1 root update
insert into Museum (year) values (1887)
------- TRX HAS BEEN WAITING 6 SEC FOR THIS LOCK TO BE
GRANTED:
RECORD LOCKS space id 3337 page no 4 n bits 72 index
`year` of table `test`.`Museum` trx id 32070411 lock_mode X
insert intention waiting
56. insert intention locks
• But if the first curator doesn’t care about new
paintings entering his view…
X-‐‑lock!
gap
READ
COMMITTED
57. insert intention locks
• Then the second curator gets an insert intention
lock, and is then free to insert.
insert-‐‑
lock!
gap
X-‐‑lock!
READ
COMMITTED
I don’t mind
58. insert intention locks
• Then the second curator gets an insert intention
lock, and is then free to insert.
X-‐‑lock!X-‐‑lock!
READ
COMMITTED
I don’t mind
59. what is an insert intention lock?
• A special kind of gap lock, requested before a
client tries to insert a row.
• Insert locks are shared, not exclusive—multiple
clients can acquire insert locks on the same gap.
• But insert locks conflict with other exclusive locks.
60. why is insert intention lock shared?
• Multiple clients prepare to insert into the same gap.
• They may be inserting different rows within the same
gap, so they don’t conflict with each other.
• But the insert intention lock blocks other clients from
requesting exclusive locks on the same gap.
62. auto-inc locks
• Two curators are installing paintings. They both need
to post a unique number for self-guided tours.
? ?
63. auto-inc locks
• There must be one number
generator per table.
• One curator at a time can
request the next value.
http://www.istockphoto.com/photo/ticket-‐‑dispenser-‐‑isolated-‐‑9396862
65. auto-inc locks
• As soon as the first curator gets his number, the
second curator can proceed.
1 2 auto-‐‑inc!
66. auto-inc locks
• They may both keep locks on the paintings, but
they’re done allocating numbers.
X-‐‑lock! 1 2 X-‐‑lock!
67. what is an auto-inc lock?
• A table lock, used when a client requests the next
unique id for a given table.
• Ensures that each id is given to one client.
• Brief—it is released as soon as the id is generated,
instead of lasting to the end of the transaction like
other locks.
• Because the lock is so brief, neither client can
“undo”— i.e. they cannot return their id to the stack
for someone else to use.
69. deadlocks
• Two curators are updating the art, but they start
from different ends of the collection.
X-‐‑lock!X-‐‑lock!
70. deadlocks
• A curator requests a lock on the second painting,
which is already locked. He waits.
X-‐‑lock!X-‐‑lock!
…
71. deadlocks
• The other curator requests a lock on the first
painting, which is already locked. He also waits.
X-‐‑lock!X-‐‑lock!
…
…
72. deadlocks
• Neither will give up the lock they have, so they are
doomed to wait until one or both of them dies.
X-‐‑lock!
X-‐‑lock!
… …
73. what is a deadlock?
• When two or more concurrent clients wait for each
other to release their locks, but since they are both
waiting, they will never give up the lock they have.
• In other words, a “catch-22” of lock-waits.
• Many people use the term “deadlock” incorrectly—
when they are describing a simple one-way lock
wait.
74. resolving deadlocks
• MySQL detects cycles in lock waits, and kills one of
the transactions immediately.
X-‐‑lock!X-‐‑lock!
…
…
75. resolving deadlocks
• MySQL detects cycles in lock waits, and
automatically kills one of the transactions.
X-‐‑lock!
X-‐‑lock!
79. read committed
all the things?
• Yes … and no.
• READ COMMITTED avoids gap locks, therefore
reduces lock waits and allows greater throughput.
• But using READ COMMITTED allows more cases
where you could get deadlocks.
80. thank you
• I hope your trip to the museum was educational!
81. license and copyright
Copyright 2015-2016 Bill Karwin
http://www.slideshare.net/billkarwin
Released under a Creative Commons 3.0 License:
http://creativecommons.org/licenses/by-nc-nd/3.0/
You are free to share—to copy, distribute, and
transmit this work, under the following conditions:
Attribution.
You must attribute this
work to Bill Karwin.
Noncommercial.
You may not use this
work for commercial
purposes.
No Derivative Works.
You may not alter,
transform, or build upon
this work.