Как изменить стратегию блокировки в SQL Server? - PullRequest
5 голосов
/ 31 августа 2009

Я читал статьи, подобные этим: http://www.codinghorror.com/blog/archives/001166.html http://www.databasejournal.com/features/mssql/article.php/3566746/Controlling-Transactions-and-Locks-Part-5-SQL-2005-Snapshots.htm

И насколько я понимаю, SQL Server имеет очень пессимистичную стратегию блокировки. А для повышения производительности я должен изменить блокировку Read Committed Snapshot.

Но я не могу найти, где это сделать. Где я могу изменить стратегию блокировки?

Ответы [ 3 ]

5 голосов
/ 31 августа 2009

Вы можете прочитать о Использование уровней изоляции на основе управления версиями строк с примерами их установки с помощью команды ALTER.

Он устанавливается на уровне базы данных следующим образом:

ALTER DATABASE YourDatabaseName SET READ_COMMITTED_SNAPSHOT ON;

Лучшей отправной точкой является родительская часть вышеприведенной документации, которая охватывает смежные темы: Уровни изоляции на основе управления версиями строк в компоненте Database Engine .

РЕДАКТИРОВАТЬ: добавлены ссылки, упомянутые в моих комментариях ниже.

1 голос
/ 31 августа 2009

Использование уровня изоляции SNAPSHOT увеличит нагрузку на базу данных при увеличении нагрузки на базу данных.

Изменение методов блокировки лучше всего выполнять с помощью подсказок блокировки в запросах или путем изменения уровня изоляции вобщие для хранимой процедуры или подключения.Это делается с помощью команды SET ISOLATION LEVEL или путем изменения уровня изоляции объекта соединения в .NET.

Если вы хотите, чтобы SQL Server обрабатывал свою блокировку на уровне, отличном от уровня страницы по умолчанию (т.е.блокировка на уровне строк), которая должна обрабатываться в операторе по уровню инструкции с помощью подсказки WITH (ROWLOCK) в ваших операторах.

UPDATE YourTable (WITH ROWLOCK)
   SET Col2 = 3
WHERE Col1 = 'test'

Нет глобального параметра для изменения этого уровня блокировки, и еслиROWLOCK используется в сочетании с операциями на уровне изоляции моментальных снимков, которые будут по-прежнему выполняться на уровне страницы, поскольку вся страница должна быть скопирована в базу данных tempdb, а затем обновлена, после чего старая версия должна быть удалена из базы данных tempdb.

0 голосов
/ 31 августа 2009

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

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 

Там, где я работаю, мы делаем это для каждого настроенного нами соединения, все они устанавливаются в том же месте, что и мы используем общий пул соединений для доступа к базе данных. Опция READ UNCOMMITTED затем применяется ко всем операторам, выпущенным этим соединением.

...