|
Долгая выборка из INSERTED\DELETED во временную таблицу
|
|||
---|---|---|---|
#18+
АцкийСкотонаalexeyvg, Вот трейс. Но ничего полезного для решения проблемы там нет.А что с памятью в момент выполнения? PLE? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2014, 06:54 |
|
Долгая выборка из INSERTED\DELETED во временную таблицу
|
|||
---|---|---|---|
#18+
Mind, Памяти вагон. Еще идеи? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2014, 08:25 |
|
Долгая выборка из INSERTED\DELETED во временную таблицу
|
|||
---|---|---|---|
#18+
АцкийСкотонаЕще идеи? Да идей-то может быть тоже вагон и маленькая тележка, но кому интересно играть в эту угадайку. 16737238 авторПопробуйте собрать ожидания при помощи события sqlos.wait_info 16737828 авторно посмотрите при помощи расширенного события, чего ждет запрос? 16737989 авторЕсли репро не получается сделать, то хотя бы ожидания 16739168 авторПопробуйте собрать ожидания при помощи события sqlos.wait_info И репро делать не хотите. Только удачи можно пожелать, ибо надежда на нее. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2014, 09:00 |
|
Долгая выборка из INSERTED\DELETED во временную таблицу
|
|||
---|---|---|---|
#18+
АцкийСкотонаКонкретнее. Имеем два стейтмента. 1. SELECT "ПОЛЕ" INTO #T_INSERTED FROM INSERTED и 2. SELECT "ПОЛЕ" INTO #T_INSERTED FROM "Таблица_на_которой_стоит_триггер" В таблице 350000 записей. Проводится апдейт всех записей по некому полю, думаю не важно по какому. Результат: 45сек и 0,5 сек. Притом результат один и тотже что выбирать ВСЕ столбцы, что один какой либо. Даже если написать Патамушто 2. есть документированный BULK (т.е. минимально логгируемая операция), а 1. никогда такой не будет. Патамушто в транзакции. ЗЫ. Ну а в остальном - присоединимся с предыдущим ораторам: херней маетесь. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2014, 09:02 |
|
Долгая выборка из INSERTED\DELETED во временную таблицу
|
|||
---|---|---|---|
#18+
aleks2, без стрельбы в воздух пожалуйста. оба стейтмента внутри триггера. оба выполняются под транзакцией. бесполезные коменты прошу оставить при себе. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2014, 10:52 |
|
Долгая выборка из INSERTED\DELETED во временную таблицу
|
|||
---|---|---|---|
#18+
SomewhereSomehow, чтобы выполнить тот скрипт необходимо создавать евент. на его создание необходимы права, которые мне не дали. Чем вас не устраивает скрипт, который я прилагал ранее? Он и ожидания и ресурсы показывает. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2014, 10:53 |
|
Долгая выборка из INSERTED\DELETED во временную таблицу
|
|||
---|---|---|---|
#18+
АцкийСкотона, Тем, что показывает текущее ожидание и зависит от момента запуска. Сбор событий позволяет получить полную картину. Пусть соберет тот, у кого есть права, раз не хочет вам давать. Хотя странна такая избирательность, на профайлер есть, а тут закрыли? Еще можете попробовать, раз у вас 2014 сервер, выполнить запрос в режиме set statistics xml on, и через некоторое время, пока он выполняется, сделать в другом окне запрос к представлению - sys.dm_exec_query_profiles - посмотрите кто дольше всех выполняется и что происходит. Сам апдейт с триггером, если закомментировать обращение к таблице inserted, сколько выполняется? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2014, 12:19 |
|
Долгая выборка из INSERTED\DELETED во временную таблицу
|
|||
---|---|---|---|
#18+
aleks2Патамушто 2. есть документированный BULK (т.е. минимально логгируемая операция), а 1. никогда такой не будет. Патамушто в транзакции.Дело не в этом. Вот есть 2 операции, обе в транзакции: Код: sql 1. 2.
Вообще загадка, интересно, я даже установил себе 2014, чтобы трейс прочитать :-) Запись там жалких 500 страниц для первого стейтмента и 1000 для второго (в первой 2 поля (16 байт), во второй *(942 байт) ). BULK или нет, неважно, операция мизерная. А вот чтений страниц: 194149595 для первого, и 28239 для второго. Почему??? Чего там читать, 1.6 террабайта для мизерных 300 тысяч нешироких строк??? Отличие в планах в операторе Distribute Streams... 2 АцкийСкотона Не могли бы вы сделать ещё один трейс, сделав стейтменты по возможности одинаковыми, исключив паралелизм? Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2014, 23:56 |
|
Долгая выборка из INSERTED\DELETED во временную таблицу
|
|||
---|---|---|---|
#18+
SomewhereSomehowЕще можете попробовать, раз у вас 2014 сервер, выполнить запрос в режиме set statistics xml on, и через некоторое время, пока он выполняется, сделать в другом окне запрос к представлению - sys.dm_exec_query_profiles - посмотрите кто дольше всех выполняется и что происходит.Да в трейсе всё видно... SomewhereSomehowСам апдейт с триггером, если закомментировать обращение к таблице inserted, сколько выполняется?71 секунда всего, из них 45 на FROM INSERTED 5 на FROM PE.FD_Charge_Details 10 на отладочный вывод, не имееющий отношения к обсуждению 1 секунда на сбор статистики Остаётся 9 секунд на сам апдэйт ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 00:11 |
|
Долгая выборка из INSERTED\DELETED во временную таблицу
|
|||
---|---|---|---|
#18+
SomewhereSomehowНо у меня такая разница как у вас не воспроизводится, впрочем я ничего не знаю ни о ваших данных, ни об условиях, ни о способе измерения. Как я уже говорил, либо репро, либо какая-то конкретика, чего так долго ждет запрос.А сколько у вас чтений для первого и второго запроса, и сколько время выполнения? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 00:14 |
|
Долгая выборка из INSERTED\DELETED во временную таблицу
|
|||
---|---|---|---|
#18+
alexeyvg, Я тоже смотрел трейс и видел большое число необъяснимых чтений. Именно по этому, я попросил автора посмотреть, что твориться в dm_exec_query_profiles. Сделал небольшое репро, там тоже есть чтения, которые непонятно откуда берутся: Код: 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. 30. 31. 32. 33. 34. 35. 36. 37.
Запускаем вместе с профайлером: Код: sql 1. 2. 3. 4.
Далее, быстренько в другом окне смотрим что в sys.dm_exec_query_profiles, т.к. у меня слишком быстро выпоняется триггер, я в цикле собираю сведения, ТС-у можно этого не делеать. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Теперь, смотрю, что получилось в sys.dm_exec_query_profiles: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Для таблицы выдает: physical_operator_name node_id thread_id logical_read_countParallelism 0 0 NULLTable Insert 1 0 0Table Scan 3 0 0Table Insert 1 1 0Table Scan 3 1 6976Table Insert 1 2 0Table Scan 3 2 2688Table Insert 1 3 0Table Scan 3 3 8166Table Insert 1 4 0Table Scan 3 4 5504 По сумме чтений примерно совпадает с профайлером. Для inserted: physical_operator_name node_id thread_id logical_read_countParallelism 0 0 NULLTable Insert 1 0 0Parallelism 3 0 NULLInserted Scan 4 0 0Table Insert 1 1 0Parallelism 3 1 NULLInserted Scan 4 1 0Table Insert 1 2 0Parallelism 3 2 NULLTable Insert 1 3 0Parallelism 3 3 NULLTable Insert 1 4 0Parallelism 3 4 NULL 1) Везде 0! Если поискать по всем собранным сведениям - также везде 0. Имхо, странно - почему это представление не собирает данные по inserted. Это недоработка номер 1. 2) Далее сами чтения непонятно откуда берутся - это баг номер 2. Ожидание, кстати, самое большое - SOS_SCHEDULER_YIELD, что также говорит об интенсивном сканировании страниц в памяти. Вот описание на коннекте: Excessive number of Logical Reads when working with inserted table in a trigger on a partitioned table Там еще таблица секционирована, как у ТС. Пишут что исправили в hotfix-е, проверил репро приведенное там - репро сработало. Т.е. наблюдаем регресс. Проверял на версии 2014 CU1. Можно накатить CU4 и проверить там, если описанное поведение наблюдается и там - можно смело писать в коннект о том, что есть регресс, пусть исправляют в следующем фиксе. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 10:10 |
|
Долгая выборка из INSERTED\DELETED во временную таблицу
|
|||
---|---|---|---|
#18+
SomewhereSomehowЯ тоже смотрел трейс и видел большое число необъяснимых чтений. Именно по этому, я попросил автора посмотреть, что твориться в dm_exec_query_profiles.ПОнятно, спасибо за разъяснение, я 2014 плотно только начал исследовать :-) На баг конечно очень похоже, после трейса появилась уверенность почти на 100% ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 12:47 |
|
Долгая выборка из INSERTED\DELETED во временную таблицу
|
|||
---|---|---|---|
#18+
SomewhereSomehow, Четверку пробовали. По крайней мере превышение чтений в псевдотейблах в 10 раз по сравнению с просто таблицей осталось. Это точно баг видимо. Что ж. У мелкософта "прямо" никогда не было. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2014, 13:10 |
|
|
start [/forum/topic.php?fid=46&gotonew=1&tid=1700245]: |
0ms |
get settings: |
12ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
53ms |
get topic data: |
11ms |
get first new msg: |
9ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 244ms |
total: | 413ms |
0 / 0 |