|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
Всем привет! В одной из сопровождаемых систем при разглядывании хранимых процедур и T-SQL-скриптов в джобах заметил интересную особенность: везде, где применяется while-цикл последним оператором, засунутым в тело цикла, является вызов WAITFOR DELAY '00:00:01'. Подскажите - это личная инициатива разработчика данного кода или реальная насущная необходимость? Если насущная необходимость - то чем она вызвана? Некоторые циклы гоняются по паре-тройке десятков тысяч раз за один вызов процедуры. И получается, что в процессе выполнения таких СП накапливается до часу холостых ожиданий... З.Ы. Я не Козлов и не Баранов. Я с MS SQL недавно, не судите строго... :) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2017, 15:27 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
НачинучкаВсем привет! В одной из сопровождаемых систем при разглядывании хранимых процедур и T-SQL-скриптов в джобах заметил интересную особенность: везде, где применяется while-цикл, последним оператором, засунутым в тело цикла, является вызов WAITFOR DELAY '00:00:01'. Подскажите - это личная инициатива разработчика данного кода или реальная насущная необходимость? Если насущная необходимость - то чем она вызвана? Некоторые циклы гоняются по паре-тройке десятков тысяч раз за один вызов процедуры. И получается, что в процессе выполнения таких СП накапливается до часу холостых ожиданий... З.Ы. Я не Козлов и не Баранов. Я с MS SQL недавно, не судите строго... :) Возможно, непонятно выразился... Хотел сказать следующее: есть много хранимок, T-SQL-джобов. в них часто используется цикл WHILE. В том числе и для реализации построчной обработки курсоров. последним оператором в WHILE-цикле всегда является вызов WAITFOR DELAY '00:00:01'. Вопрос: это так и надо или программист - параноик? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2017, 15:32 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
можете убрать waitfor в крайнем случае, поставить после завершения цикла while ... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2017, 16:01 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
Мы таким подходом иногда пользуемся как элементом балансировки, к примеру, в "бесконечных" джобах, чтобы в холостую часто слишком не гонять, а то кушает таки процессор. А ставить такое в курсоре... разве что, чтобы потом быстро можно было увеличить скорость обработки в несколько раз, убрав эту строку. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2017, 16:36 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
Начинучка, Нашла в одной из своих систем - WAITFOR DELAY '00:00:02' везде, где идет отправка смс. Зачем, не знаю, возможно, какая-то особенность сервиса рассылки. Вдруг у вас что-то аналогичное. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2017, 18:56 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
Eleanor, В моем случае чаще всего - либо чистка старых данных из таблиц, либо перенос данных из одной таблицы в другую. Везде сделано циклами через курсор, "пакетами" по 5-50 т. записей, и после каждой итерации цикла - завершающий WAITFOR... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2017, 19:23 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
Начинучка, Скорее всего разработчик думал, что обязательно нужно сделать waitfor между удалениями, чтобы другие запросы в эти интервалы имели возможность выполниться. Можно его удалить. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2017, 00:30 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
И вот, где разработчик мог такие идеи почерпнуть: deleting-1-millions-rows-in-sql-server Комментарий про то, что WAITFOR не нужен, он уже не прочитал. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2017, 00:34 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
НачинучкаEleanor, В моем случае чаще всего - либо чистка старых данных из таблиц, либо перенос данных из одной таблицы в другую. Везде сделано циклами через курсор, "пакетами" по 5-50 т. записей, и после каждой итерации цикла - завершающий WAITFOR... Тогда можно использовать такой вариант: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2017, 06:34 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
[quot Начинучка]НачинучкаВсем привет! в WHILE-цикле всегда является вызов WAITFOR DELAY '00:00:01'. Вопрос: это так и надо или программист - параноик? Может программист - весёлый любознательный, решил проверить обнаружат ли и когда ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2017, 11:33 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
EleanorНачинучка, Скорее всего разработчик думал, что обязательно нужно сделать waitfor между удалениями, чтобы другие запросы в эти интервалы имели возможность выполниться. Можно его удалить. У нас такие задержки разработчик вставил при удалении записей пакетами из большой "центральной" таблицы, которая связана с помощью декларативной ссылочной целостности on delete cascade c другими таблицами (не справочниками). При том, что таблица при удалении записей блокируется with tablock. Мотивировал именно такими соображениями - чтобы другие запросы, в т.ч. в другие таблицы - могли выполняться. Проверено, без этого НЕ работает. Возникают дэдлоки, другие запросы висят дольше, чем хотелось бы и т.д. Сервер 2008 (не R2) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2017, 15:04 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
iii2При том, что таблица при удалении записей блокируется with tablock. Мотивировал именно такими соображениями - чтобы другие запросы, в т.ч. в другие таблицы - могли выполняться. Проверено, без этого НЕ работает. Возникают дэдлоки, другие запросы висят дольше, чем хотелось бы и т.д.Ох уж эти сказочники... Само собой, сказку сочинить гораздо легче, чем поработать головой... А вообще гениально - при удалении принудительно блокировать таблицу, потом удивляться почему конкурирующие сеансы не могут работать и лечить это паузами между удалениями. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2017, 15:15 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
invmiii2При том, что таблица при удалении записей блокируется with tablock. Мотивировал именно такими соображениями - чтобы другие запросы, в т.ч. в другие таблицы - могли выполняться. Проверено, без этого НЕ работает. Возникают дэдлоки, другие запросы висят дольше, чем хотелось бы и т.д.Ох уж эти сказочники... Само собой, сказку сочинить гораздо легче, чем поработать головой... А вообще гениально - при удалении принудительно блокировать таблицу, потом удивляться почему конкурирующие сеансы не могут работать и лечить это паузами между удалениями. Я подозреваю, что разработчик не разобрался с блокировками + каскадное удаление вносит свою лепту. В принципе, нас не беспокоит, т.к. это сборщик мусора, который удаляет помеченные записи по окончании опердня. Но факт остается фактом - без этого не работает. Впрочем, это меньшее, за что разработчику хочется натянуть его трусы на голову. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2017, 15:50 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
invmА вообще гениально - при удалении принудительно блокировать таблицу, потом удивляться почему конкурирующие сеансы не могут работать и лечить это паузами между удалениями. Опять же подозреваю, что tablock был вставлен чтобы побороть дедлоки. Это не моя система, не знаю всех подробностей. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2017, 15:54 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
iii2, У вас WAITFOR в одном месте, а у ТС это массово. Скорее всего там и пробемы никакой не было, а разработчик думал, что так принято. Кстати, вижу советы использовать WAITFOR и в приличных источниках: 1) Чистка таблицы в Dynamics CRM Код: sql 1. 2. 3. 4. 5. 6.
2) Gradually Deleting Data in SQL Server - But I also don´t get the reason for the WAITFOR. Is it really necessary? - The WAITFOR just gives the system a slight break in between deleting batches of rows. It helps have less effect on concurrency. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2017, 16:17 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
я пишу WAITFOR DELAY в основном только в сервисных(разовых) скриптах, когда необходимо сделать массовую блочную операцию на объекте, из соображений освобождения ресурсов и уменшения конкуренции. Ну и кроме всего сервер делает массу операций кроме пользовательских, тот же сборщик удалённых записей, автообновление статистики... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2017, 16:36 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
Этот лайфхак принудительно заставляет текущий поток прерваться и дать квант времени работы другим потокам в очереди. Ровно за тем же в виндовых многопоточных приложениях в тяжелом потоке делают sleep(0). Правда, для этого не нужно делать паузу в секунду, а достаточно 30 миллисекунд (минимальная единица времени в типе датеtime). Ну и утилизация CPU в таком цикле с прерыванием существенно снижается - проверено практикой. Другим параллельным запросам легче проработать. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2017, 16:15 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
ziktuwЭтот лайфхак принудительно заставляет текущий поток прерваться и дать квант времени работы другим потокам в очереди. Ровно за тем же в виндовых многопоточных приложениях в тяжелом потоке делают sleep(0). Правда, для этого не нужно делать паузу в секунду, а достаточно 30 миллисекунд (минимальная единица времени в типе датеtime). Ну и утилизация CPU в таком цикле с прерыванием существенно снижается - проверено практикой. Другим параллельным запросам легче проработать.В MSSQL реализована невытесняющая многозадачность, и с управлением своими потоками в большинстве случаев он справляется сам, при этом квант выделяемого потокам времени равен 4мс, что меньше виндового. Так что версия не в кассу. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2017, 16:27 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
Гавриленко Сергей АлексеевичziktuwЭтот лайфхак принудительно заставляет текущий поток прерваться и дать квант времени работы другим потокам в очереди. Ровно за тем же в виндовых многопоточных приложениях в тяжелом потоке делают sleep(0). Правда, для этого не нужно делать паузу в секунду, а достаточно 30 миллисекунд (минимальная единица времени в типе датеtime). Ну и утилизация CPU в таком цикле с прерыванием существенно снижается - проверено практикой. Другим параллельным запросам легче проработать.В MSSQL реализована невытесняющая многозадачность, и с управлением своими потоками в большинстве случаев он справляется сам, при этом квант выделяемого потокам времени равен 4мс, что меньше виндового. Так что версия не в кассу. а тут нет противоречия. если разработчик считает, что его поток не особо важен, он вполне может поставить waitfor, чтобы повысить скорость других потоков ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2017, 17:28 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
dies iraeа тут нет противоречия. если разработчик считает, что его поток не особо важен, он вполне может поставить waitfor, чтобы повысить скорость других потоковСначала делать cpu-consuming обработки на курсорах (лол), а потом балансировать это через waitfor (лол2)? Серьезно? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2017, 19:21 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
Гавриленко Сергей Алексеевичdies iraeа тут нет противоречия. если разработчик считает, что его поток не особо важен, он вполне может поставить waitfor, чтобы повысить скорость других потоковСначала делать cpu-consuming обработки на курсорах (лол), а потом балансировать это через waitfor (лол2)? Серьезно? вот иногда завидую людям, которые просто на ровном месте могут взять и посмеяться. Слегка неловко за них становится, ну да ладно ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2017, 14:28 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
При массовых загрузках/расчетах или индекс прибить на продакшне, а так - непонятно зачем. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2017, 14:32 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
dies iraeГавриленко Сергей Алексеевичпропущено... Сначала делать cpu-consuming обработки на курсорах (лол), а потом балансировать это через waitfor (лол2)? Серьезно? вот иногда завидую людям, которые просто на ровном месте могут взять и посмеяться. Слегка неловко за них становится, ну да ладноВы просто не понимаете абсурдность описанной ситуации (если говорить про MSSQL). ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2017, 15:14 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
Гавриленко Сергей Алексеевичdies iraeпропущено... вот иногда завидую людям, которые просто на ровном месте могут взять и посмеяться. Слегка неловко за них становится, ну да ладноВы просто не понимаете абсурдность описанной ситуации (если говорить про MSSQL). Нет, это вы не понимаете. Поменьше высокомерия, шире кругозор, и не стоит делать выводов о ситуации не видя полной картины или хотя-бы одного куска кода. давно замечаю, что этому форуму не хватает презумпции компетентности. во всех начальных постах определённо делается вывод "КГ/АМ", хотя задачи бывают разные, базы разные, и подходы также могут встречаться абсолютно разные. Мир субд гораздо шире, чем вы себе представляете. И курсоры вполне имеют право на жизнь. Другое дело, что их часто лепят куда ни попадя, но в данном случае оснований для данного вывода НЕТ ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2017, 16:29 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
dies iraeГавриленко Сергей Алексеевичпропущено... Вы просто не понимаете абсурдность описанной ситуации (если говорить про MSSQL). Нет, это вы не понимаете. Поменьше высокомерия, шире кругозор, и не стоит делать выводов о ситуации ...Я уже большой мальчик и как-нибудь сам разберусь, что мне надо делать, а что нет. dies iraeи не стоит делать выводов о ситуации не видя полной картины или хотя-бы одного куска кода.Здесь вы в 90% случаев никогда не увидите ситуацию полность. А иногда и кода тоже не увидите. А выводы делать надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2017, 16:33 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
Гавриленко Сергей АлексеевичЗдесь вы в 90% случаев никогда не увидите ситуацию полность. А иногда и кода тоже не увидите. А выводы делать надо. не надо. достаточно просто ответить на вопрос и не придумывать лишнего. т.е. по умолчанию считать автора (или других разработчиков, как в данном посте) компетентным, пока не доказано обратное. Таким простым принципом можно достичь хоть какого-то подобия дружелюбия сообщества ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2017, 17:16 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
dies iraeГавриленко Сергей АлексеевичЗдесь вы в 90% случаев никогда не увидите ситуацию полность. А иногда и кода тоже не увидите. А выводы делать надо. не надо. достаточно просто ответить на вопрос и не придумывать лишнего. т.е. по умолчанию считать автора (или других разработчиков, как в данном посте) компетентным, пока не доказано обратное. Таким простым принципом можно достичь хоть какого-то подобия дружелюбия сообщества пуська, ты чего? все по дефолту записаны в бригаду Козловых ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2017, 17:21 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
dies iraeне надо. достаточно просто ответить на вопрос и не придумывать лишнего. т.е. по умолчанию считать автора (или других разработчиков, как в данном посте) компетентным, пока не доказано обратное. Таким простым принципом можно достичь хоть какого-то подобия дружелюбия сообществаОтвечайте как вам угодно. А когда навязываете свое видение мира окружающим, будьте готовы, что им это может не понравится. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2017, 17:44 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
Модератор: Для всех: этот раздел предназначен для обсуждения MSSQL, а не форума, так что дальнейшее развитие этой темы здесь я сочту за оффтпик и удалю. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2017, 17:44 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
ziktuwНу и утилизация CPU в таком цикле с прерыванием существенно снижается - проверено практикой . Другим параллельным запросам легче проработать. Репро можете предоставить где показан описанный Вами "лайфхак"? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2017, 19:17 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
Возобновлю тему. Вопрос скорее по внутреннему устройству SQL Server: Если запускаю хранимую процедуру, в которой в курсоре выполняется запрос на linked-сервере , то вставка waitfor delay в конце каждой итерации цикла влияет как-то на выполнение или нет? Блокировки есть, но они накладываются и снимаются внутри каждого выполняемого на linked-сервере запроса. Интересует вопрос в разрезе транзакций, блокировок таблиц и т.п. У меня складывается впечатление, что MS SQL engine понимает наличие waitfor delay (ещё при построении плана?) и каким-то образом меняет своё поведение. В плане распределённых транзакций, блокировок, (?). PS К вопросу об waitfor delay при отправке SMS и при сходных ситуациях: у меня был случай когда в курсоре запускалась xp_cmdshell и на маленьких циклах (1 - 3 итеррации) всё было благополучно. Время отработки единичной итерации - менее 1 секунды (вызов простенькой программы на C# с параметрами; программа формировала и отправляла на сервис JSON, кидала служебную инфу в базу) . Когда курсор выполнялся по 10-20-....-50 раз, то MS Windows Server впадал в ступор. Процедура выполнялась до часу (!). Вставка waitfor delay '00:00:03' решила проблему. Так проект работает полностью автоматически уже год (ну, чуть больше). Это автоматическая обработка заказов с одного из маркетплейсов. Меньшее время задержки waitfor delay (1 или 2 сек.) лишь частично снимало проблему, идеально было 6 секунд ожидания, но 50раз*6секунд было многовато, - опытным путём подобрано примерно 4 сек. на цикл: задержка на 3 секунды в конце каждой итерации + 1 секунда ещё на что-то = итого 4 сек. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2020, 02:03 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
Waitfor delay '00:00:03' -- это известное в узких кругах заклинание, его надо вставлять везде, чтобы работало быстрее. Особенно в циклах. Желательно, в очень вложенных циклах. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2020, 02:51 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
Гавриленко Сергей Алексеевич Waitfor delay '00:00:03' -- это известное в узких кругах заклинание, его надо вставлять везде, чтобы работало быстрее. Особенно в циклах. Желательно, в очень вложенных циклах. И? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2020, 03:26 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
SIMPLicity_, Если вы откроете транзакцию и запустите waitfor, то очевидно, что блокировки зависнуть и съеденные ресурсы будут висеть занятыми. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2020, 09:17 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
SIMPLicity_ ремя отработки единичной итерации - менее 1 секунды Имеется в виду получение кода возврата от ОС или реальное завершение всех потоков вызванного процесса и освобождение всех ресурсов? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2020, 09:18 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
Мой знакомый как-то удивился, увидев в индусском SQL-коде удаление в цикле построчно. Не помню, был там сабж или нет. Я ему объяснил, что так, по мнению автора, снижается блокировка важной таблицы. :) Примерно то же самое и в сабже: для снижения нагрузки и блокировок. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2020, 09:24 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
SIMPLicity_ У меня складывается впечатление, что MS SQL engine понимает наличие waitfor delay (ещё при построении плана?) и каким-то образом меняет своё поведение. В плане распределённых транзакций, блокировок, (?). SIMPLicity_ Процедура выполнялась до часу (!). Вставка waitfor delay '00:00:03' решила проблему. Т.е. это проблема системы, в которой при увеличении нагрузки резко падает нагрузочная способность. Вставка паузы - простое и быстрое решение проблемы, но при увеличении нагрузки мешать будут уже другие процессы, так что лучше попытаться разобраться именно с этой проблемой. a_voronin Если вы откроете транзакцию и запустите waitfor, то очевидно, что блокировки зависнуть и съеденные ресурсы будут висеть занятыми. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2020, 10:42 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
[quot alexeyvg#22151418] SIMPLicity_ a_voronin Если вы откроете транзакцию и запустите waitfor, то очевидно, что блокировки зависнуть и съеденные ресурсы будут висеть занятыми. Что значит "вне транзакции"? То есть если сделать в одной транзакции Код: sql 1. 2. 3. 4. 5. 6. 7.
А в другой во время паузы Код: sql 1. 2. 3.
, то будет что? Ожидание или незамедлительное обновление сроки? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2020, 11:12 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
a_voronin, конечно ожидание, первая сессия как ужерживала U-блокировку так и будет удерживать до конца транзакции. все что происходит между моментом получения блокировки и до commit/rollback не важно, там может быть и waitfor и бесконечный цикл и какой нибудь out-process task. имхо единственное оправданное решение использования waitfor в циклах: это попытка сокращения потребления CPU на шаг итерации при реализации некоторой степени обработки асинхронного процесса. к примеру встречал системы которые продолжают какой либо шаг бизнес логики при появлении некоего семафора (значения в таблице или налии строки) аля Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2020, 12:13 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
Начинучка, надо смотреть на контекст выполнения процедур. Например, это проверка каких-либо данных по расписанию. чтобы не делать джоб, который стартует каждые 2 секунды и забивает журнал выполнения. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2020, 12:31 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
env SIMPLicity_ ремя отработки единичной итерации - менее 1 секунды Имеется в виду получение кода возврата от ОС или реальное завершение всех потоков вызванного процесса и освобождение всех ресурсов? Похоже, что Win Server не торопился что-то завершать и вызовы xp_cmdshell со стороны MSSQL порождали кучу потоков. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2020, 13:03 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
a_voronin SIMPLicity_, Если вы откроете транзакцию и запустите waitfor, то очевидно, что блокировки зависнуть и съеденные ресурсы будут висеть занятыми. Транзакции внутри запросов на linked-сервер открывались и закрывались ВНУТРИ одного блока. waitfor delay оказывался МЕЖДУ блоками. Тут проблем ни когда не было... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2020, 13:05 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
[quot a_voronin#22151444] alexeyvg пропущено... Что значит "вне транзакции"? То есть если сделать в одной транзакции Код: sql 1. 2. 3. 4. 5. 6. 7.
А в другой во время паузы Код: sql 1. 2. 3.
, то будет что? Ожидание или незамедлительное обновление сроки? a_voronin Что значит "вне транзакции"? Что-то типа этого: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2020, 13:24 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
L_argo Мой знакомый как-то удивился, увидев в индусском SQL-коде удаление в цикле построчно. Не помню, был там сабж или нет. Я ему объяснил, что так, по мнению автора, снижается блокировка важной таблицы. :) Примерно то же самое и в сабже: для снижения нагрузки и блокировок. Есть такая фигня и у меня - удаляю блоками примерно по 100 штук в течении нескольких часов с паузами в 10 сек. Если запустить просто удаление, то таблица блокируется и клиентский софт начинает отваливаться по тайм-ауту. Есличо,- таблица не моя, софт не мой, я так - "убраться позвали" ;) ... График использования таблицы - уже 24 х 7 ,- и как всегда,- стал таким неожиданно(!)... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2020, 13:37 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
На пути превращения юзера Начинучка в Кончучка - вот еще кандидат на дискуссию "sp_getapplock" Тоже что-то перпендикулярное ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2020, 15:48 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
a_voronin Что значит "вне транзакции"? То есть если сделать в одной транзакции Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2020, 19:26 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
felix_ff a_voronin, Код: sql 1. 2. 3. 4. 5. 6.
Объясните популярно. Мне надо выставить флаг . Допустим добавить запись с ключом Код: sql 1.
Потом 10 секунд проверять изменение ключа другой процедурой(процессом) . Если он изменен, то выйти сразу, если нет - то обязательно через 10 секунд. Попробовал изменить в другом скрипте - все равно ждет 10 секунд ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 15:47 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
philips, запомните время начала цикла и сравнивайте разницу с текущим временем при каждой итерации. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 17:56 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
может я неправильно объяснил , но я решил эту проблему просто Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
В другом скрипте Код: sql 1.
и он выходит. Задача тестовая. Главное что теперь я могу повесить на сторонний драйвер проверку флага и решить вопрос только скриптами T-SQL ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 08:32 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
для такой задачи наверное более подойдет сервис-брокер. можно добиться точной задержки в 10 сек и без лишних вычислений. краткое описание ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 09:34 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
Я не большой спец по SQL. Это перспективная одноразовая задача. Просто надо что сервер 20 (или другое) с. проверял флаг, если он не снят - Закончить цикл в любом случае. Это алкотестер на проходной, какие придурки прицепили свой контроллер, программу и т.д. которые постоянно конфликтуют с существующим. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 10:02 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
philips, на самом деле вы не можете знать - сколько времени будет выполняться запрос, поэтому, в общем случае, ваше решение некорректно. Вы получите 1 секунда + запрос, это легко может выйти за пределы 10 секунд. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 13:39 |
|
WAITFOR DELAY в while-циклах - требование стандарта или "бзик" программиста?
|
|||
---|---|---|---|
#18+
philips, авторПросто надо что сервер 20 (или другое) с. проверял флаг, если он не снят - Закончить цикл в любом случае. Ну тогда моё замечание не существенно. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 13:57 |
|
|
start [/forum/topic.php?all=1&fid=46&tid=1684441]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
88ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 186ms |
0 / 0 |