![]() |
#1 |
Участник
|
(D365FO) огромная разница времени выполнения запроса на SQL консоли и на AOS
Всем привет!
Вопрос по производительности. Есть одна кастомная вьюха, на консоли выполняется за секунду, на AOS (в коде дата-провайдера, на первом вызове qr.next()) почти минута. Почему такая большая разница? D365FO, Update26 (7.0.5257.35417) Забыл сказать - всё выполняется на OneBox VM Last edited by AnGor; 16.09.2019 at 10:57. |
|
![]() |
#2 |
NavAx
|
|
|
|
This post has been rated by: Logger (1), Ivanhoe (5). |
![]() |
#3 |
Участник
|
|
|
![]() |
#4 |
NavAx
|
|
|
![]() |
#5 |
Участник
|
|
|
![]() |
#6 |
Участник
|
Вот хорошая статья по вашей проблеме.
http://www.queryprocessor.ru/fast-in...-in-app-part1/ А при чем тут курсоры, не курсоры? кардинальное отличие во времени могут дать только разные планы Last edited by Logger; 16.09.2019 at 12:52. |
|
|
This post has been rated by: raz (5), AnGor (2). |
![]() |
#7 |
NavAx
|
|
|
![]() |
#8 |
Moderator
|
Еще в SQL Server 2016 появилась очень медитативная тулза - Live Query Statistics Можно во время исполнения длинного запроса посмотреть, на какой части плана исполнения сейчас находится SQL Server.
|
|
|
This post has been rated by: raz (5), Logger (3), AnGor (2). |
![]() |
#9 |
Участник
|
получается, что sp_cursoropen берёт очень не оптимальный план.
пробовал через sp_executesql, как в статье советовали - всё быстро и с оптимальным планом можно курсору как-то хороший план подсунуть? |
|
![]() |
#10 |
Модератор
|
После
X++: DBCC FREEPROCCACHE
__________________
-ТСЯ или -ТЬСЯ ? Last edited by Vadik; 17.09.2019 at 10:04. |
|
![]() |
#11 |
Участник
|
Оптимальный. Но для курсора. А для курсора принципиально важно быстро вынуть одну (первую) запись, а не весь список. Как следствие, и план запроса по другому строится. Просто "побочная" цель немного отличается
![]() Как уже неоднократно упоминал, очень сильно исказить план выполнения может использование Exists в запросе. Если такая связка в запросе есть, то лучше ее заменить на Inner Join, если это возможно по логике запроса Собственно, если Вы тестируете план выполнения напрямую в SQL Manager, то для запросов Axapta надо тестировать примерно такую конструкцию X++: declare MyCursor for select ... from ... open MyCursor fetch next from MyCursor В некоторых случаях может помочь обновление статистики. Но обновление статистики вещь "сиюминутная". Если эта вьюха будет выполняться относительно редко, то оптимальная для нее статистика будет "похоронена" под статистикой более часто выполняемых запросов
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
This post has been rated by: Vadik (1), trud (3), Logger (3), AnGor (2). |
![]() |
#12 |
Участник
|
|
|
|
This post has been rated by: raz (5), sukhanchik (5). |
![]() |
#13 |
Участник
|
В моём случае DBCC FREEPROCCACHE не помогла, та и не хотел прибегать к этой процедуре.
Денис, вот, не советует злоупотреблять DBCC FREEPROCCACHE ![]() https://denistrunin.com/performance-audit/ |
|
![]() |
#14 |
Участник
|
Quote:
Один хороший человек подсказал использовать на DS firstFast(false), помогло. |
|
|
This post has been rated by: Logger (3). |
![]() |
#15 |
Участник
|
|
|
Tags |
performance, sql server, оптимизация, план запроса, производительность |
«
Previous Thread
|
Next Thread
»
|
|