Добрый день!
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 в процедуру передаются параметры прокрутки для создаваемого курсора (scroll options).
Вопрос в том, возможно ли как-то влиять на этот параметр настройками или аксапта сама решает какие значения туда подставлять?
Проблема возникла в небольшом отчете. В боевом приложении отчет стал страшно тупить. Однако в тестовом приложении отрабатывает моментально. Код обоих отчетов в приложениях одинаков. База и приложение синхронизировались относительно недавно (где-то месяц назад).
Расследование с помощью профайлера показало, что на боевом приложении в этот параметр передается значение:
@p5 = 4098, т.е. сумму флагов DYNAMIC | PARAMETERIZED_STMT.
В тестовом приложении в этот параметр передается значение:
@p5 = 20496, т.е. сумму флагов FAST_FORWARD | PARAMETERIZED_STMT | AUTO_CLOSE.
Разный набор флагов кардинально меняет план исполнения запроса, что приводит к замедлению исполнения.