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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.04.2006, 17:47   #1  
Falcon is offline
Falcon
Восставший
Соотечественники
 
753 / 35 (3) +++
Регистрация: 08.02.2002
Адрес: Pincourt, Quebec, Canada
Аксапта. Производительность. Эпизод n+1-й
Вот говорят: если проблемы с производительностью, то проверьте, насколько оптимизированы ваши запросы.

Берем функцию Accounts Receivable->Periodic->Sales Update->Invoice (да простят меня за английские названия...).
Нажимаем кнопочку Select.
В ней указаны следующие поля:
SalesLine - Stopped = No
SalesTable - Giro money transfer slip on sales invoice = None.
Больше ничего не указано, хотя разумеется, есть скрытые поля ограничений (SalesLine-Type = SalesOrder, SalesLine-Status= Delivered...)
Нажимаем кнопочку OK

И тут случается чудо
Иногда "ответ" появляется в течение 10 минут
Иногда - через 3 часа (!)
Иногда выскакивает Deadlock on SalesLine (при том, заметьте, что в Аксапте один-единственный юзер!)

Пытаемся делать SQL Statement Trace Log (с ограничением: время запроса выше 1000 мс) - получаем такие результаты

Execution time Record size Records per fetch
2202 2962 8
5256 5315 4
1229 559 43
4917 5315 4
3861 2488 2

Execution time, разумеется, в миллисекундах.

То есть две записи из SalesLine выбираются в течение почти четырех (!) секунд.

Всего записей в SalesLine - 140 тыс, в SalesOrder - 60 тыс.

Почему так? Почему одна и та же выборка по одной и той же таблице, в одних и тех же примерно условиях (количество юзеров, нагрузка на систему и пр.) - занимает время, разнящаеся на порядки? В нормальном состоянии один fetch ведь по идее должен занимать десятки миллисекунд, не больше?

Да, и откуда вообще берутся дедлоки?

По-моему, проблема локализована до предела - и тем не менее, я не вижу, как ее решить.

Помогите, пожалуйста.

Спасибо.

П.С. Ax 3.0 SP2, Intl, IMTS выключена
Старый 28.04.2006, 18:27   #2  
Morpheus is offline
Morpheus
Участник
Аватар для Morpheus
Соотечественники
 
602 / 164 (7) ++++++
Регистрация: 30.03.2005
Адрес: Київ-København-Düsseldorf
А что в Канадских компаниях DBA для обслуживания баз данных на работу не берут?
Старый 28.04.2006, 18:29   #3  
itfs is offline
itfs
Участник
 
277 / 43 (2) +++
Регистрация: 18.07.2005
Адрес: Moscow
Праздники на носу, стоит ли так расстраиваться?
До оптимизации запросов вы еще не добрались, следует посмотреть план запроса.
Что касается dead Lock-ов, в данном случае, по-моему, это не причина, а следствие. 3-х часовой запрос в ms-sql (я правильно угадал?) это уже криминал, на это "Софтверный гигант" никак не мог расчитывать ...

С уважением, itfs.
Старый 28.04.2006, 18:35   #4  
Falcon is offline
Falcon
Восставший
Соотечественники
 
753 / 35 (3) +++
Регистрация: 08.02.2002
Адрес: Pincourt, Quebec, Canada
А на что мне надо обратить внимании при изучении плана запроса?

В Канадских компаниях, равно как и в российских, предпочитают экономить и брать специалиста "все-в-одном". Впрочем, я уже четвертый год неплохо справляюсь.
Старый 28.04.2006, 18:44   #5  
itfs is offline
itfs
Участник
 
277 / 43 (2) +++
Регистрация: 18.07.2005
Адрес: Moscow
Цитата:
Сообщение от Falcon
А на что мне надо обратить внимании при изучении плана запроса?
Для начала на то, какие индексы используются для поиска записей. Если вы "все-в-одном", то можно не мучиться с планом сразу. А посмотреть для начала на таблице какие индексы созданы и соответствует ли это логике выборки данных в нашем случае, умозрительно, так сказать. Условия выборки должны так или иначе присутствовать в индексах.

С уважением, itfs.
Старый 28.04.2006, 18:36   #6  
Falcon is offline
Falcon
Восставший
Соотечественники
 
