В моей базе данных есть две тесно связанные таблицы.Существует часто называемый SP, который вставляет некоторые строки в обе таблицы в транзакции, и несколько других мест, в которых соединяются SELECT из этих таблиц.
INSERT принимают X-блокировки для обеих таблиц, SELECT принимают S или IS-блокировкиих.Поскольку порядок, в котором принимаются общие блокировки, варьируется от запроса к запросу, некоторые из них иногда оказываются заблокированными с помощью транзакции INSERT.
Есть ли хороший способ избежать этих взаимных блокировок (NOLOCK, вероятно, не квалифицируется как 'хорошо ')?
Пока что единственное общее решение, которое я могу придумать, это использование уровня изоляции SNAPSHOT.Тем не менее, это добавило бы некоторую потерю производительности, и я пока не нашел звуковых данных о том, насколько велика эта нагрузка.