Intention Locks && Intention Locking Protocol

Intention Locks && Intention Locking Protocolhtml

http://dev.mysql.com/doc/refman/5.6/en/glossary.html#glos_intention_lockmysql

Intention Locks

A kind of lock that applies to the table level, used to indicate what kind of lock the transaction intends to acquire on rows in the table. Different transactions can acquire different kinds of intention locks on the same table, but the first transaction to acquire an intention exclusive (IX) lock on a table prevents other transactions from acquiring any S or X locks on the table. Conversely(相反的), the first transaction to acquire an intention shared (IS) lock on a table prevents other transactions from acquiring any X locks on the table. The two-phase process allows the lock requests to be resolved in order, without blocking locks and corresponding operations that are compatible.sql

Additionally,InnoDB supports multiple granularity(間隔尺寸,粒度) locking which permits coexistence(共存,並立) of record locks and locks on entire tables. To make locking at multiple granularity levels practical, additional types of locks called intention locks are used. Intention locks are table locks in InnoDB that indicate which type of lock (shared or exclusive) a transaction will require later for a row in that table. There are two types of intention locks used in InnoDB (assume that transaction T has requested a lock of the indicated type on table t):app

Intention shared (IS): Transaction T intends to set S locks on individual rows in table t.ui

Intention exclusive (IX): Transaction T intends to set X locks on those rows.spa

For example, SELECT ... LOCK IN SHARE MODE sets an IS lock and SELECT ... FOR UPDATE sets an IX lock.code

 

Intention Locking Protocol

The intention locking protocol is as follows:htm

Before a transaction can acquire an S lock on a row in table t, it must first acquire an IS or stronger lock on t.ip

Before a transaction can acquire an X lock on a row, it must first acquire an IX lock on t.get

These rules can be conveniently summarized by means of the following lock type compatibility matrix(相容性矩陣).

  X IX S IS
X Conflict Conflict Conflict Conflict
IX Conflict Compatible Conflict Compatible
S Conflict Conflict Compatible Compatible
IS Conflict Compatible Compatible Compatible

A lock is granted to a requesting transaction if it is compatible(兼容的,相容的) with existing locks, but not if it conflicts with existing locks. A transaction waits until the conflicting existing lock is released. If a lock request conflicts with an existing lock and cannot be granted because it would cause deadlock, an error occurs.

 

Thus, intention locks do not block anything except full table requests (for example, LOCK TABLES ... WRITE). The main purpose of IX and IS locks is to show that someone is locking a row, or going to lock a row in the table.

==============END==============

相關文章
相關標籤/搜索