← Назад к вопросам
Что такое уровень изоляции 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) данных на момент начала своей работы:
- Транзакция T1 начинается → система фиксирует версию данных
- Другая транзакция T2 изменяет данные → создается новая версия
- T1 всё ещё видит старую версию → нет блокировок (благодаря версионированию)
- 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 — оптимальный выбор для большинства приложений, обеспечивающий хороший баланс между производительностью и надёжностью данных.