SQL Server, вводящий в заблуждение XLOCK и оптимизации

Судя по недавнему тестированию и чтению, которое я сделал, кажется, что "X" (исключительная) часть имени XLOCK вводит в заблуждение. Фактически он не блокирует больше, чем UPDLOCK. Если бы он был эксклюзивным, это предотвратило бы внешние операции SELECT, чего не происходит.

Я не могу увидеть разницу между ними ни при чтении, ни при тестировании.

Единственный раз, когда XLOCK создает эксклюзивную блокировку, это когда используется с ТАБЛОК. Мой первый вопрос: «Почему только с такой степенью детализации?»

Далее я наткнулся на блог , в котором говорится следующее:

Тем не менее, остерегайтесь подсказки XLOCK. SQL Server будет игнорировать подсказку XLOCK! Есть оптимизация, при которой SQL Server проверяет, изменились ли данные с момента самой старой открытой транзакции. Если нет, то xlock игнорируется. Это делает подсказки xlock в основном бесполезными, и их следует избегать.

Кто-нибудь сталкивался с этим явлением?

Судя по тому, что я вижу, кажется, что эту подсказку следует игнорировать.

17
задан marc_s 3 December 2016 в 21:09
поделиться