Использование подсказок NOLOCK и READPAST

Posted: Октябрь 17, 2010 in TSQL

Очень часто, читая исходники процедур для Sql Server, натыкаюсь на подсказку для таблицы NOLOCK. Эта подсказка действует только с инструкцией SELECT и позволяет читать данные, заблокированные другими транзакциями. Эта подсказка также известна как READUNCOMMITTED. Ее «подвох» заключается в том, что она позволяет читать «грязные данные» (dirty readings).

SELECT * FROM Table1 WITH(NOLOCK)

Не так часто, но все же встречается еще одна подсказка — READPAST. Она также действует с инструкцией SELECT, но в отличие от своего грязного брата, читает только закомиченные данные (прошу прощения за американизм).

SELECT * FROM Table1 WITH(READPAST)

Ее плюс является и ее минусом: нельзя понять, вернула ли выборка все данные, или только незаблокированные. Для этого нужно будет добавить еще какую-то логику.
А еще есть такая интересная штука READ_COMMITTED_SNAPSHOT…
Отрывок из MSDN:
После включения изоляции моментального снимка обновленные версии строк для каждой транзакции содержатся в tempdb.Уникальный порядковый номер транзакции определяет каждую транзакцию, и эти уникальные номера записываются для каждой версии строки.Транзакция работает с последними версиями строк, имеющими порядковый номер, предшествующий порядковому номеру транзакции.Более новые версии строк, созданные после начала транзакции, не учитываются.
Это, конечно, хорошая альтернатива к предыдущим подсказкам, если на сервере есть много свободного места на диске и в оперативной памяти.

Реклама
Комментарии
  1. Алексей:

    очень полезная информация! 🙂

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s