Автор: Paul White https://www.sql.kiwi/2024/12/improved-ghosts-2022/
Уровень изоляции моментального
снимка с фиксированным чтением (Read Committed Snapshot Isolation, далее: RCSI)
даёт много преимуществ. Главное из них в том, что читатели не будут блокировать
писателей (и наоборот). Каждый оператор видит снимок данных на определенный
момент времени (за исключением некоторых случаев, таких как использование non-inlined
функций, которые оптимизатор не может развернуть внутри запроса). С другой стороны, появляются
затраты на поддержание версий строк, необходимых для реализации RCSI.
Речь идет не только о том, чтобы
убедиться, что база данных tempdb (или пользовательская
база данных (если используется ADR - ACCELERATED_DATABASE_RECOVERY) достаточно велика и может
справиться с дополнительной параллельной активностью:
- Писатели,
изменяющие (а иногда и добавляющие) данные, должны создавать версии строк.
- Система
должна уметь проверять и поддерживать компактность хранилища версий в фоновом
режиме.
- Читателям
необходимо найти правильную для них версию каждой строки выборки.
Последний пункт может привести к
значительному снижению производительности, если в результате пользовательской
активности получились длинные цепочки версий. RCSI подвержен
подобным проблемам меньше, чем SI,
поскольку каждый оператор RCSI видит более
позднюю точку во времени. Но это не исключает проблем с долгими запросами с RCSI, обычно приходящими от отчётных и аналитических
приложений. Мы тут не будем в это углубляться, поскольку это не является темой
данной статьи.