Я пытаюсь выяснить, производительность или внутреннюю реализацию WAITFOR в T-SQL, которые прошли через MSDN и Stackoverflow и другие сайты без удачи, вот мой вопросКакое влияние WAITFOR на другие процессы и транзакции?
Для ниже коды, я хочу, чтобы удалить верхние 10000 строки из таблицы DUMMY
. Я хочу, чтобы это задание удаления имело наименьшее влияние на производительность других рабочих мест базы данных и отдавало приоритет другим (если они есть). Поэтому я делаю это, чтобы удалить 100 строк за раз и сделать это 100 раз со временем сна в двух соседних удаленных.
Вопрос:
В
WAITFOR
время блокировки, будет эта транзакция потребляет процессор или просто простаивает, ожидая поднятый некоторое событие на 1 секунду позже?В течение 1 секунды, если есть другие транзакции, пытающиеся сделать
INSERT/UPDATE
на столеDUMMY
, кто получает приоритет?
Благодарим Вас за помощь или какие-либо идеи для этого
declare @cnt int
set @cnt = 0
while @cnt < 100
begin
delete top 100 from DUMMYTABLE where FOO = 'BAR'
set @cnt = @cnt + 1
waitfor delay '00:00:01'
end
Для пункта 2 это зависит от того, показываете ли вы нам весь код - если код работает внутри транзакции, что меняет все –
@Damien_The_Unbeliever спасибо за указание, это не в BEGIN TRAN ... Блок COMMIT, только tsql, завернутый в perl. –
Если вы действительно хотите минимизировать воздействие, убедитесь, что есть указатель на FOO –