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

Откуда:
Сообщений: 524
День добрый!
Речь идет о базе данных MSCRM 2011, SQL Server 2008 R2
Отсортировал трейс профайлера по duration и обнаружил, что одна из самых "тяжелых" операций является:
exec sp_getapplock @Resource=N'Contact_ХХХ',@LockMode=N'Update'
Это значит, что в течении дня одновременно делали селекты из таблицы и пытались сделать ей Update, но не могли, т.к. она была заблокирована?

Как это предотвратить?

Спасибо!
24 дек 12, 20:14    [13679409]     Ответить | Цитировать Сообщить модератору
 Re: что есть sp_getapplock?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
да, "оно" ждало освобождения указанного ресурса другими процессами
селекты тут не особо при чем, @LockOwner не указан, а значит будет "Transaction (the default)"
итого, у вас была длинная транзакция, внутри которой был успешный вызов sp_getapplock - вот завершения "той" транзакции "ваш" процесс и ждал, от того такое значение в duration
предотвратить - "элементарно" - не допускать длинных транзакций
наиболее яркий пример - кто-то дебажил хранимку, в которой что-то типа такого:

begin tran
exec sp_getapplock @Resource=N'Contact_ХХХ',@LockMode=N'Update'
...
commit / rollback


но в процессе выполнения "..." сделал кенсел и бросил студию
или кто-то в try catch блоке забыл сделать rollback и "повесил" транзакцию для сессии..
вариантов много, по имеющимся данным ничего конкретно не определить, к сожалению ибо вы не знаете какой именно процесс вы ждали
24 дек 12, 20:24    [13679441]     Ответить | Цитировать Сообщить модератору
 Re: что есть sp_getapplock?  [new]
abrashka
Member

Откуда:
Сообщений: 524
Crimean,
Спасибо большое!

Изменение isolation level может частично устранить проблему таких блокировок?
Или может другие настройки?
25 дек 12, 08:49    [13680648]     Ответить | Цитировать Сообщить модератору
 Re: что есть sp_getapplock?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31984
abrashka
Crimean,
Спасибо большое!

Изменение isolation level может частично устранить проблему таких блокировок?
Или может другие настройки?
Нельзя.

Это не блокировка на обновление или что то в этом роде.

Это процедура специально сделана для возможности остановить выполнение и ждать какого то события.

Т.е. из приложения специально вызывают sp_getapplock, что бы подождать, пока другой экземпляр приложения не разрешит продолжить работу.

Соответственно варианта два - либо большая конкуренция таких экземпляров приложений, которые говорят другим, что нужно подождать, либо где то ошибка (что и имел в виду Crimean), когда приложение забывает освободить "очередь" выполнения.

Бороться можно либо изменением приложения, либо повышением быстродействия сервера.

В первом случае можно либо менять логику, что бы не было необходимости держать очередь, либо уменьшать время удержания, либо найти это ошибку (в случае ошибки).
25 дек 12, 09:07    [13680676]     Ответить | Цитировать Сообщить модератору
 Re: что есть sp_getapplock?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31984
alexeyvg
Это не блокировка на обновление или что то в этом роде.
Т.е. фраза
abrashka
Это значит, что в течении дня одновременно делали селекты из таблицы и пытались сделать ей Update, но не могли, т.к. она была заблокирована?
не имеет смысла, этот фрагмент кода не относится к обновлениям и к каким либо таблицам.
25 дек 12, 09:09    [13680679]     Ответить | Цитировать Сообщить модератору
 Re: что есть sp_getapplock?  [new]
mike909
Member

Откуда:
Сообщений: 662
alexeyvg
alexeyvg
Это не блокировка на обновление или что то в этом роде.
Т.е. фраза
abrashka
Это значит, что в течении дня одновременно делали селекты из таблицы и пытались сделать ей Update, но не могли, т.к. она была заблокирована?
не имеет смысла, этот фрагмент кода не относится к обновлениям и к каким либо таблицам.
Если только нет триггера на этой таблице с кодом "exec sp_getapplock"
25 дек 12, 11:21    [13681307]     Ответить | Цитировать Сообщить модератору
 Re: что есть sp_getapplock?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
вы посмотрите по активным процессам - нет ли у вас в течении дня процессов, для которых открыта транзакция и время последнего батча, скажем, минут на 5 в прошлом
25 дек 12, 11:33    [13681342]     Ответить | Цитировать Сообщить модератору
 Re: что есть sp_getapplock?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31984
mike909
alexeyvg
пропущено...
Т.е. фраза
пропущено...
не имеет смысла, этот фрагмент кода не относится к обновлениям и к каким либо таблицам.
Если только нет триггера на этой таблице с кодом "exec sp_getapplock"
Ну, это уж было бы слишком...
25 дек 12, 11:46    [13681465]     Ответить | Цитировать Сообщить модератору
 Re: что есть sp_getapplock?  [new]
abrashka
Member

Откуда:
Сообщений: 524
Понятно, всем спасибо!
Проблемма решилась сама собой, больше не повторяется
26 дек 12, 12:31    [13687880]     Ответить | Цитировать Сообщить модератору
 Re: что есть sp_getapplock?  [new]
2232323
Guest
abrashka
Понятно, всем спасибо!
Проблемма решилась сама собой, больше не повторяется


что хоть было?
26 дек 12, 12:40    [13687953]     Ответить | Цитировать Сообщить модератору
 Re: что есть sp_getapplock?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
кто-то процу с транзакцией и applock тестил в квере, выполнение закенселил, кверю не закрыл - процесс остался, для него транзакция и выставленные блокировки. и пока кверю не закрыли - все ждали этот процесс ;) знакомое дело
26 дек 12, 12:45    [13687998]     Ответить | Цитировать Сообщить модератору
 Re: что есть sp_getapplock?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
abrashka
Понятно, всем спасибо!
Проблемма решилась сама собой, больше не повторяется


вы поймали мечту за хвост
26 дек 12, 15:12    [13689573]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить