Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server, подвеждащият XLOCK и оптимизации

Изключителност на X ключалки срещу U ключалки

В матрицата за съвместимост на заключване по-долу може да се види, че X заключването е съвместимо само със стабилността на схемата и типовете заключване Insert Range-Null. U е съвместим със следните допълнителни споделени типове заключване S /IS /RS-S /RI-S /RX-S

матрица за съвместимост на заключване http://i.msdn.microsoft.com/ms186396.LockConflictTable(en-us,SQL.105).gif

Драйналност на X ключалки

Те се изваждат добре на всички нива. Проследяването на скрипта и профайлъра по-долу показва, че те са успешно извадени на ниво ред.

CREATE TABLE test_table (id int identity(1,1) primary key, col char(40))

INSERT INTO test_table
SELECT NEWID() FROM sys.objects

select * from test_table with (rowlock,XLOCK) where id=10

Но редовете все още могат да се четат!

Оказва се, че при read committed ниво на изолация SQL Server не винаги ще извади S locks, той ще пропусне тази стъпка, ако няма риск от четене на незаети данни без тях. Това означава, че няма гаранция, че някога ще възникне конфликт при заключване.

Ако обаче първоначалният избор е with (paglock,XLOCK) тогава това ще спрете транзакцията за четене като X заключването на страницата ще блокира IS заключване на страницата, което винаги ще е необходимо на читателя. Това разбира се ще окаже влияние върху едновременността.

Други предупреждения

Дори ако заключите реда/страницата, това не означава, че блокирате всички достъпи до този ред в таблицата. Заключването на ред в клъстерирания индекс няма да попречи на заявките да четат данни от съответния ред в покриващ неклъстериран индекс.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Инсталиране на екземпляр на клъстер за отказване на SQL Server – част 1

  2. Намерете sql записи, съдържащи подобни низове

  3. Как да създадете псевдоним на потребителски дефиниран тип данни в SQL Server с помощта на T-SQL

  4. SQL Server 2008 - подреждане по низове с числово число

  5. Наистина ли трябва да използвам SET XACT_ABORT ON?