УРОВЕНЬ ИЗОЛЯЦИИ СДЕЛКИ С ПОВТОРНЫМ УЧЕТОМ в SQL Server - PullRequest
4 голосов
/ 28 января 2010

Каковы риски или ухудшение производительности при использовании SET REACATABLE READATABLE READ УРОВНЯ ИЗОЛЯЦИИ?

У нас есть некоторые SP, которые вызываются из служб BizTalk. Иногда мы заходим в тупик. Если мы изменим уровень изоляции, каковы риски и возможные ухудшения производительности?

Ответы [ 4 ]

5 голосов
/ 28 января 2010

Repeatable Read установит блокировки на все строки, которые имеют был доставлен В ситуациях, когда вы работаете с курсоры, извлекающие большие объемы данных, это может вызвать конфликт с другими пользователями, потому что они не могут получить блокировки для обновления любой строки, прочитанной курсорами с Repeatable Read, пока курсор не закроется.

Риск снижения производительности заключается в том, что транзакции могут перенести увеличенное количество таймаутов и / или тупиков. Этот риск пропорциональна вероятности того, что две транзакции должны читать / обновлять одни и те же строки одновременно. Еще один фактор, который Может повлиять на ваше приложение размер взятой блокировки. Если замки Если принять данные на уровне страницы, то может возникнуть конфликт, если данные отличаются транзакции должны иметь доступ к одной и той же странице, а не к одной строке.

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

2 голосов
/ 28 января 2010

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

2 голосов
/ 28 января 2010

Попробуй. Мы не можем сказать вам, с какими потенциальными рисками или проблемами производительности вы можете столкнуться с одной точкой данных (УРОВЕНЬ ИЗОЛЯЦИИ ТРАНЗАКЦИИ). Мы НИЧЕГО не знаем о ваших данных, объеме данных, TPS, зависимостях данных. Всякий раз, когда речь идет о производительности, попробуйте, измерьте ее. Другого ответа нет.

1 голос
/ 28 января 2010

Повторяемое чтение не снимает общие блокировки после выполнения чтения.

Это означает, что если вы выполнили SELECT в транзакции RR, параллельные транзакции не смогут обновить строки, заблокированные вашим SELECT.

...