SQL Server транзакций / путаница параллелизма - вы всегда должны использовать табличные подсказки? - PullRequest
2 голосов
/ 24 октября 2010

Когда вы создаете транзакцию SQL Server, что блокируется, если вы не укажете табличную подсказку?Чтобы что-то заблокировать, вы всегда должны использовать табличную подсказку?Можете ли вы заблокировать строки / таблицы вне транзакций (т.е. в обычных запросах)?Я понимаю концепцию блокировки и почему вы хотите ее использовать, я просто не уверен, как реализовать ее в SQL Server, любой совет приветствуется.

Ответы [ 2 ]

2 голосов
/ 24 октября 2010

Вы должны использовать подсказки запроса только в качестве крайней меры, и даже тогда только после экспертного анализа. В некоторых случаях они приводят к плохой работе запроса. Поэтому, если вы действительно не знаете, что делаете, избегайте подсказок к запросу.

Блокировка (различных типов) происходит автоматически при каждом выполнении запроса (если не указан NOLOCK). Уровень изоляции транзакции по умолчанию - READ COMMITTED

Что вы на самом деле пытаетесь сделать?

Общие сведения о блокировке в SQL Server

1 голос

"Можете ли вы заблокировать строки / таблицы вне транзакций (т.е. в обычных запросах)?"

Вам лучше понять, что в SQL Server нет обычных запросов или действий, они ВСЕ, без каких-либо исключений, транзакционные.Именно так достигается кислотность, см., Например, [1].Если клиентские инструменты или разработчик в интерактивном режиме не указывают транзакцию явно с помощью BEGIN TRANSACTION и COMMIT / ROLLBACK, то используются неявные транзакции.

Кроме того, транзакция не является синонимом блокировки / блокировки.Существует множество механизмов управления параллелизмом без блокировки (например, управление версиями и т. Д.), А также уровень «изоляции» транзакций READ UNCOMMITTED (в данном случае отсутствие какой-либо изоляции) не контролирует его вообще.

Обновление 2:

Чтобы что-то заблокировать, всегда следует использовать табличную подсказку?

Поскольку уровень изоляции транзакции не является READ UNCOMMITTED или одним из уровней изоляции версий версий (моментальных снимков), например, READ COMMITTED по умолчанию или устанавливается, например,

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE  

введены блокировки (не знаю, с чего начать и как закончить эту тему [2]).Табличные подсказки, которые можно использовать в выражениях, переопределяют эти параметры.

[1]
Пол С. Рэндал.Общие сведения о ведении журнала и восстановлении в SQL Server
Что такое ведение журнала?
http://technet.microsoft.com/en-us/magazine/2009.02.logging.aspx#id0060003
[2]
Вставить трейлинг) после нажатия на эту ссылку
http://en.wikipedia.org/wiki/Isolation_(database_systems)

Обновление:
5 минут назад у меня была репутация 784 (такая же, как 24 часа назад), и теперь, без каких-либо видимых отрицательных голосов, она упала до 779.
Где я могу задать этот вопрос, если меня забанили в мета-версии.stackoverflow.com?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...