Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQL Server locks explained

Below is a list of locks that SQL Server 2000 is meant to support. I am a bit confused as to what the "intent" locks actually mean. I've looked around on the Web and the answers seem to be a bit cryptic.

Further to getting an answer to my specific question, I am hoping to use this question as a Wiki for what each lock means and under what circumstances that type of lock will be acquired.

  • Shared (S)
    • Update (U)
    • Exclusive (X)
    • Intent
      • intent shared (IS)
      • intent exclusive (IX)
      • shared with intent exclusive (SIX)
      • intent update (IU)
      • update intent exclusive (UIX)
      • shared intent update (SIU)
    • Schema
      • schema modification (Sch-M)
      • schema stability (Sch-S)
    • Bulk Update (BU)
    • Key-Range
      • Shared Key-Range and Shared Resource lock (RangeS_S)
      • Shared Key-Range and Update Resource lock (RangeS_U)
      • Insert Key-Range and Null Resource lock (RangeI_N)
      • Exclusive Key-Range and Exclusive Resource lock (RangeX_X)
      • Conversion Locks (RangeI_S, RangeI_U, RangeI_X, RangeX_S, RangeX_U)
like image 553
Simon Johnson Avatar asked Sep 19 '08 09:09

Simon Johnson


People also ask

How does locking work in SQL Server?

To minimize the cost of locking, the SQL Server Database Engine locks resources automatically at a level appropriate to the task. Locking at a smaller granularity, such as rows, increases concurrency but has a higher overhead because more locks must be held if many rows are locked.

What is an exclusive lock in SQL Server?

Locks are held on SQL Server resources, such as rows read or modified during a transaction, to prevent concurrent use of resources by different transactions. For example, if an exclusive (X) lock is held on a row within a table by a transaction, no other transaction can modify that row until the lock is released.

What is a deadlock in SQL Server?

Occasionally a deadlock occurs when two concurrent operations acquire row locks on the same table and then block because they both need to lock the page. Disallowing row locks forces one of the operations to wait, avoiding the deadlock.

What is the size of a lock in SQL Server?

A lock as an in-memory structure is 96 bytes in size. To understand better the locking in SQL Server, it is important to understand that locking is designed to ensure the integrity of the data in the database, as it forces every SQL Server transaction to pass the ACID test.


1 Answers

The SQL server MSDN page has a reasonable explanation:

An intent lock indicates that SQL Server wants to acquire a shared (S) lock or exclusive (X) lock on some of the resources lower down in the hierarchy. For example, a shared intent lock placed at the table level means that a transaction intends on placing shared (S) locks on pages or rows within that table. Setting an intent lock at the table level prevents another transaction from subsequently acquiring an exclusive (X) lock on the table containing that page. Intent locks improve performance because SQL Server examines intent locks only at the table level to determine if a transaction can safely acquire a lock on that table. This removes the requirement to examine every row or page lock on the table to determine if a transaction can lock the entire table.

like image 60
Andy Whitfield Avatar answered Nov 09 '22 03:11

Andy Whitfield