база данных tempdb не растет при изоляции моментальных снимков с фиксацией чтения

#sql-server #deadlock

#sql-server #взаимоблокировка

Вопрос:

Чтобы устранить взаимоблокировки (возникающие при индексированном представлении), я попытался использовать RCSI в sql server. Я включил этот режим с помощью:

 ALTER DATABASE MyDatabase SET READ_COMMITTED_SNAPSHOT ON
ALTER DATABASE MyDatabase SET ALLOW_SNAPSHOT_ISOLATION ON
  

и проверил, что он установлен с помощью:

 DBCC useroptions  

SELECT * FROM sys.databases 
  

В моей базе данных 8 временных баз данных, и они настроены на автоматическое увеличение на 64 МБ. После приема тысяч записей я не вижу никакого роста во временных базах данных. На основе документации RCSI активно использует базу данных tempdb и значительно увеличивает ее размер. Я ожидал увидеть некоторое увеличение базы данных tempdb. Трассировка 1117, 1118 также включена. Но размер базы данных tempdb не увеличивается. Я не включил разрешить изоляцию моментального снимка для базы данных Tempddb.

Спасибо

Ответ №1:

На основе документации RCSI активно использует базу данных tempdb и значительно увеличивает ее размер.

Существует много необоснованных опасений по поводу RCSI. И вставки создают версии строк только в том случае, если в таблице есть триггер.

Ответ №2:

Из BOL

Когда включен уровень изоляции моментальных снимков, при каждом обновлении строки компонент SQL Server Database Engine сохраняет копию исходной строки в базе данных tempdb и добавляет порядковый номер транзакции к строке.

Это означает, что если вы обновляете одну строку, одна строка будет помещена в базу данных TempDB, если вы изменяете или обновляете всю таблицу, вся таблица будет помещена в базу данных TempDB. Таким образом, вполне возможно, что ваша конкретная рабочая нагрузка не требует, чтобы большие объемы данных были версифицированы в базе данных TempDB. Мне нужно было значительно увеличить размер базы данных TempDB (или отключить RSCI) во время больших обновлений, чтобы избежать этой проблемы.

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