16.09.2019, 10:12 | #1 |
Участник
|
(D365FO) огромная разница времени выполнения запроса на SQL консоли и на AOS
Всем привет!
Вопрос по производительности. Есть одна кастомная вьюха, на консоли выполняется за секунду, на AOS (в коде дата-провайдера, на первом вызове qr.next()) почти минута. Почему такая большая разница? D365FO, Update26 (7.0.5257.35417) Забыл сказать - всё выполняется на OneBox VM Последний раз редактировалось AnGor; 16.09.2019 в 10:57. |
|
16.09.2019, 10:33 | #2 |
NavAx
|
|
|
|
За это сообщение автора поблагодарили: Logger (1), Ivanhoe (5). |
16.09.2019, 11:02 | #3 |
Участник
|
|
|
16.09.2019, 12:26 | #4 |
NavAx
|
|
|
16.09.2019, 12:41 | #5 |
Участник
|
|
|
16.09.2019, 12:49 | #6 |
Участник
|
Вот хорошая статья по вашей проблеме.
http://www.queryprocessor.ru/fast-in...-in-app-part1/ А при чем тут курсоры, не курсоры? кардинальное отличие во времени могут дать только разные планы Последний раз редактировалось Logger; 16.09.2019 в 12:52. |
|
|
За это сообщение автора поблагодарили: raz (5), AnGor (2). |
16.09.2019, 12:50 | #7 |
NavAx
|
|
|
16.09.2019, 13:58 | #8 |
Moderator
|
Еще в SQL Server 2016 появилась очень медитативная тулза - Live Query Statistics Можно во время исполнения длинного запроса посмотреть, на какой части плана исполнения сейчас находится SQL Server.
|
|
|
За это сообщение автора поблагодарили: raz (5), Logger (3), AnGor (2). |
16.09.2019, 20:35 | #9 |
Участник
|
получается, что sp_cursoropen берёт очень не оптимальный план.
пробовал через sp_executesql, как в статье советовали - всё быстро и с оптимальным планом можно курсору как-то хороший план подсунуть? |
|
17.09.2019, 05:06 | #10 |
Модератор
|
После
X++: DBCC FREEPROCCACHE
__________________
-ТСЯ или -ТЬСЯ ? Последний раз редактировалось Vadik; 17.09.2019 в 10:04. |
|
17.09.2019, 09:47 | #11 |
Участник
|
Оптимальный. Но для курсора. А для курсора принципиально важно быстро вынуть одну (первую) запись, а не весь список. Как следствие, и план запроса по другому строится. Просто "побочная" цель немного отличается
Как уже неоднократно упоминал, очень сильно исказить план выполнения может использование Exists в запросе. Если такая связка в запросе есть, то лучше ее заменить на Inner Join, если это возможно по логике запроса Собственно, если Вы тестируете план выполнения напрямую в SQL Manager, то для запросов Axapta надо тестировать примерно такую конструкцию X++: declare MyCursor for select ... from ... open MyCursor fetch next from MyCursor В некоторых случаях может помочь обновление статистики. Но обновление статистики вещь "сиюминутная". Если эта вьюха будет выполняться относительно редко, то оптимальная для нее статистика будет "похоронена" под статистикой более часто выполняемых запросов
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
За это сообщение автора поблагодарили: Vadik (1), trud (3), Logger (3), AnGor (2). |
17.09.2019, 16:23 | #12 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: raz (5), sukhanchik (5). |
18.09.2019, 10:07 | #13 |
Участник
|
В моём случае DBCC FREEPROCCACHE не помогла, та и не хотел прибегать к этой процедуре.
Денис, вот, не советует злоупотреблять DBCC FREEPROCCACHE https://denistrunin.com/performance-audit/ |
|
18.09.2019, 18:01 | #14 |
Участник
|
Цитата:
Один хороший человек подсказал использовать на DS firstFast(false), помогло. |
|
|
За это сообщение автора поблагодарили: Logger (3). |
20.09.2019, 14:43 | #15 |
Участник
|
|
|
Теги |
performance, sql server, оптимизация, план запроса, производительность |
|
|