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

Откуда: Москва
Сообщений: 4391
Пытаюсь найти виновника блокировки процессов, но вижу, что spid равен -2.
Что это значит? Почему с минусом?
В интернете не нашел, на сайте микрософта тоже.
Привожу скрин. На всякий случай включил сюда и spid = 2.
Но, как почитал в источниках, это процесс поиска дедлоков и проблемой не должен являться.

К сообщению приложен файл. Размер - 12Kb
8 июл 15, 09:46    [17865834]     Ответить | Цитировать Сообщить модератору
 Re: Что значит blocked = -2  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
а шо каже sp_who ?
8 июл 15, 09:54    [17865880]     Ответить | Цитировать Сообщить модератору
 Re: Что значит blocked = -2  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4391
Maxx
а шо каже sp_who ?

Да в том то и дело, что ничего!
Даже hostname не определяет :(
В тексте завесившего запроса создание хранимой процедуры.
Но кто её пытается создать и откуда непонятно.
При попытке кильнуть заблокированные процессы - они появляются в списке снова.
Ни приложения, откуда идет запрос, ни машины определить не получается :(
8 июл 15, 10:03    [17865929]     Ответить | Цитировать Сообщить модератору
 Re: Что значит blocked = -2  [new]
invm
Member

Откуда: Москва
Сообщений: 9632
https://msdn.microsoft.com/ru-ru/library/ms173730(v=sql.120).aspx
Use KILL UOW to terminate orphaned distributed transactions. These transactions are not associated with any real session ID, but instead are associated artificially with session ID = '-2'. This session ID makes it easier to identify orphaned transactions by querying the session ID column in sys.dm_tran_locks, sys.dm_exec_sessions, or sys.dm_exec_requests dynamic management views.
8 июл 15, 10:13    [17865990]     Ответить | Цитировать Сообщить модератору
 Re: Что значит blocked = -2  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4391
invm, огромное спасибо!!!
Это то, что нужно... Почему-то не смог найти сам.
8 июл 15, 10:15    [17866002]     Ответить | Цитировать Сообщить модератору
 Re: Что значит blocked = -2  [new]
Ruiner
Member

Откуда: СПб
Сообщений: 64
чуть дополню:
SQL Server Concurrency Locking, Blocking and Row Versioning By Kalen Delaney
There are some conditions where the blocking_session_id may not refer to an
actual session_id value. As mentioned in the SQL Server Books Online discussion of
sys.dm_os_waiting_tasks, sometimes the value of blocking_session_id may be
NULL because there is no blocking session, or SQL Server cannot identify the blocking
session. When inspecting lock-based blocking on a multi-user system, this should not be
very common. However, SQL Server will sometimes report the blocking_session_id
as a negative number. There are three possible codes for when the session_id might
be negative.
• -2 – The locked resource is owned by an orphaned distributed transaction.
• -3 – The locked resource is owned by a deferred recovery transaction.
• -4 – For a latch wait, internal latch state transitions prevent identification of
the session id.
8 июл 15, 10:52    [17866350]     Ответить | Цитировать Сообщить модератору
 Re: Что значит blocked = -2  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4391
Ситуация повторилась.
Причем ни в первый раз, ни сейчас предложенные рекомендации от Микрософт не помогли.
Прошлый раз проблема решилась после перезапуска службы DTC и перестроения всех индексов в базе.
Это помогло или что иное не понятно.
Сейчас такой вариант решения уже не прокатывает.
Кто сталкивался с такой пробемой?
21 сен 15, 11:26    [18174225]     Ответить | Цитировать Сообщить модератору
 Re: Что значит blocked = -2  [new]
Glory
Member

Откуда:
Сообщений: 104760
SQL2008
Кто сталкивался с такой пробемой?

С проблемой отключения клиента, начавшего эту транзакцию ?
21 сен 15, 11:29    [18174244]     Ответить | Цитировать Сообщить модератору
 Re: Что значит blocked = -2  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4391
Glory
SQL2008
Кто сталкивался с такой пробемой?

С проблемой отключения клиента, начавшего эту транзакцию ?

В том то и вся проблема, что ни клиента начавшего транзакцию, ни других следов процесса найти не удается.
Нет транзакций, которые можно было бы откатить.
Нет UOW распределенной транзакции, по которой можно было бы сделать KILL.
UOW этой транзакции = 00000000-0000-0000-00000000000, при попытке убить пишет, что "нет такой транзакции".
Как в анекдоте - "слова нет, а жопа есть".
21 сен 15, 13:44    [18175068]     Ответить | Цитировать Сообщить модератору
 Re: Что значит blocked = -2  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1758
SQL2008,

а sp_who2 что пишет?
21 сен 15, 13:47    [18175094]     Ответить | Цитировать Сообщить модератору
 Re: Что значит blocked = -2  [new]
Glory
Member

Откуда:
Сообщений: 104760
SQL2008
В том то и вся проблема, что ни клиента начавшего транзакцию, ни других следов процесса найти не удается.

А как вы ищите то ? на скриншоте как минимум есть имя таблицы
21 сен 15, 13:48    [18175101]     Ответить | Цитировать Сообщить модератору
 Re: Что значит blocked = -2  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4391
Glory
SQL2008
В том то и вся проблема, что ни клиента начавшего транзакцию, ни других следов процесса найти не удается.

А как вы ищите то ? на скриншоте как минимум есть имя таблицы

Таблица известна, она и блокируется. Тут все понятно, но процесс, которым блокируется помечен как -2.
Как только останавливаю запрос, то все пропадает.
Один раз помог ребилд кластерного индекса этой таблицы.
Но сегодня и это не помогает.
Перерыл весь интернет, у всех совет один - убить процесс по UOW.
Только вот найти этот UOW нет никакой возможности.
В списке DTC нет этого процесса.
21 сен 15, 13:53    [18175143]     Ответить | Цитировать Сообщить модератору
 Re: Что значит blocked = -2  [new]
Glory
Member

Откуда:
Сообщений: 104760
SQL2008
Таблица известна, она и блокируется.

Раз известна таблица, то значит надо искать запросы с ее участием

SQL2008
Как только останавливаю запрос, то все пропадает.

В смысле ? Вы сами и запускает запрос, который приводит к этйо ситуации ?

SQL2008
Только вот найти этот UOW нет никакой возможности.
В списке DTC нет этого процесса.

В ссылке же написано
UOW

Применимо для следующих объектов: (С SQL Server 2008 по SQL Server 2014 включительно.
Задает идентификатор единицы работы (UOW) распределенных транзакций. UOW представляет собой идентификатор GUID, который может быть получен из столбца request_owner_guid динамического административного представления sys.dm_tran_locks. Также аргумент UOW может быть получен из журнала ошибок или из монитора транзакций MS DTC. Дополнительные сведения о наблюдении за распределенными транзакциями см. в руководстве пользователя MS DTC.
21 сен 15, 13:57    [18175183]     Ответить | Цитировать Сообщить модератору
 Re: Что значит blocked = -2  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4391
Есть подозрение, что транзакцию вешает некоторый кривой софт.
Типа делает BEGIN TRAN, а потом завершается либо падает.
Только я полагал, что в этом случае транзакции должны откатываться сами.
21 сен 15, 14:00    [18175208]     Ответить | Цитировать Сообщить модератору
 Re: Что значит blocked = -2  [new]
Glory
Member

Откуда:
Сообщений: 104760
SQL2008
Типа делает BEGIN TRAN, а потом завершается либо падает.
Только я полагал, что в этом случае транзакции должны откатываться сами.

Если сервер узнает о "потом завершается либо падает", то он разумеется отменит транзакцию
21 сен 15, 14:02    [18175229]     Ответить | Цитировать Сообщить модератору
 Re: Что значит blocked = -2  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4391
Glory
В ссылке же написано
UOW

Все верно, так и написано. Вот только в реальности немного другая картина.

Продолжение следует...
21 сен 15, 14:04    [18175251]     Ответить | Цитировать Сообщить модератору
 Re: Что значит blocked = -2  [new]
Glory
Member

Откуда:
Сообщений: 104760
SQL2008
Все верно, так и написано. Вот только в реальности немного другая картина.

В реальности вы сказали, что проверили только DTC монитор
21 сен 15, 14:05    [18175256]     Ответить | Цитировать Сообщить модератору
 Re: Что значит blocked = -2  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4391
select request_owner_guid from sys.dm_tran_locks

всегда возвращает
00000000-0000-0000-000000000000

убить процесс по такому UOW нельзя, я уже писал выше
21 сен 15, 14:08    [18175292]     Ответить | Цитировать Сообщить модератору
 Re: Что значит blocked = -2  [new]
Glory
Member

Откуда:
Сообщений: 104760
SQL2008
select request_owner_guid from sys.dm_tran_locks


всегда возвращает
00000000-0000-0000-000000000000

убить процесс по такому UOW нельзя, я уже писал выше

"из журнала ошибок ... MS DTC"
21 сен 15, 14:10    [18175309]     Ответить | Цитировать Сообщить модератору
 Re: Что значит blocked = -2  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4391
Блокировка пропала, больше проиллюстрировать ничего не смогу.
Продолжу тему, когда появится вновь.
21 сен 15, 14:12    [18175333]     Ответить | Цитировать Сообщить модератору
 Re: Что значит blocked = -2  [new]
Glory
Member

Откуда:
Сообщений: 104760
SQL2008
Блокировка пропала, больше проиллюстрировать ничего не смогу.
Продолжу тему, когда появится вновь.

Журнал ошибок то никуда не пропал
21 сен 15, 14:17    [18175366]     Ответить | Цитировать Сообщить модератору
 Re: Что значит blocked = -2  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4391
Продолжим.
Блокировка снова есть.
Какие будут вопросы, предложения?
Готовы выслушать любые, так как голову уже сломал.
21 сен 15, 14:32    [18175496]     Ответить | Цитировать Сообщить модератору
 Re: Что значит blocked = -2  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4391
exec sp_who 


133 0 suspended ... -2 ... SELECT 0
21 сен 15, 14:36    [18175528]     Ответить | Цитировать Сообщить модератору
 Re: Что значит blocked = -2  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4391
select * from sys.dm_tran_locks where request_session_id = 133

возвращает в поле request_owner_guid
00000000-0000-0000-000000000000
21 сен 15, 14:42    [18175594]     Ответить | Цитировать Сообщить модератору
 Re: Что значит blocked = -2  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4391
Если же по
select * from sys.dm_tran_locks where request_session_id = -2

получить UOW и убить процесс, то убивается основной процесс, а не блокирующий.
21 сен 15, 15:04    [18175815]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить