|
Узнать где тормозит в хранимой процедуре.
|
|||
---|---|---|---|
#18+
Доброго дня. Не бейте ногами, только начинаю администрировать SQL и не прошу готового решения, а только лишь направления. Есть в базе хранимая процедура, она довольно кустисто написана и в целом к ней вопросов нет, но иногда 1-4 раза в сутки она начинает выполняться 3-7 минут. Разработчики клянутся, что дело в сервере и процедура не должна столько в принципе выполняться. Я перфмоном проверил - в моменты "залипа" сервер совсем ничем не занят, дисковых очередей 0, проц занят на 2-5%%, в ЕвентЛоге - пустота.. т.е. с точки зрения ОС - вопросов нет. Я включил на базе Query Store и только один запрос из процедуры в топ10 на 3м месте, причём Duration едва ли 35% от топ1. Суть вопроса - как можно выцепить какой-либо автоматикой (ЕЕ, Профайлер) на чём конкретно эта процедура изредка "залипает"? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2020, 10:09 |
|
Узнать где тормозит в хранимой процедуре.
|
|||
---|---|---|---|
#18+
dartaen Я перфмоном проверил - в моменты "залипа" сервер совсем ничем не занят, дисковых очередей 0, проц занят на 2-5%%, в ЕвентЛоге - пустота.. т.е. с точки зрения ОС - вопросов нет. И ещё нужно посмотреть, какой стейтмент в процедуре в этот момент выполняется. Это можно сделать процедурой sp_whoisactive. Взять её можно отсюда: http://whoisactive.com/downloads/ И, соответственно, потом решать проблемы либо с блокировками, либо с планом запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2020, 11:28 |
|
Узнать где тормозит в хранимой процедуре.
|
|||
---|---|---|---|
#18+
dartaen, причин множество, некоторые приводят к формированию неоптимального плана запроса, некоторые технического характера, ожидание постановки блокировки, расширение файлов базы и журналов. Может подтормаживать при резервном копировании. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2020, 11:44 |
|
Узнать где тормозит в хранимой процедуре.
|
|||
---|---|---|---|
#18+
Где-нибудь в процедуре пояаился nested loop... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2020, 11:48 |
|
Узнать где тормозит в хранимой процедуре.
|
|||
---|---|---|---|
#18+
может помочь REcomplile но может и Повредить ибо будут затраты на рекомпиляцию каждый раз это такой совет опасный - можно попробовать на тестовом окружении если есть ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2020, 18:08 |
|
Узнать где тормозит в хранимой процедуре.
|
|||
---|---|---|---|
#18+
alexeyvg Нужно посмотреть, во время "залипа", какие блокировки на сервере, не держит ли кто нибудь процедуру. И ещё нужно посмотреть, какой стейтмент в процедуре в этот момент выполняется. Это можно сделать процедурой sp_whoisactive. Взять её можно отсюда: http://whoisactive.com/downloads/ И, соответственно, потом решать проблемы либо с блокировками, либо с планом запроса. Это я уже скачал и поставил. Проблема в том, что я не могу поймать. Плюс я пробовал тестить на других процедурах и запрос постоянно меняется - как узнать что оно именно на нём стоит? Ведь если я буду постоянно обновляьт чтобы понять - меняется запрос или нет, я не могу качественно и быстро на глаз определить что этот запрос уже какое-то время "задержался".. Владислав Колосов dartaen, причин множество, некоторые приводят к формированию неоптимального плана запроса, некоторые технического характера, ожидание постановки блокировки, расширение файлов базы и журналов. Может подтормаживать при резервном копировании. Я проверял, бэкап не делается в это время. Я понимаю что что-то идёт не так, вопрос в том, как попытаться найти в чём проблема.. Гулин Федор может помочь REcomplile но может и Повредить ибо будут затраты на рекомпиляцию каждый раз это такой совет опасный - можно попробовать на тестовом окружении если есть Предлагаете для всех запросов в процедуре (а их там пачечка) использовать эту опцию? Не очень разумное решение, как мне кажется, ведь потом это может аукнуться и даже не в одном запросе сразу.. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2020, 18:20 |
|
Узнать где тормозит в хранимой процедуре.
|
|||
---|---|---|---|
#18+
dartaen alexeyvg Это можно сделать процедурой sp_whoisactive. Взять её можно отсюда: http://whoisactive.com/downloads/ И, соответственно, потом решать проблемы либо с блокировками, либо с планом запроса. Это я уже скачал и поставил. Проблема в том, что я не могу поймать. Плюс я пробовал тестить на других процедурах и запрос постоянно меняется - как узнать что оно именно на нём стоит? Ведь если я буду постоянно обновляьт чтобы понять - меняется запрос или нет, я не могу качественно и быстро на глаз определить что этот запрос уже какое-то время "задержался".. Можно написать скриптик, который будет определять длительное время работы этой процедуры, и, если она "зависла", запускать sp_whoisactive с записью результатов в таблицу. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2020, 18:53 |
|
Узнать где тормозит в хранимой процедуре.
|
|||
---|---|---|---|
#18+
dartaen Я понимаю что что-то идёт не так, вопрос в том, как попытаться найти в чём проблема.. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2020, 18:54 |
|
Узнать где тормозит в хранимой процедуре.
|
|||
---|---|---|---|
#18+
alexeyvg dartaen пропущено... Это я уже скачал и поставил. Проблема в том, что я не могу поймать. Плюс я пробовал тестить на других процедурах и запрос постоянно меняется - как узнать что оно именно на нём стоит? Ведь если я буду постоянно обновляьт чтобы понять - меняется запрос или нет, я не могу качественно и быстро на глаз определить что этот запрос уже какое-то время "задержался".. А, я думал, это не проблема, раз вы писали, что что то делали во время "зависания" процедуры. Можно написать скриптик, который будет определять длительное время работы этой процедуры, и, если она "зависла", запускать sp_whoisactive с записью результатов в таблицу. Я не вручную это делал, перфмон настроил и он писал счётчики в журнал, я потом по журналу сверял данные по долгому исполнению процедуры с блокировками из SQL Blocks, там видно сколько была блокировка. (за этой процедурой выстраивается очередь) Со скриптиком идея хорошая, но боюсь я такое не осилю.. но попробую погуглить на эту тему, спасибо! alexeyvg dartaen Я понимаю что что-то идёт не так, вопрос в том, как попытаться найти в чём проблема.. Что значит "проанализировать трассу"? Там что-то можно сохранить помимо времени исполнения процедуры? Про параметры хз, вроде как нет. В совершенно рандомные моменты/параметры случается затык. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2020, 19:00 |
|
Узнать где тормозит в хранимой процедуре.
|
|||
---|---|---|---|
#18+
dartaen, В профайлере нужно настроить на сбор данных инструкций процедуры. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2020, 19:16 |
|
Узнать где тормозит в хранимой процедуре.
|
|||
---|---|---|---|
#18+
dartaen, Статистика выполнения пооператорно: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
По min_elapsed_time и max_elapsed_time можно будет вычислить кто периодически залипает. Само-собой если не залипает на какой-нибудь императивщине. ЗЫ: Планов выполнения процедуры может быть много. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2020, 21:00 |
|
Узнать где тормозит в хранимой процедуре.
|
|||
---|---|---|---|
#18+
invm dartaen, Статистика выполнения пооператорно: По min_elapsed_time и max_elapsed_time можно будет вычислить кто периодически залипает. Само-собой если не залипает на какой-нибудь императивщине. ЗЫ: Планов выполнения процедуры может быть много. Спасибо большое! А что за императивщина может быть? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 09:10 |
|
Узнать где тормозит в хранимой процедуре.
|
|||
---|---|---|---|
#18+
invm, интерсный запрос без ограничения на and ps.object_id = object_id('MyProcedure') у меня выдает XML datatype instance has too many levels of nested nodes. Maximum allowed depth is 128 levels. можно это побороть ? ps sql sever 2012 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2020, 15:18 |
|
|
start [/forum/topic.php?fid=46&fpage=71&tid=1686562]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
72ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 362ms |
total: | 527ms |
0 / 0 |