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

Откуда:
Сообщений: 864
Здравствуйте.

Версия сервера:

Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) Apr 2 2010 15:48:46 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )


Словили блокировку с типом "KEY" (Блокировка внутри индекса, которая защищает диапазон ключей в сериализуемых транзакциях)
Режим блокировки "U" (Update)

Знаем объект который участвует в блокировке - это таблица с "кубами"
Содержимое INPUTBUFFER показало, что ноги растут из хранимой процедуры (назовем её "MyDB.dbo.DeleteCheckedItems;1")

Поясните, куда копать? Что то не так с индексами у этой таблицы? или с ключом?
31 окт 18, 15:12    [21720416]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять информацию по блокировке..  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36694
А с чего вы вообще взяли, что в вашей ситуации что-то не так?
31 окт 18, 15:17    [21720430]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять информацию по блокировке..  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30778
MAULER
Словили блокировку с типом "KEY" (Блокировка внутри индекса, которая защищает диапазон ключей в сериализуемых транзакциях)
Режим блокировки "U" (Update)
Вы про блокировку, или про дедлок?
31 окт 18, 15:27    [21720451]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять информацию по блокировке..  [new]
MAULER
Member

Откуда:
Сообщений: 864
Гавриленко Сергей Алексеевич,

Ну потому что я словил блокировку. Эта блокировка может висеть часами, у пользователей всё начинает тормозить. До тех пор пока её не прибьют руками.
Хочу, чтобы таких блокировок не возникало.
31 окт 18, 15:28    [21720453]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять информацию по блокировке..  [new]
MAULER
Member

Откуда:
Сообщений: 864
alexeyvg
MAULER
Словили блокировку с типом "KEY" (Блокировка внутри индекса, которая защищает диапазон ключей в сериализуемых транзакциях)
Режим блокировки "U" (Update)
Вы про блокировку, или про дедлок?


Видимо дедлок. Хочу понять причину, а из информации что есть только то что я написал в первом посте.
31 окт 18, 15:30    [21720454]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять информацию по блокировке..  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
MAULER
Видимо дедлок

видимо, что угодно, но не дедлок.
дедлок сервер разруливает без вас менее, чем за секунду
31 окт 18, 15:32    [21720458]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять информацию по блокировке..  [new]
MAULER
Member

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

Я просто хочу понять, почему именно блокировка с типом KEY?
Т.е. что мне проверить в первую очередь? Может быть что-то не так с индексом? или индекс построен неправильно.. или ещё что-то?
31 окт 18, 15:38    [21720465]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять информацию по блокировке..  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 5162
Yasha123
дедлок сервер разруливает без вас менее, чем за секунду


первый дедлок будет разрешен максимум через 5 секунд после возникновения
далее частота обнаружения резко повышается (до 100ms), если дедлоков больше не наблюдается, частота возвращается к 5 с
31 окт 18, 15:42    [21720473]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять информацию по блокировке..  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
MAULER
Yasha123,

Я просто хочу понять, почему именно блокировка с типом KEY?
Т.е. что мне проверить в первую очередь? Может быть что-то не так с индексом? или индекс построен неправильно.. или ещё что-то?

и с чем же еще должна быть блокировка?
радуйтесь, что KEY, индекс используется.
вам бы хотелось, чтобы всю таблицу залочило?
31 окт 18, 15:47    [21720477]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять информацию по блокировке..  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 5162
MAULER
Ну потому что я словил блокировку. Эта блокировка может висеть часами, у пользователей всё начинает тормозить. До тех пор пока её не прибьют руками.
Хочу, чтобы таких блокировок не возникало.


либо активный процесс (владелец блокировки) не очень расторопен, либо незакрытая транзакция

воспользуйтесь sp_whoisactive - она покажет и блокирующего, и транзакции, и планы, и многое другое
31 окт 18, 15:48    [21720481]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять информацию по блокировке..  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
komrad
Yasha123
дедлок сервер разруливает без вас менее, чем за секунду

первый дедлок будет разрешен максимум через 5 секунд после возникновения
далее частота обнаружения резко повышается (до 100ms), если дедлоков больше не наблюдается, частота возвращается к 5 с

и какая же разница, если у ТС
автор
Эта блокировка может висеть часами

?
31 окт 18, 15:49    [21720482]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять информацию по блокировке..  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 5162
MAULER
Здравствуйте.

Версия сервера:

Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) Apr 2 2010 15:48:46 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )

Поясните, куда копать?

поставьте актуальный апдейт сначала, а то можно удивляться багам на ровном месте

http://sqlserverbuilds.blogspot.com/#sql2008r2
31 окт 18, 15:50    [21720484]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять информацию по блокировке..  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 5162
Yasha123
komrad
пропущено...

первый дедлок будет разрешен максимум через 5 секунд после возникновения
далее частота обнаружения резко повышается (до 100ms), если дедлоков больше не наблюдается, частота возвращается к 5 с

и какая же разница, если у ТС
автор
Эта блокировка может висеть часами

?

это к тому, что не 1с, а 5с для первого дедлока
просто уточнение
31 окт 18, 15:52    [21720488]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять информацию по блокировке..  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
MAULER
Словили блокировку с типом "KEY" (Блокировка внутри индекса, которая защищает диапазон ключей в сериализуемых транзакциях)
Режим блокировки "U" (Update)

и где вы тут нашли "диапазон ключей" и "сериализацию"?
31 окт 18, 15:59    [21720505]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять информацию по блокировке..  [new]
MAULER
Member

