Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?  [new]
leonix
Member

Откуда:
Сообщений: 357
alexeyvg
leonix
На просторах интернета нарыл вот такую таблицу. Не знаю, насколько ей можно доверять.
Мой случай выделил.

Картинка с другого сайта.
Ваш случай самый первый


У меня в транзакции.
Это в проведении документа. Проведение в транзакции.
Режим управления блокировками Управляемый.
Как определить какой у меня уровень изоляции? В профайлере?
15 апр 19, 19:59    [21862965]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?  [new]
msLex
Member

Откуда:
Сообщений: 5942
leonix
alexeyvg
пропущено...
Ваш случай самый первый


У меня в транзакции.
Это в проведении документа. Проведение в транзакции.
Режим управления блокировками Управляемый.
Как определить какой у меня уровень изоляции? В профайлере?


nolock - это синоним read uncommited
15 апр 19, 20:20    [21862974]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 998
leonix
alexeyvg
пропущено...
Ваш случай самый первый


У меня в транзакции.
Это в проведении документа. Проведение в транзакции.
Режим управления блокировками Управляемый.
Как определить какой у меня уровень изоляции? В профайлере?


мама дорогая, вам уже несколько раз повторили у вас в запросе использовано явное хинтование
FROM dbo._AccumRg34172 T2 WITH(NOLOCK)
у всех таблиц табличное указание read uncommitted уровня изоляции, в таком случае у вас для чтения из этих таблиц поведение будет как на уровне изоляции read uncommitted, и совершенно пофигу что у вас изначально ваш уровень изоляции read committed


set transaction isolation level READ COMMITTED;
select * from [dbo].[table] with(nolock);

эквивалентно
set transaction isolation level READ UNCOMMITTED;
select * from [dbo].[table];


поэтому совмещаемых блокировок на уровне строк для ваших читаемых таблиц накладываться не будет. будут только блокировки sch-S на уровне таблиц.

вот если у вас в запросе на уровне изоляции read committed к примеру будет инструкция
set transaction isolation level read committed;
select * 
from [dbo].[table1] t1 with(nolock) 
    join [dbo].[table2] t2 on t2.[id] = t1.[id]


то table1 будет читаться без блокировки строк, а вот на строки table2 S-блокировки строк будут запрошены, также будут наложены IS на уровне страниц и объекта. (или еще возможна эскалация)
15 апр 19, 20:23    [21862978]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?  [new]
leonix
Member

Откуда:
Сообщений: 357
У меня на этой таблице блокировок много.
Тогда получается, что если одна транзакция меняет хотябы одну строку в этой таблице, т.е. наложила x блокировку, то этот запрос не сможет выполниться, т.к. он пытается наложить s блокировку на все 10 млн. записей. Отсюда постоянные блокировки.
Я правильно понял?
15 апр 19, 21:37    [21863024]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?  [new]
leonix
Member

Откуда:
Сообщений: 357
leonix
У меня на этой таблице блокировок много.
Тогда получается, что если одна транзакция меняет хотябы одну строку в этой таблице, т.е. наложила x блокировку, то этот запрос не сможет выполниться, т.к. он пытается наложить s блокировку на все 10 млн. записей. Отсюда постоянные блокировки.
Я правильно понял?

Не, блокировки не будет.

Всем спасибо! Пойду искать где блокировки возникают.
15 апр 19, 21:57    [21863036]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28168
leonix
Всем спасибо! Пойду искать где блокировки возникают.
Так вы гадаете, глядя на запросы?
Не проще просто посмотреть? Например, sp_WhoIsActive
16 апр 19, 01:35    [21863132]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Microsoft SQL Server Ответить