Когда таблица заблокирована для вставки при вызове хранимой процедуры - PullRequest
1 голос
/ 08 октября 2011

У меня есть таблица, которая используется для составления отчетов, и данные вставляются каждый раз, когда пользователь запускает отчет из Интернета. Вставка может варьироваться от одной строки до нескольких тысяч в зависимости от параметров отчета. Оператор выбора, используемый для вставки, может выполняться до 60 секунд для вставки. Он был оптимизирован, но из-за сложности базы данных я не могу настроить его дальше. Мой вопрос - когда таблица заблокирована для вставки? Это когда хранимая процедура вызывается, когда выполняется оператор выбора или когда оператор выбора завершается? Я хотел бы ограничить время блокировки таблицы, чтобы другие пользователи не затрагивались при запуске большого отчета, до 50 000 строк.

ех.

INSERT INTO reportTable
SELECT
   Column a,
   Column b
FROM
    Table a
    INNER JOIN
    Table b
       on b.ident = a.Bident

Спасибо

1 Ответ

3 голосов
/ 08 октября 2011

Просто запустите это:

ALTER DATABASE [<dbname>] SET READ_COMMITTED_SNAPSHOT ON;

И перестаньте беспокоиться о блокировках отчетов, блокирующих отчеты. См. Выбор уровней изоляции на основе версий строк .

...