|
update. простой. медленно работает
|
|||
---|---|---|---|
#18+
Всем привет простой update выполняется в процедуре, которая запускается из очереди сервис брокера. Процедура работает почти постоянно от 3 до 20 секунд. Периодически этот простой update выполняется очень медленно Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Когда все плохо план не радует, прикрепил снимком. На текущий момент добавил полное обновление статистики временной таблицы перед апдейтом с FULLSCAN, ALL. Стало получше, но всеравно плохо - 10к записей - update 20-40 секунд. Microsoft SQL Server 2016 (SP2-CU12) (KB4536648) - 13.0.5698.0 (X64) Возможно есть мысли? Всю голову сломал уже. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2020, 16:25 |
|
update. простой. медленно работает
|
|||
---|---|---|---|
#18+
Shut-Up, Покажите актуальный план запроса в формате .sqlplan И у вас изменение строк во временной таблице источником данных является она же? или какая то другая таблица? интересует именно что у вас написано во Код: sql 1. 2. 3.
и не плохо бы показать предикаты соединения/фильтрации ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2020, 17:06 |
|
update. простой. медленно работает
|
|||
---|---|---|---|
#18+
felix_ff, привет update выглядит именно так, как в исходном письме без инструкции FROM. У меня есть план в plan explorer данного запроса. прикладываю. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2020, 17:19 |
|
update. простой. медленно работает
|
|||
---|---|---|---|
#18+
felix_ff, таблица, в обезличенном виде, имеет следующее объявление Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2020, 17:25 |
|
update. простой. медленно работает
|
|||
---|---|---|---|
#18+
Shut-Up, добавьте проверку и будет вам счастье Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2020, 17:27 |
|
update. простой. медленно работает
|
|||
---|---|---|---|
#18+
a_voronin, привет попробую ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2020, 17:29 |
|
update. простой. медленно работает
|
|||
---|---|---|---|
#18+
Shut-Up felix_ff, таблица, в обезличенном виде, имеет следующее объявление Код: sql 1.
о-о!!! вы знаете толк в извращениях способах сделать обновление максимально медленным. Слово Columnstore вам знакомо? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2020, 17:29 |
|
update. простой. медленно работает
|
|||
---|---|---|---|
#18+
a_voronin Слово Columnstore вам знакомо? опять вы про колумнсторе в update? забудьте это слово от вас оно уже звучит как ругательство как размер ключа кластерного индекс влияет на скорость апдейта? В плане все равно скан и ни одно из полей входящих в ключ не апдейтится. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2020, 17:37 |
|
update. простой. медленно работает
|
|||
---|---|---|---|
#18+
msLex a_voronin Слово Columnstore вам знакомо? опять вы про колумнсторе в update? забудьте это слово от вас оно уже звучит как ругательство Не могу забыть, я на вертике работаю, а там не-колумнсторов нет. А с переходом в облака и в mssql не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2020, 17:42 |
|
update. простой. медленно работает
|
|||
---|---|---|---|
#18+
a_voronin msLex пропущено... опять вы про колумнсторе в update? забудьте это слово от вас оно уже звучит как ругательство Не могу забыть, я на вертике работаю, а там не-колумнсторов нет. А с переходом в облака и в mssql не будет. Вертика - не универсальная СУБД, она другие не заменит, даже одну из тысячи, она для очень узкой, специальной области применения. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2020, 19:03 |
|
update. простой. медленно работает
|
|||
---|---|---|---|
#18+
a_voronin Не могу забыть, я на вертике работаю, а там не-колумнсторов нет. А с переходом в облака и в mssql не будет. в облаках mssql колумнсторы тоже есть ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2020, 20:50 |
|
update. простой. медленно работает
|
|||
---|---|---|---|
#18+
komrad a_voronin Не могу забыть, я на вертике работаю, а там не-колумнсторов нет. А с переходом в облака и в mssql не будет. в облаках mssql колумнсторы тоже есть Поиска не будет, будет только сканирование колумнсторов. Это, в смысле, не заявление MS, это прогноз a_voronin :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2020, 21:03 |
|
update. простой. медленно работает
|
|||
---|---|---|---|
#18+
Shut-Up felix_ff, привет update выглядит именно так, как в исходном письме без инструкции FROM. У меня есть план в plan explorer данного запроса. прикладываю. сорри, просмотрел что у вас update на ";" заканчивается, беглым глазом подумал что продолжение Вам влом писать было. Имхо в таком случае у ТС мало шансов что либо подкрутить что бы было быстрее, ибо там всегда будет скан всего индекса. Причем для апдейта строки сиквелу потребуется зафетчить помимо значений [A1], [A], [B2], [B], [C3], [C], [D4], [D] еще колонки первичного ключа, а он не маленький, вполне возможно имело бы смысл сделать кластерный индекс с ключем только по полю [U] ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2020, 22:20 |
|
update. простой. медленно работает
|
|||
---|---|---|---|
#18+
felix_ff Причем для апдейта строки сиквелу потребуется зафетчить помимо значений [A1], [A], [B2], [B], [C3], [C], [D4], [D] еще колонки первичного ключа, Вы так говорите, будто значения полей, входящих в ключя, находятся где-то отдельно от остальных полей. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2020, 22:34 |
|
update. простой. медленно работает
|
|||
---|---|---|---|
#18+
msLex, нет, я к тому что был бы ключ меньше сервер оперировал несколько меньшим объемом данных ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2020, 22:42 |
|
update. простой. медленно работает
|
|||
---|---|---|---|
#18+
felix_ff msLex, нет, я к тому что был бы ключ меньше сервер оперировал несколько меньшим объемом данных За счёт чего? На листовом, а при скане читается только он, лежат одни и те же данные в не зависимости от размера ключа. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2020, 23:10 |
|
update. простой. медленно работает
|
|||
---|---|---|---|
#18+
друзья, проблема в том, что я не понимаю физической сущности этого явления. может кто-нибудь прольет свет? в принципе в крайнем случае я могу избавиться от данного апдейта путем перелопачивания кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2020, 23:15 |
|
update. простой. медленно работает
|
|||
---|---|---|---|
#18+
Shut-Up друзья, проблема в том, что я не понимаю физической сущности этого явления. может кто-нибудь прольет свет? в принципе в крайнем случае я могу избавиться от данного апдейта путем перелопачивания кода. Так чем хороший план отличается от плохого? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2020, 23:23 |
|
update. простой. медленно работает
|
|||
---|---|---|---|
#18+
msLex Shut-Up друзья, проблема в том, что я не понимаю физической сущности этого явления. может кто-нибудь прольет свет? в принципе в крайнем случае я могу избавиться от данного апдейта путем перелопачивания кода. Так чем хороший план отличается от плохого? на текущий момент единственный результат принесла операция Код: sql 1.
но полностью проблема не ушла. в пиковые минуты проблем время выполнения сократилось в три раза. но это далеко не моментально. поэтому вопрос чем плохой план отличается от хорошего, не приближает меня к ответу. почему он стал плохим? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 00:17 |
|
update. простой. медленно работает
|
|||
---|---|---|---|
#18+
Shut-Up msLex пропущено... Так чем хороший план отличается от плохого? на текущий момент единственный результат принесла операция Код: sql 1.
но полностью проблема не ушла. в пиковые минуты проблем время выполнения сократилось в три раза. но это далеко не моментально. поэтому вопрос чем плохой план отличается от хорошего, не приближает меня к ответу. почему он стал плохим? Что бы понять, почему план стал плохим, нужно увидеть отличия между плохим и хорошим планом. Вы привели только 1 план (это, кстати, "хороший" или "плохой"? ). Если планы запросов не отличаются, то проблемы условно внешние: нагрузка на темпдб, её лог, загрузка cpu, нехватка памяти и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 00:24 |
|
update. простой. медленно работает
|
|||
---|---|---|---|
#18+
Shut-Up msLex пропущено... Так чем хороший план отличается от плохого? на текущий момент единственный результат принесла операция Код: sql 1.
но полностью проблема не ушла. в пиковые минуты проблем время выполнения сократилось в три раза. но это далеко не моментально. поэтому вопрос чем плохой план отличается от хорошего, не приближает меня к ответу. почему он стал плохим? по идее у Вас не может быть "плохого" и "хорошего" планов. в любом случае у вас план запроса при вашем варианте написания запроса всегда будет clustered index scan => clustered index update; даже если предположить условие что вкорячив update statics вы каждый раз выстраиваете актуальную гистограмму распределения + вектор, я не вижу почему она может принести профит в запрос. там нет операторов сортировки или выделения явного выдения памяти на которые могло бы повлиять предположение оптимизатора каким количеством строк он будет оперировать. при этом фактор блокировок на таблице имхо тоже не стоит рассматривать, поскольку у вас всегда будет получение X => на таблицу + SchS add: у Вас на скриншоте превалирует ожидание по SOS_SCHEDULER_YIELD, я так полагаю вам просто не везет в некоторые моменты нарваться что бы ваш запрос ушел на наиболее загруженный worker ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 00:29 |
|
update. простой. медленно работает
|
|||
---|---|---|---|
#18+
msLex, планы одинаковые за исключение Actual и Estimated Rows. я с таким сталкиваюсь впервые. неужели сложно обновить 4 столбца типа намерик у 10к записей в разрезе одной кластерной таблицы? видимо бывают ситуации когда это становится сложно. фрагментация tempdb? вот не думаю. с процом и памятью все ок. грешил на память сделали х2. грешил на проц увеличили - сейчас пик CPU это 50%. в итоге сошлись с ДБА на том, что добавим в запрос хинт QUERY_PLAN_PROFILE и наберем больше статистики. msLex, доброй ночи. спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 00:55 |
|
update. простой. медленно работает
|
|||
---|---|---|---|
#18+
felix_ff add: у Вас на скриншоте превалирует ожидание по SOS_SCHEDULER_YIELD, я так полагаю вам просто не везет в некоторые моменты нарваться что бы ваш запрос ушел на наиболее загруженный worker доброй ночи, я на сегодня афк. спасибо вам всем друзья за помощь! ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 01:02 |
|
update. простой. медленно работает
|
|||
---|---|---|---|
#18+
Shut-Up felix_ff add: у Вас на скриншоте превалирует ожидание по SOS_SCHEDULER_YIELD, я так полагаю вам просто не везет в некоторые моменты нарваться что бы ваш запрос ушел на наиболее загруженный worker доброй ночи, я на сегодня афк. спасибо вам всем друзья за помощь! Ваша проблема это сверических конь в вакууме. Я не могу со 100% гарантией утверждать что либо, мои высказывания - это просто предположение. Копать в сторону улучшения если брокеру действительно не везет попадая на загруженные workerы - это попробовать использовать для него resource governor. Но прежде чем констатировать факт в чем либо Вам нужно проанализировать счетчики производительности на наличие каких либо отклонений от средних значений, что бы понимать что именно в момент когда ваш запрос "подвисает" вызывает проблемы. Основное направление это Access Methods, Memory Manager, Memory Broker Clerks, IO Reads/Writes, Latches. Может более знающие люди внесут ясности, но пока Вы предоставили данных столько что можно только гадать что там у Вас происходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 02:32 |
|
update. простой. медленно работает
|
|||
---|---|---|---|
#18+
Shut-Up, 1. Обновление статистики не может влиять на время выполнения. Оно влияет на построение плана. И, в данном случае, даже на план не влияет, ибо он будет с уровнем оптимизации TRIVIAL, т.к. другого плана быть не может. 2. В самом запросе тормозить нечему, так что а) проверьте не относится ли процедура активации к какой-нибудь группе рабочей нагрузки с урезанными ресурсами и б) коллекционируйте актуальные планы и анализируйте в них статистику ожиданий. Например, в стартовом посте у вас имеет место ожидание CPU на почти 5 сек - SOS_SCHEDULER_YIELD ( https://www.sqlskills.com/help/waits/sos_scheduler_yield/) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 11:47 |
|
|
start [/forum/topic.php?fid=46&fpage=56&tid=1685970]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 286ms |
total: | 436ms |
0 / 0 |