2013-11-15 7 views
1

Скажем, у меня есть одна инструкция insert, где значения взяты из инструкции select из другой таблицы. Поэтому многие записи вставляются сразу. У меня есть другой процесс, который просто нужно вставить одну запись. Как я могу заставить SQL Server разрешить выполнение одного оператора вставки более своевременно? По моим наблюдениям, один из них блокируется в течение некоторого времени, пока выполняется множественная вставка. Было бы хорошо, если бы сингл мог «проскользнуть». Я попытался добавить WITH (ROWLOCK) на вставках.Множественная вставка Statement blocking small one

+0

Можете ли вы контролировать время этих двух процессов, чтобы запустить их в правильном порядке? В противном случае было бы лучше, если бы все было так, как есть. – Szymon

+0

доля код – SK2185

+0

Код только что-то вроде INSERT INTO TABLE A SELECT * FROM TABLE B и второй процесс делает что-то вроде INSERT INTO TABLE ЗНАЧЕНИЯ А (val1, vale2) т.д. Одиночная вставка блокируется табличной вставкой. – BrianK

ответ

1

Возможно, что массовая вставка возрастает до столовых замков. Вы можете потенциально уменьшить блокировки таблиц, изменив таблицу DDL на LOCK_ESCALATION=DISABLE, хотя это может привести к ухудшению производительности объемной вставки.

Альтернативой является переписывание навалом INSERT/SELECT INTO для внесения в пакеты таким образом, чтобы он никогда не превышал 5000 locks at a time.. Это, однако, изменит объем каждой единицы работы, так как вы теперь будете совершать после каждой небольшой партии, что может быть нежелательно.

+1

Я закончил разбивание на партии. Это единственный способ, которым другие процессы могли своевременно вставлять записи. – BrianK

Смежные вопросы