Здравствуйте, peer, Вы писали:
P>Здравствуйте, gandjustas, Вы писали:
G>>Мне кажется вы не туда копаете:
G>>1) перепишите запросы, сделайте индексы так, чтобы не было конфликтов блокировок
P>тут есть нюансы. в одном месте delete from products where id = @
P>а в другом идет
P>update products where id = @
P>тут наверное только updlock поможет или read snapshot справится?
Видимо да. Потому что при снапшоте будет "кто первый встал, того и тапки", остальные отвалятся.
Правда не очень понятно почему приложение параллельно генерирует запросы на обновление и удаление строк, это что за сценарий?
G>>2) поставьте уровень изоляции read commited snapshot
P>там нет подводных камней, просто свойство базы?
В отличие от обычного read commited используются не блокировки, а MVCC. В итоге кто первый транзакцию закоммитил, тот и прав, а остальные отваливаются.
G>>3) если предыдущие два не помогли, то воспользуйтесь select for update
P>это который updlock?
Да
G>>5) если serializable слишком жирно и проблема только в этом батче, то используйте app lock
P>а можно пояснить про какой апп лок речь?
https://learn.microsoft.com/ru-ru/sql/relational-databases/system-stored-procedures/sp-getapplock-transact-sql