18.12.2017, 14:59 | #1 |
Участник
|
Параметр Scroll Option при создании курсора sp_cursorprepexec
Добрый день!
Ax 4.0, база данных SQL Server 2008 R2. При создании курсора в БД SQL аксапта пользуется процедурой sp_cursorprepexec, создавая запрос примерно такого вида: X++: declare @p1 int set @p1=-1 declare @p2 int set @p2=0 declare @p5 int set @p5=4098 declare @p6 int set @p6=8193 declare @p7 int set @p7=0 exec sp_cursorprepexec @p1 output, @p2 output, N'@P1 nvarchar(8)', N'SELECT ... FROM LEDGERTRANS A,LEDGERJOURNALTRANS B WHERE ((A.DATAAREAID=@P1) ...', @p5 output, @p6 output, @p7 output, N'dat' select @p1, @p2, @p5, @p6, @p7 Вопрос в том, возможно ли как-то влиять на этот параметр настройками или аксапта сама решает какие значения туда подставлять? Проблема возникла в небольшом отчете. В боевом приложении отчет стал страшно тупить. Однако в тестовом приложении отрабатывает моментально. Код обоих отчетов в приложениях одинаков. База и приложение синхронизировались относительно недавно (где-то месяц назад). Расследование с помощью профайлера показало, что на боевом приложении в этот параметр передается значение: @p5 = 4098, т.е. сумму флагов DYNAMIC | PARAMETERIZED_STMT. В тестовом приложении в этот параметр передается значение: @p5 = 20496, т.е. сумму флагов FAST_FORWARD | PARAMETERIZED_STMT | AUTO_CLOSE. Разный набор флагов кардинально меняет план исполнения запроса, что приводит к замедлению исполнения. |
|
22.12.2017, 16:14 | #2 |
Участник
|
Пока что удалось найти вот такой пост:https://github.com/dklinger/dynperf/...I%20Cursor.sql
Вот выдержка из него: X++: ----------------------------------------------
-- Normal FFO Cursor
----------------------------------------------
-- Fast Forward(16)+Parameterized(4096)+AutoFetch(8192)+AutoClose(16384)
--
set @p5=16+4096+8192+16384 --28688
----------------------------------------------
-- FFO Cursor Retrieving Text or Image Column
----------------------------------------------
-- Fast Forward(16)+Parameterized(4096)+AutoClose(16384)
--
set @p5=16+4096+16384 --20496
----------------------------------------------
-- Pessimistic Lock Cursor
-- This will change soon to be FFO
----------------------------------------------
-- Dynamic(2)+ Parameterized(4096)
--
set @p5=2+4096 --4098
----------------------------------------------
-- Typical Cursor for Form
----------------------------------------------
-- Fast Forward(16)+Parameterized(4096)+AutoFetch(8192)+AutoClose(16384)
--
set @p5=16+4096+8192+16384 --28688 Не пойму почему курсор открывается с Pessimistic Lock? На всех таблицах, участвующих в Query, свойство OccEnabled установлено в Yes. В самом Query у всех DataSource свойства: SelectWithRepeatableRead=No, ConcurenceModel=Auto. Настройки Конфигурации конкурентной модели (Администрирование - Настройка - Система - Конфигурации конкурентной модели) обоих приложений одинаковы: "Режим оптимистичной конкуренции включен для таблицы". PS: Поиск также вывел на книгу "Dynamics AX Performance Optimization Guide" (Martin Zhen & Daniel Liao). Вроде как в ней есть интересная глава "OPTIMIZING DYNAMICS AX SQL STATEMENT". Но, к сожалению, не нашел ее в открытом доступе. Поможет она или нет, не понятно. Может кто встречал такую книгу? |
|
|
|