Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Любопытный гость
Guest |
Читаю статью про блокировки диапазона http://yrushka.com/index.php/performance-tunning/key-range-locking-types-in-serializable-isolation-level/ Там пишут
|
||
12 ноя 13, 17:47 [15117249] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Над чем тут ломать голову ? 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] Ответить | Цитировать Сообщить модератору |
Любопытный гость
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] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Любопытный гость
Guest |
Glory, Я верю хелпу. Но хочется понять механику - почему именно так? |
12 ноя 13, 19:17 [15117731] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
Во всяких теоретических лекциях написано:
|
||||
12 ноя 13, 19:39 [15117801] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
Мусолилось: Не понятная блокирование диапазона |
||
13 ноя 13, 14:48 [15121673] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |