Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Опять про блокировку диапазона  [new]
Любопытный гость
Guest
Читаю статью про блокировки диапазона http://yrushka.com/index.php/performance-tunning/key-range-locking-types-in-serializable-isolation-level/

Там пишут
автор
In in-equality operations (“>”, “<", BETWEEN, LIKE, "<>“) – Key-Range locks are held on all key values (found) from the range specified and the “next” value. This is true for both Unique or Non-Unique Indexes.
Кто-нибудь может разжевать бестолковому для чего лочить “next” value? Я уже голову сломал...
12 ноя 13, 17:47    [15117249]     Ответить | Цитировать Сообщить модератору
 Re: Опять про блокировку диапазона  [new]
Glory
Member

Откуда:
Сообщений: 104751
Любопытный гость
Кто-нибудь может разжевать бестолковому для чего лочить “next” value? Я уже голову сломал...

Над чем тут ломать голову ?
When SERIALIZABLE isolation level is set – a range lock is placed on the data set, preventing other users from updating or inserting rows into the data set until the transaction is complete.
12 ноя 13, 17:49    [15117265]     Ответить | Цитировать Сообщить модератору
 Re: Опять про блокировку диапазона  [new]
Любопытный гость
Guest
Glory,

Мне совсем не понятно почему вот для такого
CREATE TABLE Table1
 (PK INT PRIMARY KEY)
INSERT INTO Table1 SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRAN
SELECT * FROM Table1 WHERE PK BETWEEN 1 AND 3
DECLARE @S INT
SET @S = @@SPID
EXEC sp_lock @S
COMMIT
SET TRANSACTION ISOLATION LEVEL READ COMMITTED

Лочатся все четыре ключа
12 ноя 13, 18:25    [15117523]     Ответить | Цитировать Сообщить модератору
 Re: Опять про блокировку диапазона  [new]
Glory
Member

Откуда:
Сообщений: 104751
Потому что так написано в BOL

Key-Range Locking - Range scan query

The number of RangeS-S locks held is n+1, where n is the number of rows that satisfy the query.
12 ноя 13, 19:04    [15117693]     Ответить | Цитировать Сообщить модератору
 Re: Опять про блокировку диапазона  [new]
Любопытный гость
Guest
Glory,

Я верю хелпу. Но хочется понять механику - почему именно так?
12 ноя 13, 19:17    [15117731]     Ответить | Цитировать Сообщить модератору
 Re: Опять про блокировку диапазона  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32175
Любопытный гость
Но хочется понять механику - почему именно так?
Неизвестно.

Во всяких теоретических лекциях написано:
http://datasql.ru/basesql/16.htm
Блокировка диапазона ключей решает проблему возникновения фантомов и обеспечивает требования сериализуемости транзакции. Блокировки этого типа устанавливаются на диапазон строк, соответствующих определенному логическому условию, с помощью которого осуществляется выборка данных из таблицы.
То есть вроде про необходимость прибавления "1" (или числа Пи) к диапазону с правой стороны для исключения каких нибуть фантомов или чего то в этом роде ничего не сказано :-(
12 ноя 13, 19:39    [15117801]     Ответить | Цитировать Сообщить модератору
 Re: Опять про блокировку диапазона  [new]
MSSQLBug
Guest
alexeyvg,

Подсказка ;)
CREATE TABLE Table1 (PK FLOAT PRIMARY KEY)
INSERT INTO Table1 SELECT 1.0 UNION SELECT 2.0 UNION SELECT 3.0 UNION SELECT 4.0
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRAN
SELECT * FROM Table1 WHERE PK BETWEEN 1.0 AND 3.5
DECLARE @S INT
SET @S = @@SPID
EXEC sp_lock @S
COMMIT
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
13 ноя 13, 13:20    [15121115]     Ответить | Цитировать Сообщить модератору
 Re: Опять про блокировку диапазона  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6727
alexeyvg
Неизвестно.
Интересно вы послали. :)

Мусолилось: Не понятная блокирование диапазона
13 ноя 13, 14:48    [15121673]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить