Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Snapshot транзакция блочит SELECT  [new]
tratata74
Member

Откуда:
Сообщений: 15
Добрый день.

Проблема такая, в базе данных периодически возникают блокировки, когда один select блокирует другие, также SELECTы.
У всех блокирующих запросов уровень изоляции - Snapshot.
Селекты вообще не должны блокировать друг друга, так как накладывается лишь блокировка типа S.
Транзакции с TIL Snapshot также не должны блокировать друг друга.
Цитата с https://docs.microsoft.com/en-us/sql/t-sql/statements/set-transaction-isolation-level-transact-sql?view=sql-server-2017:
Except when a database is being recovered, SNAPSHOT transactions do not request locks when reading data. SNAPSHOT transactions reading data do not block other transactions from writing data. Transactions writing data do not block SNAPSHOT transactions from reading data.

К тому же в запросах блокирующем и заблокированных вообще идет обращение к разным таблицам, правда одной схемы.

В теме https://www.sql.ru/forum/798547/snapshot-isolation-select-blokiruet-insert товарищ Кудряшка в сообщении от 19 окт 10, 03:57 упомянул:"Версионный механизм разрешения конкуренции, если вы почитаете, то он накладывает иные блокировки при ЧТЕНИИ данных " - кто-нибудь в курсе блокировок при чтении?

Я что-то совсем не впиливаю, полный конец обеда. Подскажите куда копать люди добрые.
18 июл 19, 18:49    [21929679]     Ответить | Цитировать Сообщить модератору
 Re: Snapshot транзакция блочит SELECT  [new]
tratata74
Member

Откуда:
Сообщений: 15
скриншот

К сообщению приложен файл. Размер - 56Kb
18 июл 19, 18:51    [21929680]     Ответить | Цитировать Сообщить модератору
 Re: Snapshot транзакция блочит SELECT  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4395
tratata74,

Вы текст скрипта покажите. У вас там может ещё куча таблиц. Или транзакция обернута другой транзакцией.
18 июл 19, 19:10    [21929685]     Ответить | Цитировать Сообщить модератору
 Re: Snapshot транзакция блочит SELECT  [new]
tratata74
Member

Откуда:
Сообщений: 15
a_voronin,
Запрос 194 сессии:
(@P0 nvarchar(4000),@P1 nvarchar(4000),@P2 nvarchar(4000),@P3 nvarchar(4000),@P4 nvarchar(4000)) SELECT COUNT(1) FROM SKUxLOC SL JOIN LOC L on SL.LOC = L.LOC JOIN SKUxLOC SL1 on SL1.LOC = SL.LOC WHERE L.Loc = @P0 AND L.CommingleSku = '0' AND SL.SKU = @P1 AND (SL.QTY > 0 OR SL.QTYLOCATIONLIMIT > 0) AND (SL1.SKU <> @P2 OR ( SL1.SKU = @P3 AND SL1.StorerKey <> @P4 )) and SL1.QTY > 0

в запросах 111 и 128 сессий нет обращений ни к SKUxLOC, ни к LOC.

Также был замечен блокирующий запрос(тоже с TIL Snapshot) с текстом: (@P0 nvarchar(4000))SELECT * FROM LOT WHERE Lot = @P0 . Уж тут то вообще проще некуда.
18 июл 19, 19:35    [21929707]     Ответить | Цитировать Сообщить модератору
 Re: Snapshot транзакция блочит SELECT  [new]
invm
Member

Откуда: Москва
Сообщений: 9128
1. Читатель на TIL Snapshot может блокировать кого-то, если для каких-либо таблиц в запросе прописаны соответствующие хинты.
2. Результат на вашем скриншоте странный - при BlockedBy <> 0 status не может быть running
3. Покажите wait resource для заблокированных сессий.
18 июл 19, 20:35    [21929725]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить