|
Скачет время выполнения
|
|||
---|---|---|---|
#18+
Коллеги, сегодня появилась странная проблема со стабильным процессом. Проца, которая в цикле обрабатывает пачку записей из одной таблицы(внури на каждую запись вызывается другая проца). Автор процы не я. Работает стабильно уже более года. Время выполнения то почти мгновенно, то зависает с типом ожидания SOS_SCHEDULER_YIELD на куске кода, в котором вроде бы ничего необычного. При этом пока не срубить процесс, так и будет висеть. Хотя после сброса может опять же выполниться мгновенно. Проблемный кусок кода, на котором висит ожидание SOS_SCHEDULER_YIELD: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
CALL_LEGS - большая таблица. На всякий обновил статистику. #Transfers - времянка. Записей там от 1 до 4 может быть. Код процы изучил по шагам, никакого куска кода, который внезапно стал работать дольше, не заметил. Но на всякий по большинству таблиц обновил статистику. Я в курсе, что SOS_SCHEDULER_YIELD - это означает ожидание процессорного времени. Сервер БД на виртуалке. Со слов админа на виртуалке повышенного потребления ЦПУ не наблюдается. Сама вирт. машина с MS SQL тоже не кушает сильно много. Вопрос: тип ожидания SOS_SCHEDULER_YIELD - это всегда только ожидание процессорного времени? У меня закончились идеи, что еще посмотреть и куда копать, тем более проблема плавающая? Буду рад любым идеям. --- Проходя мимо разложенных граблей, ты теряешь драгоценный опыт. (с) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2021, 20:51 |
|
Скачет время выполнения
|
|||
---|---|---|---|
#18+
Megabyte, Я бы предположил что:
... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2021, 20:55 |
|
Скачет время выполнения
|
|||
---|---|---|---|
#18+
flexgen Megabyte, Я бы предположил что:
Кол-во данных если бы влияло, то запрос тормозил всегда, а тут иногда. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2021, 21:03 |
|
Скачет время выполнения
|
|||
---|---|---|---|
#18+
Megabyte flexgen Megabyte, Я бы предположил что:
Кол-во данных если бы влияло, то запрос тормозил всегда, а тут иногда. Наличие ожидания SOS_SCHEDULER_YIELD говорит о проблемах с CPU авторThe SQL Server SOS_SCHEDULER_YIELD is a fairly common wait type and it could indicate one of two things: SQL Server CPU scheduler is utilized properly and is working efficiently There is a pressure on CPU Вот здесь довольно подробно описано это ожидание. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2021, 21:11 |
|
Скачет время выполнения
|
|||
---|---|---|---|
#18+
flexgen Megabyte пропущено... Все это есть: за индексами слежу, статистика по большим таблицам обновляется. Да и при появлении проблемы прошелся и руками обновил по всем участвующим таблицам, о чем написал в посте выше. Кол-во данных если бы влияло, то запрос тормозил всегда, а тут иногда. Наличие ожидания SOS_SCHEDULER_YIELD говорит о проблемах с CPU авторThe SQL Server SOS_SCHEDULER_YIELD is a fairly common wait type and it could indicate one of two things: SQL Server CPU scheduler is utilized properly and is working efficiently There is a pressure on CPU Вот здесь довольно подробно описано это ожидание. Эх, да справку я смотрел не раз. :) Но я вот только что разобрался. Первый раз такое на моей практике) Хотя эта статья навела на верную мысль. авторКогда поток, жертвует себя другому потоку, это создаёт данный вид ожиданий. У меня установлено ограничение на max кол-во потоков через формулу, найденную где-то в гугле. С 14.08 в sysprocesses обнаружил кучу незавершенных процессов от одного сервиса(в статусеs leeping). По ходу уперся как-то в лимит потоков\процессов. Прибил эти процессы, все стало выполняться быстро. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2021, 21:26 |
|
Скачет время выполнения
|
|||
---|---|---|---|
#18+
Megabyte flexgen пропущено... Наличие ожидания SOS_SCHEDULER_YIELD говорит о проблемах с CPU пропущено... Вот здесь довольно подробно описано это ожидание. Эх, да справку я смотрел не раз. :) Но я вот только что разобрался. Первый раз такое на моей практике) Хотя эта статья навела на верную мысль. авторКогда поток, жертвует себя другому потоку, это создаёт данный вид ожиданий. У меня установлено ограничение на max кол-во потоков через формулу, найденную где-то в гугле. С 14.08 в sysprocesses обнаружил кучу незавершенных процессов от одного сервиса(в статусеs leeping). По ходу уперся как-то в лимит потоков\процессов. Прибил эти процессы, все стало выполняться быстро. Поторопился с выводами. Несколько минут все было нормально и снова проблемы... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2021, 21:30 |
|
Скачет время выполнения
|
|||
---|---|---|---|
#18+
Megabyte, ищите, кто процессор отбирает, если это виртуалка, то ваши дела плохи, не найдёте виновных ;-) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2021, 22:30 |
|
Скачет время выполнения
|
|||
---|---|---|---|
#18+
Владислав Колосов Megabyte, ищите, кто процессор отбирает, если это виртуалка, то ваши дела плохи, не найдёте виновных ;-) Да я грешил на это. Договорились ребутнуть ночью службу MS SQL. Посмотрим, что как. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2021, 22:42 |
|
Скачет время выполнения
|
|||
---|---|---|---|
#18+
Megabyte Коллеги, сегодня появилась странная проблема со стабильным процессом. Проца, которая в цикле обрабатывает пачку записей из одной таблицы(внури на каждую запись вызывается другая проца). Автор процы не я. Работает стабильно уже более года. Время выполнения то почти мгновенно, то зависает с типом ожидания SOS_SCHEDULER_YIELD на куске кода, в котором вроде бы ничего необычного. При этом пока не срубить процесс, так и будет висеть. Хотя после сброса может опять же выполниться мгновенно. Проблемный кусок кода, на котором висит ожидание SOS_SCHEDULER_YIELD: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
CALL_LEGS - большая таблица. На всякий обновил статистику. #Transfers - времянка. Записей там от 1 до 4 может быть. Код процы изучил по шагам, никакого куска кода, который внезапно стал работать дольше, не заметил. Но на всякий по большинству таблиц обновил статистику. Я в курсе, что SOS_SCHEDULER_YIELD - это означает ожидание процессорного времени. Сервер БД на виртуалке. Со слов админа на виртуалке повышенного потребления ЦПУ не наблюдается. Сама вирт. машина с MS SQL тоже не кушает сильно много. Вопрос: тип ожидания SOS_SCHEDULER_YIELD - это всегда только ожидание процессорного времени? У меня закончились идеи, что еще посмотреть и куда копать, тем более проблема плавающая? Буду рад любым идеям. --- Проходя мимо разложенных граблей, ты теряешь драгоценный опыт. (с) Копать в сторону бездарно написанного запроса. "CALL_LEGS - большая таблица.", а у вас, как минимум, один лишний join. Если оптимизатор ошибется с планом - отгребаете то, что отгребаете. ЗЫ. Запросы вставки в @table_VAR не параллелятся - поэтому внешне CPU не кушается. Нагружен только один поток под завязку. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2021, 05:52 |
|
Скачет время выполнения
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2021, 06:38 |
|
Скачет время выполнения
|
|||
---|---|---|---|
#18+
aleks222 Копать в сторону бездарно написанного запроса. "CALL_LEGS - большая таблица.", а у вас, как минимум, один лишний join. Если оптимизатор ошибется с планом - отгребаете то, что отгребаете. ЗЫ. Запросы вставки в @table_VAR не параллелятся - поэтому внешне CPU не кушается. Нагружен только один поток под завязку. Код: sql 1. 2. 3. 4. 5.
Этот подзапрос работает, само собой, по индексу у dbo.CALL_LEGS(индекс по SESSION_ID, LEG_ID в include). ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2021, 09:14 |
|
Скачет время выполнения
|
|||
---|---|---|---|
#18+
Megabyte aleks222 Копать в сторону бездарно написанного запроса. "CALL_LEGS - большая таблица.", а у вас, как минимум, один лишний join. Если оптимизатор ошибется с планом - отгребаете то, что отгребаете. ЗЫ. Запросы вставки в @table_VAR не параллелятся - поэтому внешне CPU не кушается. Нагружен только один поток под завязку. Код: sql 1. 2. 3. 4. 5.
Этот подзапрос работает, само собой, по индексу у dbo.CALL_LEGS(индекс по SESSION_ID, LEG_ID в include). Ты могешь продолжать верить в чудеса. Только это контрпродуктивно. ЗЫ. Если можно не писать соединение в запросе - его надо не писать. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2021, 09:20 |
|
Скачет время выполнения
|
|||
---|---|---|---|
#18+
aleks222 Megabyte пропущено... Код: sql 1. 2. 3. 4. 5.
Этот подзапрос работает, само собой, по индексу у dbo.CALL_LEGS(индекс по SESSION_ID, LEG_ID в include). Ты могешь продолжать верить в чудеса. Только это контрпродуктивно. ЗЫ. Если можно не писать соединение в запросе - его надо не писать. Я переписал по-своему запрос, заменил табличное представление на временную таблицу. Теперь при зависании указывает на другой кусок запроса. Спасибо, конечно, за идею с запросом. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2021, 09:38 |
|
Скачет время выполнения
|
|||
---|---|---|---|
#18+
В общем, все стало нормально после переписывания куска запроса. Один раз только уже запущенный процесс якобы подвис на другом коде. Сбросил и уже 1.5 все работает штатно. По ходу все же таки с планом подзапроса были проблемы. Всем спасибо за подсказки. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2021, 10:56 |
|
|
start [/forum/topic.php?fid=46&msg=40094609&tid=1684348]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
125ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 286ms |
total: | 497ms |
0 / 0 |