Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 read committed snapshot - глюки или законный dirty read  [new]
roman_is
Member

Откуда: Киев
Сообщений: 2
Замечено странное поведение в режиме READ_COMMITTED_SNAPSHOT на количестве записей > 300 тыс.: WHERE начинает вычитывать грязные данные из другой транзакции

MS SQL 2005 SP 3
ALTER DATABASE MyDatabase SET READ_COMMITTED_SNAPSHOT ON
(уровень изоляции SNAPSHOT не включен!)

таблица с несколькими колонками, основные ID (PK) и State, 1 млн. записей

проверяем:
SELECT * FROM Document WHERE ID = 123

имеем результат: State = 0

запускаем в первой коннекции:
begin tran
UPDATE Document SET State=32 WHERE ID = 123
--транзакцию не закрываем

запускаем во второй коннеции для проверки:
SELECT * FROM Document WHERE ID = 123

имеем нормальный результат: State = 0

запускаем во второй коннеции:
SELECT * FROM Document WHERE State & 32 != 0

имеем 1 запись с ID = 123 и State = 32, вычитались не закомиченные данные

Таким образом если при уровне READ_COMMITTED имели что SELECT блокировался UPDATEом, то при READ_COMMITTED_SNAPSHOT в WHERE попадают грязные данные

если количество записей в таблице < 300тыс. то сервер ведет себя как и ожидается, т.е.
SELECT * FROM Document WHERE State & 32 != 0 возвращает 0 записей

Это фича или ошибка? Описания такого поведения ни где не могу найти.
1 окт 09, 15:04    [7730135]     Ответить | Цитировать Сообщить модератору
 Re: read committed snapshot - глюки или законный dirty read  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
У меня не воспроизводится

Microsoft SQL Server 2005 - 9.00.4230.00 (Intel X86)
Jul 30 2009 13:45:19
Copyright (c) 1988-2005 Microsoft Corporation
Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 2)

Запрос

SELECT * FROM Document WHERE State & 32 != 0

возвращает 0 строк

кол-во записей в таблице 301000
1 окт 09, 15:45    [7730419]     Ответить | Цитировать Сообщить модератору
 Re: read committed snapshot - глюки или законный dirty read  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
Это у мемя правда SP3 CU5.
1 окт 09, 15:53    [7730493]     Ответить | Цитировать Сообщить модератору
 Re: read committed snapshot - глюки или законный dirty read  [new]
vino
Member

Откуда:
Сообщений: 1191
roman_is, имеет смысл указать - какой объем в байтах таблицы и индексов
1 окт 09, 15:53    [7730501]     Ответить | Цитировать Сообщить модератору
 Re: read committed snapshot - глюки или законный dirty read  [new]
roman_is
Member

Откуда: Киев
Сообщений: 2
оказывается описанная мною проблема уже описана и пофикшена:

VSTS bug number 303378
FIX: When you run a query that has a parallel execution plan in parallel under the READ COMMITTED isolation level on a database that is set the READ COMMITTED SNAPSHOT option in SQL Server 2005, the query that you may obtain may return uncommitted data


P.S. 2 Кудряшка - спасибо, нашел в SP3 CU5, буду пробовать
1 окт 09, 16:50    [7730931]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить