Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Не понятная блокирование диапазона  [new]
Любопытный гость
Guest
CREATE TABLE A (AID INT PRIMARY KEY)

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION
DECLARE @SPID INT
SET @SPID = @@SPID
SELECT * FROM A WHERE AID = 1
EXEC sp_lock @SPID
COMMIT TRANSACTION


Почему блокируется весь диапазон ключа? Ведь можно же блокировать только одно значение ключа (так и буде если существует запись с AID=1) или диапазон из одной строки и не мешать другим работать с таблицей?
18 окт 13, 13:19    [14997833]     Ответить | Цитировать Сообщить модератору
 Re: Не понятная блокирование диапазона  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37057
Нельзя наложить блокировку на отсутствующую запись.
18 окт 13, 13:21    [14997868]     Ответить | Цитировать Сообщить модератору
 Re: Не понятная блокирование диапазона  [new]
Любопытный гость
Guest
Гавриленко Сергей Алексеевич
Нельзя наложить блокировку на отсутствующую запись.
Это понятно.
Не понятно почему нельзя залочить только диапазон 1-1?
18 окт 13, 14:02    [14998269]     Ответить | Цитировать Сообщить модератору
 Re: Не понятная блокирование диапазона  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
Любопытный гость
Гавриленко Сергей Алексеевич
Нельзя наложить блокировку на отсутствующую запись.
Это понятно.
Не понятно почему нельзя залочить только диапазон 1-1?


так ведь нет его...

для наглядности:

CREATE TABLE A (AID INT PRIMARY KEY)
insert into A values(1), (5), (7)

select %%lockres%%, * from A

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION
DECLARE @SPID INT
SET @SPID = @@SPID
SELECT * FROM A WHERE AID between 2 and 2
EXEC sp_lock @SPID
COMMIT TRANSACTION
18 окт 13, 14:28    [14998444]     Ответить | Цитировать Сообщить модератору
 Re: Не понятная блокирование диапазона  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
http://technet.microsoft.com/ru-ru/library/ms191272(v=sql.105).aspx
18 окт 13, 14:34    [14998484]     Ответить | Цитировать Сообщить модератору
 Re: Не понятная блокирование диапазона  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
зы: кстати, диапазона ключей на которые накладывается блокировка ещё зависит от того, как отсортирован индекс
18 окт 13, 14:44    [14998565]     Ответить | Цитировать Сообщить модератору
 Re: Не понятная блокирование диапазона  [new]
Любопытный гость
Guest
Knyazev Alexey
так ведь нет его...
Так понятно что нет. Почему нельзя рассчитать lockres для этого значения?
Блокировка диапазона ключей применятся к индексу, указывая начальное и конечное значения ключа.
По результатам sp_lock можно найти одно из значений. Как найти второе?
18 окт 13, 14:54    [14998631]     Ответить | Цитировать Сообщить модератору
 Re: Не понятная блокирование диапазона  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
Любопытный гость
Почему нельзя рассчитать lockres для этого значения?


как? если его НЕТ!

>>Блокировка диапазона ключей применятся к индексу, указывая начальное и конечное значения ключа.

Если нет ключей, то лочится вся таблица
18 окт 13, 15:00    [14998677]     Ответить | Цитировать Сообщить модератору
 Re: Не понятная блокирование диапазона  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Любопытный гость
Так понятно что нет. Почему нельзя рассчитать lockres для этого значения?
Лочатся только "физические" вещи.
Есть строка в индексе - она и лочится.
Есть строка в списке страниц - она и лочится.
Есть строка в списке объектов бд - она и лочится.

А такой вещи как всевозможные диапазоны, бла-бла - нет такого в MS SQL.
Практического смысла нет лочить того чего нет.
Если его нет и не появится - то пофигу что лочится 1-10 или 1-100500. Читатели же взаимо не блокируются.

А вот если может появится, так возьми и создай что-то в бд, что уже можно и залочить.
INSERT A VALUES (1)

И принципиальной никакой разницы между временным добавлением строк в таблице и вундер-списке залокированных псевдо-диапазонах - нет.
19 окт 13, 21:35    [15003143]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить