, поскольку я распознал блокировки таблиц, которые запрашиваются одновременно, я решил включить SNAPSHOT УРОВНЯ ИЗОЛЯЦИИ , который был для меня новым.
ALTER DATABASE RM2 SET SINGLE_USER WITH ROLLBACK IMMEDIATE ;
ALTER DATABASE RM2 SET ALLOW_SNAPSHOT_ISOLATION ON;
ALTER DATABASE RM2 SET READ_COMMITTED_SNAPSHOT ON;
ALTER DATABASE RM2 SET MULTI_USER;
Но теперь мне интересно, можно ли применить этот уровень изоляции автоматически ко всем существующим запросам, потому что эта БД содержит множество представлений, хранимых процедур, функций табличных значений и запрашивается многими различными приложениями (например, SSRS, SSAS, ASP.NET с ADO.NET, ADO Соединения из Excel).
Если я правильно понял, мне нужно изменить запросы, чтобы использовать IsolationLevel.Snapshot, например:
SET TRANSACTION ISOLATION LEVEL SNAPSHOT
GO
BEGIN TRAN SparePartReport
SELECT TOP 100 PERCENT * FROM DBO.Last3MonthSparepartReport
COMMIT TRAN SparePartReport
Q: Можно ли каким-то образом минимизировать усилия, потому что я не могу изменить все приложения и запросы. Другая проблема заключается в том, что я не могу напрямую применить IsoalationLevel к представлениям.
Примечание. Большинство релевантных таблиц в базе данных доступны только для чтения в течение всего дня, поскольку данные импортируются в одночасье службой Windows и хранимыми процедурами.
Заранее спасибо
Хотя ответ @ Максимилиана кажется правильным, у меня все еще возникают ситуации тупиковой ситуации / тайм-аута в приложении ASP.NET при одновременном запуске больших отчетов.
Вот следующий вопрос .