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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.08.2009, 09:53   #1  
Alenka is offline
Alenka
Участник
 
58 / 25 (1) +++
Регистрация: 19.04.2006
Тормоза при получении очередной строки из ResultSet
Добрый день! Столкнулась с проблемой: при получении результата SQL-запроса через ResultSet (через подключение UserConnection) получение очередной строки данных (ResultSet.next()) занимает время, сопоставимое с выполнением всего запроса. В SQL Server Managment Studio запрос выполняется меньше секунды. Получении данных в Аксапте - около 900 строк - 20 (!) минут.
Причем данная ситуация возникает не для всех запросов. Данные другого запроса, имеющего сходную структуру, получаются мгновенно.
Если кто-нибудь сталкивался с данной ситуацией, поделитесь своим опытом или соображениями. Спасибо.
Ax3.0 sp3
Старый 04.08.2009, 10:30   #2  
greench is offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Регистрация: 12.07.2007
Адрес: Киев
А под чем у вас база крутится?
Старый 04.08.2009, 10:31   #3  
Alenka is offline
Alenka
Участник
 
58 / 25 (1) +++
Регистрация: 19.04.2006
SQL Server
Старый 04.08.2009, 10:39   #4  
greench is offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Регистрация: 12.07.2007
Адрес: Киев
Если вам не тяжело, выложите пожалуйста сюда 2-а запроса - тот который тормозит и тот, который нормально работает.
Старый 04.08.2009, 10:52   #5  
Alenka is offline
Alenka
Участник
 
58 / 25 (1) +++
Регистрация: 19.04.2006
оба запроса используют некоторые таблицы, которых нет на sys слое. Но могу выложить их sql-текст.
Первый запрос, получение очередной строки из которого происходит мгновенно:
Код:
 select itm.itemId
from inventTableModule itm(nolock)
join 
(select availPhysical = sum(availPhysical), itemId
from InventSum (nolock)
where availPhysical > 0
and closed = 0
and dataareaId = 'dat'
group by itemId
)as t on t.itemId = itm.itemId
join inventTable it (nolock) on it.ItemId = itm.itemId
where itm.Blocked = 1
and itm.ModuleType = 2
and itm.dataareaId = 'dat'
and it.dataareaId = 'dat'
and it.itemType = 0 
and it.itemRangeIdRef not in
( select RangeIdRef
from inventItemRangeRef ref (nolock)
where ref.RangeIdRefParent in (229837,228003,228265,225907) 
and ref.dataareaId = 'dat')
Второй зпрос, получение очередной строки которого происходит долго:
Код:
 select itm.itemId
from inventTable it (nolock)
join inventTableModule itm(nolock) on itm.ItemId = it.ItemId and moduleType = 1
where itm.Blocked = 0
and itm.dataareaId = 'dat'
and it.dataareaid = 'dat'
and it.itemType = 0
and it.itemRangeIdRef not in
( select RangeIdRef
from inventItemRangeRef ref (nolock)
where ref.RangeIdRefParent in (229837,228003,228265,225907) 
and ref.dataareaId = 'dat')
and it.ItemId not in
(select distinct itemId 
from vendContractItem (nolock)
where dataareaId = 'dat')
Старый 04.08.2009, 12:07   #6  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Retail?

А если сделть подобный запрос не через UserConnection, а из основного соединения то такого же не будет, да? Нет возможности избавиться от него (от UserConnection-а)?
__________________
Zhirenkov Vitaly
Старый 04.08.2009, 12:12   #7  
Alenka is offline
Alenka
Участник
 
58 / 25 (1) +++
Регистрация: 19.04.2006
Для Connection та же ситуация
Старый 04.08.2009, 12:20   #8  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от Alenka Посмотреть сообщение
Для Connection та же ситуация
Тогда включите в Аксапте SQL-Trace и посмотрите план запроса, который на нём получается в Аксапте...
Сравните его с планом, который получается при выполнении напрямую (из Managment Studio) - есть отличия?
__________________
Zhirenkov Vitaly
Старый 04.08.2009, 12:34   #9  
Alenka is offline
Alenka
Участник
 
58 / 25 (1) +++
Регистрация: 19.04.2006
Нет, отличий в планах исполнения нет.
Такое ощущение, что каждый раз при ResultSet.next() запрос выполняется заново (судя по времени выполнения)
Старый 04.08.2009, 12:42   #10  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от Alenka Посмотреть сообщение
Такое ощущение, что каждый раз при ResultSet.next() запрос выполняется заново (судя по времени выполнения)
Поставьте в конфигурационной утилите в Advanced -INTERNAL=NOCURSORREUSE (в двухзвенке, или в толстом клиенте) и прогоните ещё раз.
Если запрос выполняется заново, то с SQL-Trace вы увидите все запросы (~900 раз)...
Если же он останется один - значит долго идёт именно fetch данных...

Чем в этом случае помочь, даже не знаю... попробуйте пошаманить, переписать запрос, разбить на 2 и т.п... Что-то должно помочь.
__________________
Zhirenkov Vitaly
За это сообщение автора поблагодарили: Alenka (1).
Старый 04.08.2009, 12:42   #11  
greench is offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Регистрация: 12.07.2007
Адрес: Киев
А не задваивает он данные?
Старый 04.08.2009, 12:44   #12  
greench is offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Регистрация: 12.07.2007
Адрес: Киев
+1 к пересмотреть запрос. Попробуйте пойти от простого к сложному и посмотрите после джойна какой таблицы начинаются тормоза.
Старый 04.08.2009, 12:50   #13  
Alenka is offline
Alenka
Участник
 
58 / 25 (1) +++
Регистрация: 19.04.2006
Цитата:
Сообщение от greench Посмотреть сообщение
А не задваивает он данные?
Нет, не задваивает.

Цитата:
Если же он останется один - значит долго идёт именно fetch данных...
Вот у меня подозрения на долгий fetch. Как с этим можно бороться?

Цитата:
Попробуйте пойти от простого к сложному и посмотрите после джойна какой таблицы начинаются тормоза.
Можно попробовать,только как это отразится на времени выполнения всей операции. Если что-то выкидывать из запроса, то нужно это будет проверять в Аксапте...
Старый 04.08.2009, 12:54   #14  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от Alenka Посмотреть сообщение
Вот у меня подозрения на долгий fetch. Как с этим можно бороться?
Ну проверьте таки на всякий случай, чтоб окончательно убедиться...
Как бороться - смотри выше...

Цитата:
Сообщение от Alenka Посмотреть сообщение
Можно попробовать,только как это отразится на времени выполнения всей операции. Если что-то выкидывать из запроса, то нужно это будет проверять в Аксапте...
Конечно, проверять надо будет в Аксапте... В Студии у вас же всё и так всё хорошо работает...
Не обязательно что-то выкидывать - можно попробовать поменять местами для начала, или наоборот что-то добавить. Если не поможет - разбейте на 2 запроса, например. Пробуйте, пока не достигните приемлимого результата по скорости.
__________________
Zhirenkov Vitaly
Старый 04.08.2009, 13:31   #15  
Alenka is offline
Alenka
Участник
 
58 / 25 (1) +++
Регистрация: 19.04.2006
Танцы с бубном вокруг запроса помогли! Tормозов при ResultSet.next() больше не стало. Правда запрос подурнел и ему определенно поплохело (в Студии стал выполняться дольше), но в общем - то же кол-во строк Аксапта стала получать за несколько секунд, вместо 20(!) минут.
Запрос стал выглядеть так:
Код:
 select it.itemId
from inventTable it (nolock)
join inventTableModule itm(nolock) on itm.ItemId = it.ItemId and moduleType = 1
join
( select it.ItemId
from inventTable it (nolock)
left join
( select distinct itemId 
from vendContractItem (nolock)
where dataareaId = 'dat'
) as v on v.ItemId = it.ITEMID
where v.ItemId is null 
) as vend on vend.ItemId = it.ItemId
where itm.Blocked = 0
and itm.dataareaId = 'dat'
and it.dataareaid = 'dat'
and it.itemType = 0
and it.itemRangeIdRef not in
( select RangeIdRef
from inventItemRangeRef ref (nolock)
where ref.RangeIdRefParent in (229837,228003,228265,225907) 
and ref.dataareaId = 'dat')
Всем спасибо за помощь.
Теги
ax3.0, resultset, sql

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Цветные строки в Grid Sergo DAX: База знаний и проекты 14 19.04.2012 10:02
Проблема с ResultSet sergeyoskol DAX: Программирование 3 14.07.2006 14:18
перевод строки в radiobutton kitty DAX: Программирование 2 19.07.2005 12:31
При создании строки в закупке статус строки становится "Отменено" AlexUnik DAX: Функционал 4 27.09.2004 16:05
Функция "Удалить строки" Oks DAX: Функционал 1 03.07.2002 18:09
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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