753 / 35 (3) +++
Регистрация: 08.02.2002
Адрес: Pincourt, Quebec, Canada
Цитата:
Праздники на носу, стоит ли так расстраиваться?
Между прочим, у кого праздники - а кому-то пахать без перерыва всю следующую неделю. Даже на маевку не отпустят, капиталисты проклятые!
Старый 28.04.2006, 18:50   #7  
Falcon is offline
Falcon
Восставший
Соотечественники
 
753 / 35 (3) +++
Регистрация: 08.02.2002
Адрес: Pincourt, Quebec, Canada
Индексы соответствуют.

Выборка идет по SalesID и LineNum, такой индекс в этой таблице есть.

Да и потом, если б дело было в индексах - то этот запрос каждый раз выполнялся бы долго. Логично? А так - он 2 дня работает нормально, а на третий... Раньше помогала перезагрузка сервера БД - но теперь и после нее затык...
Старый 28.04.2006, 19:05   #8  
Morpheus is offline
Morpheus
Участник
Аватар для Morpheus
Соотечественники
 
602 / 164 (7) ++++++
Регистрация: 30.03.2005
Адрес: Київ-København-Düsseldorf
Цитата:
Сообщение от Falcon
Раньше помогала перезагрузка сервера БД - но теперь и после нее затык...
Какая у Вас используется БД?
Старый 28.04.2006, 19:10   #9  
Falcon is offline
Falcon
Восставший
Соотечественники
 
753 / 35 (3) +++
Регистрация: 08.02.2002
Адрес: Pincourt, Quebec, Canada
Цитата:
Сообщение от Morpheus
Какая у Вас используется БД?
MS SQL Server 2000 SP3a
Старый 28.04.2006, 19:18   #10  
Morpheus is offline
Morpheus
Участник
Аватар для Morpheus
Соотечественники
 
602 / 164 (7) ++++++
Регистрация: 30.03.2005
Адрес: Київ-København-Düsseldorf
Цитата:
Сообщение от Falcon
MS SQL Server 2000 SP3a
К примеру Oracle позволяет промониторить состояния индексов, таблиц, блокировок и т.д. через системные представления... А также все проблемы в базе пишет в log файл...
Старый 28.04.2006, 18:58   #11  
itfs is offline
itfs
Участник
 
277 / 43 (2) +++
Регистрация: 18.07.2005
Адрес: Moscow
Тогда конечно сложнее....

А уточните пожалуйста:
1. после того как затык наступает, производительность навсегда остается плохой или потом может "отпустить"?
2. Вы используете 2-х звенную или 3-х звенную конфигурацию?

С уважением, itfs.
Старый 28.04.2006, 19:01   #12  
ALES is offline
ALES
Участник
Злыдни
 
220 / 45 (2) +++
Регистрация: 11.08.2004
Цитата:
Сообщение от Falcon
Помогите, пожалуйста.
П.С. Ax 3.0 SP2, Intl, IMTS выключена
Текст этого запроса опубликуйте
Старый 28.04.2006, 19:04   #13  
Falcon is offline
Falcon
Восставший
Соотечественники
 
753 / 35 (3) +++
Регистрация: 08.02.2002
Адрес: Pincourt, Quebec, Canada
Цитата:
Сообщение от ALES
Текст этого запроса опубликуйте
Ну держитесь

Код:
SELECT A.SALESID,A.LINENUM,A.ITEMID,A.SALESSTATUS,A.LEDGERACCOUNT,A.NAME,A.EXTERNALITEMID,A.TAXGROUP,A.QTYORDERED,A.SALESDELIVERNOW,A.REMAINSALESPHYSICAL,A.REMAINSALESFINANCIAL,A.COSTPRICE,A.SALESPRICE,A.CURRENCYCODE,A.LINEPERCENT,A.LINEDISC,A.LINEAMOUNT,A.CONFIRMEDDLV,A.RESERVATION,A.SALESUNIT,A.DIMENSION,A.DIMENSION2_,A.DIMENSION3_,A.PRICEUNIT,A.INVENTTRANSID,A.CUSTGROUP,A.CUSTACCOUNT,A.SALESQTY,A.SALESMARKUP,A.INVENTDELIVERNOW,A.MULTILNDISC,A.MULTILNPERCENT,A.SALESTYPE,A.BLOCKED,A.COMPLETE,A.REMAININVENTPHYSICAL,A.TRANSACTIONCODE,A.TAXITEMGROUP,A.DEL_CONFIGID,A.TAXAUTOGENERATED,A.UNDERDELIVERYPCT,A.OVERDELIVERYPCT,A.BARCODE,A.BARCODETYPE,A.INVENTREFTRANSID,A.INVENTREFTYPE,A.INVENTREFID,A.ITEMBOMID,A.LINEHEADER,A.SCRAP,A.RETURNACTIONID,A.INVENTTRANSIDRETURN,A.INVENTDIMID,A.TRANSPORT,A.STATPROCID,A.ESTIMATEGROSS,A.ESTIMATENET,A.PORT,A.CUSTOMERLINENUM,A.PACKINGUNITQTY,A.PACKINGUNIT,A.INTERCOMPANYINVENTTRANSID,A.SICPARENTINVENTTRANSID,A.SICSALESQTYKITITEM,A.SICINVENTBOMJOURNALID,A.SALESPROJECTCODE,A.MODIFIEDDATE,A.MODIFIEDTIME,A.MODIFIEDBY,A.CREATEDDATE,A.CREATEDTIME,A.CREATEDBY,A.RECID FROM SALESLINE A(UPDLOCK)  WHERE ((DATAAREAID=?) AND (SALESID=?)) ORDER BY A.DATAAREAID,A.SALESID,A.LINENUM OPTION(FAST 9)
Старый 28.04.2006, 19:30   #14  
ALES is offline
ALES
Участник
Злыдни
 
220 / 45 (2) +++
Регистрация: 11.08.2004
Цитата:
Сообщение от Falcon
Ну держитесь

.. WHERE ((DATAAREAID=?) AND (SALESID=?)) ORDER BY A.DATAAREAID,A.SALESID,A.LINENUM OPTION(FAST 9)[/CODE]
это точно тот запрос?
"В ней указаны следующие поля:
SalesLine - Stopped = No
SalesTable - Giro money transfer slip on sales invoice = None.
Больше ничего не указано, хотя разумеется, есть скрытые поля ограничений (SalesLine-Type = SalesOrder, SalesLine-Status= Delivered...)"
ps: структуру этих таблиц не меняли перед появлением трабла?
Старый 02.05.2006, 11:32   #15  
perestoronin is offline
perestoronin
Разработчик
Аватар для perestoronin
NavAx Club
 
129 / 18 (1) ++
Регистрация: 06.09.2005
Адрес: г. Красногорск
;)
Цитата:
Сообщение от Falcon
Код:
...
SELECT FROM SALESLINE A(UPDLOCK)
WHERE ((DATAAREAID=?) AND (SALESID=?))
ORDER BY A.DATAAREAID,A.SALESID,A.LINENUM OPTION(FAST 9)
Попробуйте изменить оригинальный запрос (или логику кода) так, чтобы не было нужды сортировать вывод по компаниям (поле DATAAREAID). Я полагаю это наверное лишне, т.к. у Вас в запросе и так стоит стоит условие - выборка по компании (только я не нашел где добавляется эта сортировка в русской локализации). При попытке сортировки по компании могут вылетать даже Enterprise Manager и Обозреватель таблиц.

И еще вопрос, Вам действительно так важна сортировка по номерам строк заказа поле LINENUM. Может ее тоже лучше исключить из запроса в классе SalesFormLetter метод updateQueryBuild
закомментировав строку
Код:
chooseLines.query().dataSourceTable(tableNum(SalesLine)).addSortField(fieldNum(SalesLine, lineNum));
PS. А может проблемы не в Аксапте, а в целостности и исправности дискового массива на котором находится база ?
Интересно, а какая она К и как хорошо там, если не секрет?

Последний раз редактировалось perestoronin; 02.05.2006 в 18:35.
Старый 04.05.2006, 12:59   #16  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,889 / 3165 (113) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от perestoronin
Попробуйте изменить оригинальный запрос (или логику кода) так, чтобы не было нужды сортировать вывод по компаниям (поле DATAAREAID). Я полагаю это наверное лишне, т.к. у Вас в запросе и так стоит стоит условие - выборка по компании (только я не нашел где добавляется эта сортировка в русской локализации). При попытке сортировки по компании могут вылетать даже Enterprise Manager и Обозреватель таблиц.

