← Назад к вопросам

Что такое уровень изоляции read committed snapshot?

3.0 Senior🔥 121 комментариев
#Блокировки и транзакции

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Уровень изоляции Read Committed Snapshot (RCSI)

Read Committed Snapshot Isolation (RCSI) — это уровень изоляции транзакций в SQL Server, который обеспечивает баланс между производительностью и консистентностью данных.

Основные характеристики

RCSI находится между:

  • Read Committed (более слабый уровень)
  • Repeatable Read / Serializable (более строгие уровни)

Как это работает

В режиме RCSI каждая транзакция видит снимок (snapshot) данных на момент начала своей работы:

  1. Транзакция T1 начинается → система фиксирует версию данных
  2. Другая транзакция T2 изменяет данные → создается новая версия
  3. T1 всё ещё видит старую версию → нет блокировок (благодаря версионированию)
  4. T1 завершается → используются данные из своего снимка

Ключевые преимущества

1. Отсутствие грязного чтения (Dirty Read)

-- T1 видит только COMMITTED данные
-- Даже если T2 изменяет строку, T1 читает старую версию
SELECT * FROM Orders WHERE OrderID = 1
-- Вернёт старую версию, пока T2 не закоммитится

2. Улучшенная параллельность (Concurrency)

  • Читающие транзакции не блокируют пишущие
  • Пишущие транзакции не блокируют читающие
  • Это достигается благодаря версионированию строк

3. Производительность

  • Вместо ожидания блокировок используется версионирование
  • Читатели и писатели работают одновременно

Ограничения и особенности

1. Phantom Read остаётся возможен

-- T1: SELECT COUNT(*) FROM Orders => 10
-- T2: INSERT INTO Orders VALUES (...)
-- T1: SELECT COUNT(*) FROM Orders => 11 (PHANTOM READ)

2. Lost Update

-- T1: READ salary=1000
-- T2: READ salary=1000, UPDATE salary=1100
-- T1: UPDATE salary=1050 (перезаписывает изменение T2)

3. Дополнительные издержки

  • Версионирование требует места в tempdb
  • Легкое усиление конфликтов при большом объёме изменений

Использование в 1С

В 1С платформе RCSI полезен для:

  • Отчётов — они могут читать данные без блокировок
  • Импорта данных — параллельные операции не блокируют друг друга
  • Высоконагруженных систем — снижает вероятность deadlock

Включение RCSI

-- На уровне БД
ALTER DATABASE YourDatabase
SET READ_COMMITTED_SNAPSHOT ON

-- На уровне транзакции
SET TRANSACTION ISOLATION LEVEL READ COMMITTED SNAPSHOT
BEGIN TRANSACTION
  SELECT * FROM Data
COMMIT

Когда использовать

  • Online-системы с высокой конкурентностью
  • OLTP базы данных
  • Когда нужна лучше параллельность, чем при Read Committed
  • Когда Phantom Read приемлем

Вывод: RCSI — оптимальный выбор для большинства приложений, обеспечивающий хороший баланс между производительностью и надёжностью данных.

Что такое уровень изоляции read committed snapshot? | PrepBro