AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.10.2005, 08:47   #1  
Maksim is offline
Maksim
Участник
Axapta Retail User
Ex AND Project
 
25 / 18 (1) ++
Регистрация: 28.03.2003
Адрес: г. Владивосток
Аналог NOLOCK в аксаптовском Query
Вкратце.

В Аксапте написан некоторый класс, который выполняет "быструю" разноску заказа. В классе выполняется запрос который "тормозит" (профайлер показывает, что тормоза идут в query.next()).

Такой же запрос "протормаживает" при выполнении его из Квери Аналайзера от MSSQL во время разноски.

Модификация запроса и подстановка вместо
FROM INVENTSUM A,INVENTDIM B

FROM INVENTSUM A(NOLOCK),INVENTDIM B(NOLOCK)

приводит к ускорению в примерно в 10 раз

Вопрос: есть ли в Аксапте аналог директивы NOLOCK при работе с Query?
Старый 11.10.2005, 08:56   #2  
Lazy_Tiger is offline
Lazy_Tiger
NavAx
Axapta Retail User
1C
NavAx Club
 
610 / 31 (3) +++
Регистрация: 17.12.2001
Адрес: Красноярск
Thumbs down
грхм... намекну:
а не будет ли МУЧИТЕЛЬНО БОЛЬНО потом? Подумайте.

Хинт: "Do not issue shared locks and do not honor exclusive locks. When this option is in effect, it is possible to read an uncommitted transaction or a set of pages that are rolled back in the middle of a read. Dirty reads are possible."
__________________
И все они создания природы...
Старый 11.10.2005, 09:23   #3  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Хм.

Странно, но запрос, выполняемый ч-з QueryRun вызывается как NOLOCK
__________________
Axapta v.3.0 sp5 kr2
Старый 11.10.2005, 09:39   #4  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Понял!

NOLOCK зависит от параметра CashLookup первой таблицы (в данном случае InventSum). Если в CashLookup стоит None или NotInTTS, то запрос идет без NOLOCK. Если Found и выше, то с NOLOCK
__________________
Axapta v.3.0 sp5 kr2
Старый 11.10.2005, 09:52   #5  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Re: Аналог NOLOCK в аксаптовском Query
Цитата:
Изначально опубликовано Maksim
В Аксапте написан некоторый класс, который выполняет "быструю" разноску заказа. В классе выполняется запрос который "тормозит" (профайлер показывает, что тормоза идут в query.next()).

Такой же запрос "протормаживает" при выполнении его из Квери Аналайзера от MSSQL во время разноски.

Модификация запроса и подстановка вместо
FROM INVENTSUM A,INVENTDIM B
FROM INVENTSUM A(NOLOCK),INVENTDIM B(NOLOCK)
Вы не "ускорили" запрос, а заложили в систему бомбу. Рано или поздно (скорее рано) она рванет
Старый 11.10.2005, 11:49   #6  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Для явного указания хинта (nolock) в Query используется следующий синтаксис

PHP код:
SalesLine.selectLocked(false);
QueryRun.setCursor(SalesLine); 
Таблица SalesLine должна быть первым DataSource в указанном QueryRun.

Хотя, согласен с тем, что использование этого хинта оправдано только и исключительно при формировании отчетов. Если речь идет о модификации данных, то этого следует избегать. Может привести к серьезным ошибкам.

Ускорение выполнения запросов - это вопрос существования нужных индексов, грамотного формирования связи между таблицами, задания условий отбора и т.д. и т.п.

Использование хинтов, в общем случае, приводит к замедлению, а не к ускорению получения выборки.
Теги
nolock, query, selectlocked

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX: QueryRun and Query Objects - Binding operation failed to allocate buffer space Blog bot DAX Blogs 0 03.04.2009 08:05
palleagermark: Sample union query from AX 2009 Blog bot DAX Blogs 0 11.07.2008 20:05
Dynamics AX Geek: Using query() Blog bot DAX Blogs 0 28.10.2006 16:40
Установка условия ИЛИ (OR) в Query Zeratul DAX: Программирование 3 22.06.2006 14:28
Проблема с составлением Query axaLearner DAX: Программирование 10 01.12.2005 15:00
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 06:39.