Из недавних тестов и чтения, которые я сделал, кажется, что «X» (эксклюзивная) часть названия XLOCK вводит в заблуждение. Он фактически не блокирует больше, чем UPDLOCK. Если бы это было эксклюзивно, это предотвратило бы внешние SELECT, которых нет.SQL Server, вводящий в заблуждение XLOCK и оптимизация
Я не вижу ни чтения, ни тестирования, ни различия между ними.
Единственный раз, когда XLOCK создает эксклюзивную блокировку при использовании с TABLOCK. Мой первый вопрос: «Почему только в этой гранулярности?»
Кроме того, я наткнулся на blog, который гласит следующее:
Однако, следить за XLock намеком. SQL Server будет эффективно игнорировать подсказку XLOCK! Существует оптимизация, когда SQL Server проверяет, изменились ли данные со времени самой старой открытой транзакции. Если нет, то xlock игнорируется. Это делает xlock-подсказки в основном бесполезными и их следует избегать.
Может ли кто-нибудь столкнуться с этим явлением?
Основываясь на том, что я вижу, кажется, этот намек следует игнорировать.
Подробнее об оптимизации Тибор [говорил здесь] (http://sqlblog.com/blogs/paul_white/archive/2010/11/01/read-committed-shared-locks-and-rollbacks. ASPX). Я видел, как это произошло сейчас в моем собственном тестировании. Его фразирование заставило меня подумать, что он говорил, что подсказка «Х» будет проигнорирована. Это не тот случай. Блокировка 'X' вынимается. Конкретная оптимизация заключается в том, чтобы не вынимать блокировки 'S', поэтому конфликт никогда не возникает. Объясняется намного лучше в связанной статье. –