Из недавнего тестирования и чтения, которое я сделал, кажется, что часть имени "X" (исключительная) в XLOCK вводит в заблуждение. Фактически, он не блокирует больше, чем UPDLOCK. Если бы он был эксклюзивным, это предотвратило бы внешние SELECT, чего не делает.
Я не вижу ни чтения, ни тестирования и разницы между ними.
Единственный раз, когда XLOCK создает монопольную блокировку, - это когда используется с TABLOCK. Мой первый вопрос: "Почему только на такой степени детализации?"
Кроме того, я наткнулся на блог, в котором говорится следующее:
Однако следите за подсказкой XLOCK. SQL Server будет игнорировать подсказку XLOCK! Есть оптимизация, при которой SQL Server проверяет, изменились ли данные с момента самой старой открытой транзакции. Если нет, то xlock игнорируется. Это делает подсказки xlock в основном бесполезными, и их следует избегать.
Кто-нибудь сталкивался с этим явлением?
Судя по тому, что я вижу, кажется, что эту подсказку следует игнорировать.
X
будет проигнорирована. Это не тот случай.X
замки сняты. Конкретная оптимизация заключается в том, чтобы не сниматьS
блокировки, чтобы не было конфликта. Объяснено гораздо лучше в связанной статье. - person Martin Smith   schedule 07.01.2011