Откуда:
Сообщений: 864
Yasha123, здесь.
31 окт 18, 16:03    [21720512]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять информацию по блокировке..  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
MAULER
Yasha123, здесь.

значит, смените чтиво.
вот тут перечислены блокировки,
сравните таблицы 10-3 и 10-4,
убедитесь, что у вас никакого диапазона нет,
равно как и сериализации
31 окт 18, 16:18    [21720542]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять информацию по блокировке..  [new]
MAULER
Member

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

Спасибо. Чтиво полезное.
Но у меня до сих пор нет полной ясности, что делать с этой блокировкой.

Посмотрел код хранимой процедуры, там идет блок try-catch:
	  begin try	  
			set @rowCountExt = 1;
			while @rowCountExt > 0
			begin
				begin transaction
					begin
						exec('DELETE TOP(10) FROM [' + @name + '] WHERE [deleted] = 1');
					end				
					set @rowCountExt = @@rowcount;
				commit transaction
			end			
	  end try		
	  begin catch	  
			rollback transaction;
			SELECT 
				@ErrorMessage = ERROR_MESSAGE(),
				@ErrorSeverity = ERROR_SEVERITY(),
				@ErrorState = ERROR_STATE();
			RAISERROR (@ErrorMessage,@ErrorSeverity,@ErrorState);
			return;
	  end catch


вот этот
exec('DELETE TOP(10) FROM [' + @name + '] WHERE [deleted] = 1');

обрабатывает 0 строк, т.к. в столбце [deleted] везде нули.

может чей то опытный взгляд заметит подводный камень в этом коде?
1 ноя 18, 09:34    [21721096]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять информацию по блокировке..  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30778
MAULER
может чей то опытный взгляд заметит подводный камень в этом коде?
Подозреваю, что для удаления нужно долго сканить всю таблицу, предварительно её заблокировав.

Рекомендую сделать фильтрованный индекс с условием WHERE [deleted] = 1
1 ноя 18, 10:05    [21721131]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять информацию по блокировке..  [new]
MAULER
Member

Откуда:
Сообщений: 864
alexeyvg,
Я посмотрел содержимое, В этой таблице, 8500 записей. Неужели такое количество может положить сервер на несколько часов?
1 ноя 18, 10:23    [21721156]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять информацию по блокировке..  [new]
invm
Member

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

Ваша сессия с DELETE тоже блокирована.
1 ноя 18, 10:38    [21721186]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять информацию по блокировке..  [new]
MAULER
Member

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

Да, а видимо кем блокирована, надо посмотреть по blocked, выкупить запрос из INPUTBUFFER по spid = blocked
и понять корень блокировки...

У меня правильный ход мыслей?
1 ноя 18, 10:47    [21721200]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять информацию по блокировке..  [new]
invm
Member

Откуда: Москва
Сообщений: 9122
MAULER
и понять корень блокировки...

У меня правильный ход мыслей?
Да
1 ноя 18, 11:27    [21721242]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять информацию по блокировке..  [new]
MAULER
Member

Откуда:
Сообщений: 864
Подскажите, правильно ли я понимаю процесс отлавливания причины блокировки:
Первоначально процесс построен так:

1) Отлавливаю блокировку:
SELECT *
  FROM master.dbo.sysprocesses (nolock) 
 WHERE blocked > 0

Получаю 1 строку с информацией о блокировке. (т.е. @spid = spid и @blocked = blocked)

Получаю текст заблокированного запроса:
declare @eventInfo nvarchar(max)
SELECT @eventInfo = (select t.text from sys.[dm_exec_sql_text](sp.sql_handle) t)		   
  FROM master.dbo.sysprocesses (nolock) sp
WHERE spid = @spid


Затем получаю текст блокирующего запроса:
declare @blocked_eventInfo nvarchar(max)
SELECT @blocked_eventInfo = (select t.text from sys.[dm_exec_sql_text](sp.sql_handle) t)		   
  FROM master.dbo.sysprocesses (nolock) sp
 WHERE spid = @blocked


Проблема в том, что если смотреть процесс в dbo.sysprocesses по spid = @blocked (из первого запроса)
то он (как я понимаю первопричина) - не заблокирован.
и INPUTBUFFER такого процесса постоянно меняется! Отсюда у меня есть опасения, что я не правильно получаю текст блокирующего запроса.

Отсюда вопрос: как получить текст того самого первого запроса, который стал причиной блокировки?
1 ноя 18, 13:57    [21721509]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять информацию по блокировке..  [new]
MAULER
Member

Откуда:
Сообщений: 864
Думаю, что причина, по которой каждый раз меняется текст блокирующего запроса - простая:

Я ловлю блокировку агентом MSSQL, задание которого срабатывает каждые 30 сек.
На момент возникновения блокировки spid и blocked попадают в sysprocesses абсолютно верными.

Но когда начинаю анализировать блокировку (предварительно поймав её), spid блокировки остаётся прежним, ведь она ещё висит!

а вот blocked (id блокирующего процесса) может уже 20 раз измениться. И вроде бы я смотрю правильный spid в sysprocesses, а данные в нём уже совсем от другой активности.

Поэтому смысл смотреть содержимое INPUTBUFFER блокирующего процесса имеет только тогда, когда есть возможность перехватывать его сразу в момент возникновения, а не по таймеру.

Я правильно понимаю суть?
1 ноя 18, 14:37    [21721577]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять информацию по блокировке..  [new]
Владислав Колосов
Member

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

если блокировка исчезает за столь малое время (несколько секунд), то проблема, скорее всего, недостойна внимания.
1 ноя 18, 15:19    [21721639]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить