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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.07.2012, 10:18   #1  
Deepoint is offline
Deepoint
Участник
SAP
 
60 / 14 (1) ++
Регистрация: 01.04.2011
Записей в блоге: 1
Зависание клиента при выполнении запроса
Здравствуйте Уважаемые.
Прошу Вашей помощи, т.к. свои идеи кончились.

Два АОС-а, настроены идентично, данные так же одинаковы.
Ax 4.0, ядро - 4.0.2503.756, приложение - 4.0.2501.347
SQL 2005.
В качестве примера кода Job:

X++:
static void TestQuery(Args _args)
{
    Query                            q = new Query();
    QueryRun                      qr;
    QueryBuildDatasource    qbdsInventTrans;
    QueryBuildDatasource    qbdsSalesTable;   
    ;

    qbdsSalesTable          = q.addDataSource(tablenum(SalesTable));
    qbdsSalesTable.addRange(fieldnum(SalesTable, ShippingDateConfirmed)).value(strfmt("(ShippingDateConfirmed <= %1)", date2strxpp(16\07\2011)));

    qbdsInventTrans         = qbdsSalesTable.addDataSource(tablenum(InventTrans));
    qbdsInventTrans.addLink(fieldnum(SalesTable, SalesId), fieldnum(InventTrans, TransRefId));

    qbdsInventTrans.addRange(fieldnum(InventTrans, TransType)).value(SysQuery::value(InventTransType::Sales));
    qbdsInventTrans.addRange(fieldnum(InventTrans, StatusIssue)).value(SysQuery::range(StatusIssue::ReservPhysical, StatusIssue::OnOrder));

    qbdsInventTrans.joinMode(JoinMode::InnerJoin);
    qbdsInventTrans.fetchMode(QueryFetchMode::One2One);

    qr = new QueryRun(q);

    while(qr.next())
    {
	info("Do something...");
    }
}
Запрос срабатывает на одном АОС-е, на другом нет. Зависает на строке while(qr.next()). При этом клиент повисает, в шапке окна клиента пишет «Не отвечает».
Cессия остается в списке активных в аксапте. В SQL сессия находится в состоянии «Running». Ждал около часа результата. Безрезультатно. На другом АОС запрос выполняется сразу.
Глобальная перекомпиляция, переиндексация, очистка кэша не помогла.
Подскажите в каком направлении копать. Буду весьма признателен за любую помощь.

Последний раз редактировалось Deepoint; 20.07.2012 в 10:33.
Старый 20.07.2012, 10:30   #2  
NetBus is offline
NetBus
Участник
 
200 / 85 (3) ++++
Регистрация: 08.07.2005
Адрес: Москва
Цитата:
Сообщение от Deepoint Посмотреть сообщение
X++:
    while(qr.next())
    {
	info("Do something...")
    }
}
точка с запятой пропущена после info
Старый 20.07.2012, 10:32   #3  
Deepoint is offline
Deepoint
Участник
SAP
 
60 / 14 (1) ++
Регистрация: 01.04.2011
Записей в блоге: 1
Да, прошу прощения, это я дописал уже здесь, вместо исполняемого кода ради экономии места. Сейчас исправлю.
Старый 20.07.2012, 11:13   #4  
imir is offline
imir
Участник
 
159 / 161 (6) ++++++
Регистрация: 28.05.2010
Данные идентичные, но базы разные? Смотрите план запроса, обновите статистику в SQL
Старый 20.07.2012, 12:32   #5  
NetBus is offline
NetBus
Участник
 
200 / 85 (3) ++++
Регистрация: 08.07.2005
Адрес: Москва
а AOS передернуть принудительно? и попробовать заново?
Старый 21.07.2012, 09:07   #6  
Player1 is offline
Player1
Участник
Самостоятельные клиенты AX
 
306 / 137 (5) +++++
Регистрация: 21.04.2008
Посмотрите ваш квэри (q) через SysQueryViewer::.... как там сложится запрос?
Спрашиваю это еще и потому что лично мне как то непривычно связывать SalesTable и InventTrans, я бы вязал проводки со строками заказа SaleLine.

И еще одна вещь, зачем qbdsInventTrans.fetchMode(QueryFetchMode::One2One); ? это точно надо?
Старый 22.07.2012, 13:14   #7  
Deepoint is offline
Deepoint
Участник
SAP
 
60 / 14 (1) ++
Регистрация: 01.04.2011
Записей в блоге: 1
Статистику SQL обновил.
Планы запросов одинаковы. Причем, что странно, на том АОС-е что зависает трассировка срабатывает через раз. Когда сформируется запись когда нет.
Рестарт АОСов и перезагрузка сервера проводились.
Проблема осталась...
Старый 22.07.2012, 13:22   #8  
Deepoint is offline
Deepoint
Участник
SAP
 
60 / 14 (1) ++
Регистрация: 01.04.2011
Записей в блоге: 1
Код, к сожалению, не мой. Но суть вопроса - почему на одном АОСе работает на другом нет.
SysQueryViewer у меня нет, использую QueryBrowser. Зависает.
Старый 22.07.2012, 14:00   #9  
Player1 is offline
Player1
Участник
Самостоятельные клиенты AX
 
306 / 137 (5) +++++
Регистрация: 21.04.2008
Используйте квэри- вивер или браузер или вообще info(qbds.tostring()) перед строкой qr = new QueryRun(q); а эту строку и while закоментируйте вообще.

PS: И всё таки конструкция запроса мне не нравится, я бы переписал с использованием SalesLine
Старый 22.07.2012, 15:13   #10  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Deepoint Посмотреть сообщение
Запрос срабатывает на одном АОС-е, на другом нет. Зависает на строке while(qr.next()).
Вы уперлись в АОСы, а это ошибочный путь.

Цитата:
Сообщение от imir Посмотреть сообщение
Данные идентичные, но базы разные?
ответьте на этот вопрос, пожалуйста.
базы разные?

если к каждой базе вручную задать аналогичные запросы в Management Studio, то время выполнения будет одинаковым?
если одинаковым, то ройте в настройки, указанные в конфигурационной утилите для АОСов
если разным (скорее всего), то ройте в сторону индексов. они скорее всего разные на разных базах. на одной из баз происходит полное сканирование вместо индексной выборки. поэтому и тормозит


дело в том, что qr.next() выполняет отправку текста запроса на SQL-сервер.
qr.next() ожидает ответа от SQL-сервера.
если висит в этом месте, то нет ответа от SQL-сервера.
АОС тут не при чем.
__________________
полезное на axForum, github, vk, coub.
Старый 22.07.2012, 15:27   #11  
Deepoint is offline
Deepoint
Участник
SAP
 
60 / 14 (1) ++
Регистрация: 01.04.2011
Записей в блоге: 1
Да, базы разные. Восстанавливались из одного бэкапа.
За это сообщение автора поблагодарили: gl00mie (0).
Старый 22.07.2012, 19:28   #12  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
Почему по разному? Ответ "потомучто". Вам уже советовали - смотрите планы запросов. Всё остальное гадание.

Вероятно на одном сервере план запроса получился "хороший", на другом "плохой".
Планы остаются в памяти для повторного использования. Можете выдать обоим серверам DBCC FREEPROCCACHE чтобы он забыли все сохраненные планы и начали с чистого листа.

Из области простых гаданий - в стандарте на InventTrans нет индекса по TransType и TransRefId который в вашем запросе был бы очень кстати. Есть ли что то похожее в вашем приложении никто из нас не знает

И опять же - смотрите планы и не гадайте - там всё написано и даже нарисовано. Чтобы оптмизаторы повели себя по разному даже в очень похожем окружении есть десятки причин.
Старый 22.07.2012, 19:40   #13  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Deepoint Посмотреть сообщение
Да, базы разные. Восстанавливались из одного бэкапа.
попробуйте таки выполнить запросы напрямую из Management Studio к двум базам.
разница по времени есть? а в планах выполнения?

полное ощущение, что что-то в базах разное. несмотря на то, что восстановлено из бэкапа. либо восстановлено на медленные диски, либо восстановленое не равно исходной базе. но почему планы запросов одинаковы - непонятно.
__________________
полезное на axForum, github, vk, coub.
Старый 23.07.2012, 09:59   #14  
imir is offline
imir
Участник
 
159 / 161 (6) ++++++
Регистрация: 28.05.2010
Кстааати.. AOS-s разные - вы сравните kernel version обоих аосов, такое подозрение, что на втором не установлены SP и Ru просто
Старый 23.07.2012, 10:55   #15  
Deepoint is offline
Deepoint
Участник
SAP
 
60 / 14 (1) ++
Регистрация: 01.04.2011
Записей в блоге: 1
Проблему решили кардинально... Переустановкой ОС. Залил все то же самое - заработало. Понимаю, что из пушки по воробьям, но время дорого было. Всем спасибо за помощь.
Старый 23.07.2012, 10:56   #16  
Deepoint is offline
Deepoint
Участник
SAP
 
60 / 14 (1) ++
Регистрация: 01.04.2011
Записей в блоге: 1
Первым делом смотрел. Одинаковые.
Теги
аос, запрос (query), зависание

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
передача бинарных файлов с клиента на AOS и обратно corvax DAX: Программирование 9 01.04.2014 15:05
Странное Периодическое и Ручное Сопоставление проводок клиента в Акс 2009 Aquarius DAX: Функционал 3 17.05.2012 01:53
Как из X++ запустить клиента AX 2009 с минимизированным окном? gl00mie DAX: Программирование 8 13.07.2011 00:36
сопоставление оплат клиента, переносов сальдо-поле накладная в общем журнале? Aquarius DAX: Функционал 3 28.01.2009 12:51
Изменить план выполнения запроса Sequel DAX: Администрирование 2 29.05.2008 15:46

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

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

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