|
Почему не срабатывают блокировки на таблицу?
|
|||
---|---|---|---|
#18+
Вопрос не новый, но, почему то, ответа на него я не нашёл. Пытаюсь заблокировать доступ к таблице на чтение (и запись). Открываю два экземпляра MS SMS, подключаюсь к одной и той же базе из обоих. В одном делаю блокирующий (как мне кажется) запрос Код: sql 1. 2. 3. 4. 5.
Пока он выполняется, во втором пытаюсь читать из этой же таблицы Код: sql 1. 2.
И никаких проблем с чтением не испытываю - данные сразу читаются, хотя согласно документации и всему, что я нашёл на форумах - не должны. Что я делаю не так и как надо делать? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 02:52 |
|
Почему не срабатывают блокировки на таблицу?
|
|||
---|---|---|---|
#18+
Byte916, Уверены, что на этой SomeTable на момент выполнения запроса с tablockx нет никаких блокировок? Поскольку запрашивается эксклюзивная блокировка, то при наличии какой-либо блокировки на таблице сервер будет какое-то время (которое у SSMS равно бесконечности, а у клиентских приложений по-разному, у дотнетовского провайдера 30 секунд вроде как) ждать освобождения ресурса, и только потом наложит блокировку. Вполне возможно, что у вас запрос с tablockx ждет, когда существующие блокировки отвалятся, а запросу без tablockx они вообще не важны (может, там какие-нибудь Sch-S висят), и он выполняется нормально. Сделайте так: Код: sql 1. 2. 3. 4. 5. 6.
Byte916 Открываю два экземпляра MS SMS SSMS в одном запущенном экземпляре для каждой отдельной вкладки открывает новую сессию, если что. Для теста хватит двух вкладок в одной вертикальной или горизонтальной группе. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 06:27 |
|
Почему не срабатывают блокировки на таблицу?
|
|||
---|---|---|---|
#18+
Byte916 Вопрос не новый, но, почему то, ответа на него я не нашёл. Пытаюсь заблокировать доступ к таблице на чтение (и запись). Открываю два экземпляра MS SMS, подключаюсь к одной и той же базе из обоих. В одном делаю блокирующий (как мне кажется) запрос Код: sql 1. 2. 3. 4. 5.
Пока он выполняется, во втором пытаюсь читать из этой же таблицы Код: sql 1. 2.
И никаких проблем с чтением не испытываю - данные сразу читаются, хотя согласно документации и всему, что я нашёл на форумах - не должны. Что я делаю не так и как надо делать? Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 07:04 |
|
Почему не срабатывают блокировки на таблицу?
|
|||
---|---|---|---|
#18+
aleks222 Код: sql 1.
HOLDLOCK просто удерживает блокировку на время всей транзакции, даже если блокируемый ресурс уже не используется. Здесь в транзакции кроме селекта, накладывающего блокировку, ничего больше нет, и смысла в HOLDLOCK именно в данном случае никакого. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 08:04 |
|
Почему не срабатывают блокировки на таблицу?
|
|||
---|---|---|---|
#18+
Сон Веры Павловны aleks222 Код: sql 1.
HOLDLOCK просто удерживает блокировку на время всей транзакции, даже если блокируемый ресурс уже не используется. Здесь в транзакции кроме селекта, накладывающего блокировку, ничего больше нет, и смысла в HOLDLOCK именно в данном случае никакого. Разве тредстартер о смысле спрашивает? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 08:11 |
|
Почему не срабатывают блокировки на таблицу?
|
|||
---|---|---|---|
#18+
Byte916, У БД включен RCSI. Поэтому во второй сессии надо так Код: sql 1.
Ну или повысить TIL. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 09:19 |
|
Почему не срабатывают блокировки на таблицу?
|
|||
---|---|---|---|
#18+
invm Byte916, У БД включен RCSI. Поэтому во второй сессии надо так Код: sql 1.
Ну или повысить TIL. SELECT TOP (1000) * FROM SomeTable With (TABLOCKX) держит блокировку только до конца стейтмента, соответственно в момент waitfor delay '00:00:15' никаких блокировок на таблицу уже нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 09:24 |
|
Почему не срабатывают блокировки на таблицу?
|
|||
---|---|---|---|
#18+
msLex, У него обернуто в транзакцию - значит до конца транзакции, ибо X ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 09:36 |
|
|
start [/forum/topic.php?fid=46&fpage=20&tid=1684512]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 139ms |
0 / 0 |