И еще вопрос, Вам действительно так важна сортировка по номерам строк заказа поле LINENUM. Может ее тоже лучше исключить из запроса в классе SalesFormLetter метод updateQueryBuild
закомментировав строку
Может не стоит убирать сортировки ?
Полагаю это сделано специально под существующие на таблицах индексы. Неявная подсказка оптимизатору базы данных, так сказать. Так как он учитывает порядок полей в запросе по которым делается сортировка и по которым условие where есть.
Старый 28.04.2006, 19:03   #17  
Falcon is offline
Falcon
Восставший
Соотечественники
 
753 / 35 (3) +++
Регистрация: 08.02.2002
Адрес: Pincourt, Quebec, Canada
1. Если select завершается успешно - то дальше все идет нормально, т.е. на следующий день опять 10 минут. И так до следующего затыка. Кстати, сам инвойсинг, даже если селект был 3 часа - проходит быстро и без затычек.
2. З-звенка, тонкий клиент. Пробовал кстати запускать в двухзвенке прямо на сервере - никаких отличий.

Может я глупость скажу, но такое ощущение, что в таблице время от времени появляются "неправильные" записи, на выборку которых тратится уйма времени. Вопрос, отчего они могут стать "неправильными"?...

Спасибо!!!!!!!!!!!!!!!!
Старый 28.04.2006, 19:19   #18  
itfs is offline
itfs
Участник
 
277 / 43 (2) +++
Регистрация: 18.07.2005
Адрес: Moscow
Цитата:
Сообщение от Falcon
1. Если select завершается успешно - то дальше все идет нормально, т.е. на следующий день опять 10 минут. И так до следующего затыка. Кстати, сам инвойсинг, даже если селект был 3 часа - проходит быстро и без затычек.
2. З-звенка, тонкий клиент. Пробовал кстати запускать в двухзвенке прямо на сервере - никаких отличий.
Это была грубая попытка убедиться, что причина не прозаическая, т.е. что это не проблемы с сервером БД и не с пропускной способностью сети. Вроде, все нормально.

QUOTE=Falcon]
Может я глупость скажу, но такое ощущение, что в таблице время от времени появляются "неправильные" записи, на выборку которых тратится уйма времени. Вопрос, отчего они могут стать "неправильными"?...
[/QUOTE]
Ну в принципе, не такая уж глупость, можно и на эту тему подумать. Если индексное полу пусто (NULL), то такая строка соответствующим индексом не индексируется и при полной выборке, индекс использовать некорректно, система вынуждена отключить его использование. Но это очень специфический эффект, за тормоза редко ответственен именно он.

В вашем случае я бы поставил на возникновение конкуренции за таблицы со стороны других процессов. Т.е. этот процесс полного сканирования таблиц да еще и с блокировкой на обновление вполне может встретить много трудностей на своем пути.

С уважением, itfs.
Старый 29.04.2006, 02:23   #19  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от itfs
Если индексное полу пусто (NULL), то такая строка соответствующим индексом не индексируется и при полной выборке, индекс использовать некорректно, система вынуждена отключить его использование
Мы говорим об MSSQL? Какой версии? В любом случае - аксапта varchar поля null значениями не заполняет

Есть два предложения
- кластерный индекс по (DataAreaId, SalesId)
- отключение option fast на уровне конфигурации (знаю, что радикально, однако от этого, насколько мне известно, еще никто не умирал)

ну и своевременное обновление статистики, разумеется
__________________
-ТСЯ или -ТЬСЯ ?
Старый 03.05.2006, 18:32   #20  
itfs is offline
itfs
Участник
 
277 / 43 (2) +++
Регистрация: 18.07.2005
Адрес: Moscow
Цитата:
Сообщение от Vadik
В любом случае - аксапта varchar поля null значениями не заполняет
Ваша правда, и про varchar, и про не заполняет, везде стоит заполнение по default и всюду not Null constraints
Теги
ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Каков процент внедрений "стандартной" поставки системы Аксапта? coolibin DAX: Прочие вопросы 17 10.02.2009 12:45
Запросы в Аксапта ibc DAX: Программирование 5 08.08.2005 22:47
Аксапта падает при открытии журнала табелей Grib DAX: Администрирование 10 30.03.2004 09:21
Научите программировать в Аксапта на лету. Плиз. Hobo DAX: Программирование 1 03.03.2004 15:00
Адрес клиента в Аксапта 3.0 кто-нить вводил? Venera DAX: Функционал 8 05.11.2003 19:44

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 12:28.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.