Самая быстрая стратегия блокировки (уровень изоляции) для однопользовательского пакетного задания

У нас есть база данных SQL Server 2005, которая содержит предварительно обработанные данные для отчетов.

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

Ночью работа — это единственное, что работает на этом сервере, поэтому у меня нет одновременного доступа к моим данным.

В настоящее время мы используем уровень изоляции по умолчанию READ_COMMITTED.

Я понимаю, что SQL Server будет блокировать таблицы для чтения и записи. Поскольку никто другой не касается моих таблиц (как таблиц, которые я читаю, так и таблиц, которые я пишу) во время выполнения моего задания, будет ли быстрее указать WITH (NOLOCK) или использовать монопольные блокировки таблиц (TABLOCKX)?

Спасибо за любые подсказки,

Ив


person Yves Forget    schedule 07.04.2014    source источник
comment
SQL Server по умолчанию блокирует строки, а не таблицы. Только если транзакция превысит 5000 одновременных блокировок, SQL Server выполнит эскалацию блокировки и заблокирует таблицу (вместо 5000+ отдельных строк).   -  person marc_s    schedule 08.04.2014


Ответы (1)


Вы, вероятно, не заметите никакой разницы с точки зрения использования процессора. READ COMMITTED даже не использует S-блокировки для строк, которые находятся на страницах, на которых нет незафиксированных строк. Это малоизвестная оптимизация в SQL Server для очень распространенного уровня изоляции READ COMMITTED.

Я рекомендую вам рассмотреть READ UNCOMMITTED (что точно эквивалентно NOLOCK) или TABLOCK, потому что это позволяет SQL Server сканировать таблицы в порядке размещения (сканирование IAM), а не в порядке логического индекса. Это хорошо для шаблонов ввода-вывода и в зависимости от степени фрагментации может оказать существенное влияние (или не оказать никакого влияния).

Для массовых записей ознакомьтесь с соответствующими руководствами, выпущенными Microsoft. Убедитесь, что вы используете преимущества записи с минимальным протоколированием. TABLOCKX может вступить в игру здесь.

person usr    schedule 07.04.2014