Могу ли я применить NOLOCK с настройкой всей базы данных? - PullRequest
1 голос
/ 14 мая 2010

Есть ли способ применить WITH (NOLOCK) к любому оператору SELECT, выполняемому в конкретной базе данных?

Ответы [ 2 ]

5 голосов
/ 14 мая 2010

Нет, но вы можете использовать SNAPSHOT ISOLATION Уровень базы данных на SQL Server 2005 и более поздних версиях, это должно очень помочь с тупиками

SQL Server 2005 представляет расширения для уровней изоляции SQL-92 с введением уровня изоляции SNAPSHOT и дополнительной реализацией READ COMMITTED. Новый уровень изоляции READ_COMMITTED_SNAPSHOT может прозрачно заменить READ COMMITTED для всех транзакций.

Изоляция SNAPSHOT указывает, что данные, считанные в транзакции, никогда не будут отражать изменения, сделанные другими одновременными транзакциями. Транзакция использует версии строк данных, которые существуют, когда транзакция начинается. При чтении данные не блокируются, поэтому транзакции SNAPSHOT не блокируют другие транзакции от записи данных. Транзакции, которые записывают данные, не блокируют транзакции моментальных снимков от чтения данных. Вам необходимо включить изоляцию моментальных снимков, установив параметр базы данных ALLOW_SNAPSHOT_ISOLATION, чтобы использовать ее.

Параметр базы данных READ_COMMITTED_SNAPSHOT определяет поведение уровня изоляции READ COMMITTED по умолчанию, когда в базе данных включена изоляция моментальных снимков. Если вы не укажете явно READ_COMMITTED_SNAPSHOT ON, READ COMMITTED будет применен ко всем неявным транзакциям. Это приводит к тому же поведению, что и установка READ_COMMITTED_SNAPSHOT OFF (по умолчанию). Когда READ_COMMITTED_SNAPSHOT OFF действует, компонент Database Engine использует общие блокировки для обеспечения уровня изоляции по умолчанию. Если для параметра базы данных READ_COMMITTED_SNAPSHOT задано значение ON, механизм базы данных по умолчанию использует управление версиями строк и изоляцию моментальных снимков вместо использования блокировок для защиты данных.

0 голосов
/ 14 мая 2010

Зависит от вашей базы данных. Некоторые движки баз данных позволяют по умолчанию использовать грязное чтение или подобное поведение.

Например, некоторые версии MSSQL Server позволяют настроить базу данных в качестве изоляции моментального снимка, что описано в посте SQLMenace.

...