Будет ли подсказка SQL Server NOLOCK возвращать частично записанные строки? - PullRequest
3 голосов
/ 02 октября 2009

Прежде всего, я не спрашиваю, следует ли использовать NOLOCK. Давай пройдем мимо этого.

Полагаю, вопрос сводится к тому, как sql server записывает данные? Записывается ли сразу целая строка или она записывает столбец за раз?

Я спрашиваю, потому что подсказка NOLOCK рассматривается. Грязное чтение хорошо, пока вся строка возвращена (или не возвращена). Частично написанные строки не принимаются.

Ответы [ 2 ]

6 голосов
/ 02 октября 2009

Нет. Операции модификации данных, такие как вставки, обновления и удаления, защищены низкоуровневыми физическими Защелками . Все операции доступа к данным, включая SELECT без блокировки, обязаны соответствовать протоколу блокировки. В результате частичные записи никогда не видны ни одному читателю.

3 голосов
/ 02 октября 2009

Нет, он не вернет частично записанные строки. NOLOCK только означает, что этот запрос не будет создавать новые блокировки. Это не значит, что он не будет поддерживать существующие блокировки, а сервер sql не будет делать ничего, что записывает данные без предварительной блокировки.

То, что он может сделать, это вернуть строки, которые устарели или более не актуальны, потому что что-то еще записано в строку, которая обычно блокируется этим запросом.

...