Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 WAITFOR DELAY между insert/update батчами - улучшает перформанс и разгружает сервер?  [new]
Ievgen Guest
Guest
Коллега утверждает, что интервалы между долгими инсертами или апдейтами помогут разгурзить сервер и улучшить перформанс. Буквально вот такой код:

WHILE (((dbo.fn_fd_IsUnprocessedFileExist( @pFeedId, @fileType)) = 1))
	BEGIN	
		EXEC dbo.proc_fd_SyncCoverageSalesRawWithStage @pFeedId, @countBatches, @fileType					
		WAITFOR DELAY @pDelay;
	END	
	
	SET @fileType = 13  -- Coverage Sales	Child
					
	WHILE (((dbo.fn_fd_IsUnprocessedFileExist( @pFeedId, @fileType)) = 1))
	BEGIN	
		EXEC dbo.proc_fd_SyncCoverageSalesChildRawWithStage @pFeedId, @countBatches, @fileType
		WAITFOR DELAY @pDelay;
	END		

	SET @fileType = 25  -- Division
						
	WHILE (((dbo.fn_fd_IsUnprocessedFileExist( @pFeedId, @fileType)) = 1))
	BEGIN	
		EXEC dbo.proc_fd_SyncDivisionRawWithStage @pFeedId, @countBatches, @fileType
		WAITFOR DELAY @pDelay;
	END		


Якобы что если такие вызовы будут работать паралелльно на больших объемах - то нужно разгружать сервер и пихать WAITFOR DELAY @pDelay или Thread.Sleep(...) на клиенте между батчами апдейтов.

Лично мне это кажется что это заблуждение. Может кто-нибудь меня поправит?)
7 янв 15, 14:42    [17091723]     Ответить | Цитировать Сообщить модератору
 Re: WAITFOR DELAY между insert/update батчами - улучшает перформанс и разгружает сервер?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31969
Ievgen Guest
Лично мне это кажется что это заблуждение
Мне тоже.

Таким образом можно дать быстрым оперативным запросам больше ресурсов, это да.
Да и то, если вышеописанный код не в одной транзакции - тогда нужно ещё следить, что бы залоченные объекты не понадобились бы кому то ещё.

Ну и сам код - обработка в циклах "по записям" в большинстве случаев медленее, чем обработка множествами, по многим причинам, и, в частности, потому, что позволяет движку базы обрабатывать данные параллельно.
7 янв 15, 14:53    [17091737]     Ответить | Цитировать Сообщить модератору
 Re: WAITFOR DELAY между insert/update батчами - улучшает перформанс и разгружает сервер?  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Ievgen Guest
Коллега утверждает, что интервалы между долгими инсертами или апдейтами помогут разгурзить сервер и улучшить перформанс.
Ну вот и попросите вашего коллегу обосновать это утверждение. Также поинтересуйтесь формулой для расчета значения интервала.
7 янв 15, 14:54    [17091741]     Ответить | Цитировать Сообщить модератору
 Re: WAITFOR DELAY между insert/update батчами - улучшает перформанс и разгружает сервер?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Ievgen Guest
Якобы что если такие вызовы будут работать паралелльно на больших объемах - то нужно разгружать сервер и пихать WAITFOR DELAY @pDelay или Thread.Sleep(...) на клиенте между батчами апдейтов.

если он под " улучшает перформанс" понимает, что между тяжелыми батчами блокирующими другие коннекты выполнится множество мелких батчей, которые не блокируют друг друга, то разумеется производительность системы улучшится. Но система != сервер.
А разделение писателей и читателей можно осуществить и другими способами
7 янв 15, 17:34    [17092039]     Ответить | Цитировать Сообщить модератору
 Re: WAITFOR DELAY между insert/update батчами - улучшает перформанс и разгружает сервер?  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
если у вас действительно нагруженный сервер с множеством коннекций к нему и множество запросов одновременно выполняющихся, то массовые операции вставки\ обновления лучше по небольшим частям через WAITFOR DELAY делать. Позволяет избежать большой очереди заблокированных запросов на залоченных ресурсах и фактически недоступности сервера для остальных соединений работающих с теми же таблицами. А если время отклика сервера значимо для бизнеса, то простой на время выполнения длительного запроса это уже аварийная ситуация. Так что некоторая истина в словах вашего коллеги безусловно есть.
12 янв 15, 14:26    [17106036]     Ответить | Цитировать Сообщить модератору
 Re: WAITFOR DELAY между insert/update батчами - улучшает перформанс и разгружает сервер?  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
Ievgen Guest,


Может вам про SQL 2014 и InMemory/native_compilation подумать. Там с параллельностью всё хорошо.
12 янв 15, 15:00    [17106284]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: WAITFOR DELAY между insert/update батчами - улучшает перформанс и разгружает сервер?  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8878
Дабы не плодить тем...
Хочу в job-е выполнять процедуру, которая будет удалять ненужный хлам - по одному файлу на удалённом хранилище. Этот процесс муторный и по времени НЕкритичный. Запускаться задание будет раз в час, удалять в рамках сессии порядка двух-трёх сотен файлов. Хочу немного "разгрузить сервер" - растянуть процесс удаления во времени. Удаление файлов будет по таблице,- либо курсором либо циклом (один хрен,- не критично). Если поставить WAITFOR DELAY '00:00:05.0' между итерациями, то реально ли эти 5 секунд уйдут на пользу остальных процессов - или там ставится идиотский бесконечный цикл с выходом по таймеру - я не знаю как реализована waitfor delay внутри скуля,- может кто интересовался.

Заранее спасибо!
12 май 16, 23:35    [19166974]     Ответить | Цитировать Сообщить модератору
 Re: WAITFOR DELAY между insert/update батчами - улучшает перформанс и разгружает сервер?  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
SIMPLicity_,

Нормально там вейтфор реализован. Цп освобождается.
А что вы за файлы склем удаляете?
13 май 16, 02:25    [19167171]     Ответить | Цитировать Сообщить модератору
 Re: WAITFOR DELAY между insert/update батчами - улучшает перформанс и разгружает сервер?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31969
SIMPLicity_
Хочу немного "разгрузить сервер" - растянуть процесс удаления во времени
Да без проблем файлы удаляются, сотню тысяч только так, и сиквел при этом не загружается никак. Ну и для ОС это нормальные операции, тоже ничего затыкаться не будет.
WAITFOR да, сделан нормально, отдаёт время Idle, проблем не будет.
13 май 16, 03:10    [19167182]     Ответить | Цитировать Сообщить модератору
 Re: WAITFOR DELAY между insert/update батчами - улучшает перформанс и разгружает сервер?  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8878
Спасибо,- понял.

P.S. Уже с четырёх утра трудится,- вроде полёт нормальный... Сколько-то там тысяч файлов уже удалено,- и работает, работает, работает...
13 май 16, 09:29    [19167445]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить