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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.06.2005, 09:56   #1  
Константин! is offline
Константин!
Участник
 
180 / 10 (1) +
Регистрация: 13.04.2005
Адрес: Казань
Коллеги подскажите, пожалуйста от чего зависит время выполнения операции INSERT.
На днях занялся изучением скорости работы системы с помощью клиент монитора и Code Coverage. Помимо забытых ключей в основных кодеюнитах (время выполнения операции Find доходит до 1400 ms) заметил характерную особенность, что самое узкое место находится в ф-ях 22 CU Ф-ях InsertValueEntry и InsertItemLedgerEntry, но что характерно при учете отгрузки время на эти операции находится в пределах 300-400 мс а при получение транзита время повышается до 600 мс. Отсюда вопрос: от чего это может зависеть и как можно уменьшить это время?

Сервер NAtiv 3.70b размер базы 17 Гб
ItemLedgerEntry= 870146 записей
ValueEntry=1307904 записей
Тестирование проходило на накладных кол-во записей в которых >50 шт
Старый 20.06.2005, 09:58   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
навскидку:
1. уменьшить количество ключей
2. уменьшить количество flowFields, которые зависят от данной таблицы
__________________
полезное на axForum, github, vk, coub.
Старый 20.06.2005, 10:18   #3  
Константин! is offline
Константин!
Участник
 
180 / 10 (1) +
Регистрация: 13.04.2005
Адрес: Казань
Спасибо.
А почему зависит от вида учитываемого документа(кол-во активных ключей и flowFields постоянно)
Как найти нейспользуемые в донной конфигурации flowFields и ключи?
Старый 20.06.2005, 10:37   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Константин!
А почему зависит от вида учитываемого документа
Потому что код, реализующий учет, разный.
Но лезть в код для оптимизации? Так стоит делать в последнюю очередь, по-моему.
__________________
полезное на axForum, github, vk, coub.
Старый 20.06.2005, 10:38   #5  
navi-prog is offline
navi-prog
Участник
 
8 / 10 (1) +
Регистрация: 16.05.2005
Цитата:
Сообщение от Константин!
Спасибо.
А почему зависит от вида учитываемого документа(кол-во активных ключей и flowFields постоянно)
Как найти нейспользуемые в донной конфигурации flowFields и ключи?
Полагаю что при учета транзита вставляются две записи (расход с транзитного склада и приход) - поэтому время возрастает вдвое .

Поиск неиспользуемых ключей - к сожалению только опытным путем - enable/disable на ключи или снятие галки Mantain на Sift Level List.
Старый 20.06.2005, 10:59   #6  
Константин! is offline
Константин!
Участник
 
180 / 10 (1) +
Регистрация: 13.04.2005
Адрес: Казань
for navi-prog
Конечно понятно что две записи вставляется, но я имею ввиду время выполнения отдельно взятого оператора INSERT.
Старый 20.06.2005, 11:27   #7  
Константин! is offline
Константин!
Участник
 
180 / 10 (1) +
Регистрация: 13.04.2005
Адрес: Казань
Если клиен монитор фильтрануть по TableName=Стоимость Операций
и Function Name=INSERT то получаем такую большую амплитуду изменения занчений времени в течение выполнения одной операции Учет Отгрузки Транзитного Перемешения (0-391мс) и все эти операций Insert выполняются в одной в ф-и на одном операторе.
Почему такой разброс?
Старый 20.06.2005, 12:08   #8  
Константин! is offline
Константин!
Участник
 
180 / 10 (1) +
Регистрация: 13.04.2005
Адрес: Казань
Обнаружил закономерность что строки в клиент маниторе с большим временем вставки имеют большие значение в полях
Disk Read,DiskWrite что значат эти поля и в каких еденицах их мереют.
т.е что значит такая запись
<div class='XPPtop'>X++</div><div class='XPP'>
EntryNo. |TableName          |FunctionName   |ElapsedTime (ms) |DiskReads| DiskWrites
59526    |Стоимость Операция |INSERT         |187              |23       |76
59657    |Стоимость Операция |INSERT         |63               |7        |7</div>
за 187 мс диск прочитал 23 ед.измер и записал 76 ед.измер
Старый 20.06.2005, 12:22   #9  
Wizard_imported is offline
Wizard_imported
Участник
 
157 / 10 (1) +
Регистрация: 25.11.2004
Время выполнения операции вставки зависит от многих причин...
1. Надо выделить пространство для новой записи, разместить на странице...
2. Надо внести изменения в SQL ключи (или нативные ключи, они тоже должны как-то храниться)
3. Надо перестроисть SIFT
...
Такая разница может быть обусловлена значениями полей, входящих в индексы. Думаю, в первом случае селективность, скажем, номера товара была плохой (много записей с таким значением), во втором - получше (записей было меньше - отсюда и меньшее количество дисковых опреаций)
Для SQL условные единицы измерения, если не ошибаюсь - страницы. В байты переводится в зависимости от настройки размера этих страниц.
Старый 20.06.2005, 13:02   #10  
Константин! is offline
Константин!
Участник
 
180 / 10 (1) +
Регистрация: 13.04.2005
Адрес: Казань
Все понятно занчит, что ускорить втсавку в стаблицы надо Отключать определенные FlouFields и оптемизировать ключи (что и советовал Mazzy).
Объесните пожалуста суть всех дополнительных галочек в ключе т.к я это все понимаю очень поверхностно и могу чего нибуть испортить.

MaintainSQLIndex-?
MaintainSIFTIndex-?
SIFT Levels To Maintain-?
Старый 20.06.2005, 13:28   #11  
Галина is offline
Галина
Участник
 
1,132 / 28 (3) +++
Регистрация: 01.07.2003
Если уберете flowfield поля-у вас не будет информации по этим полям и какие то отчеты просто не выполнятся. Про
MaintainSQLIndex-?
MaintainSIFTIndex-?
SIFT Levels To Maintain-? не знаю-это для sql.
Чтобы оптимизировать ключи и убрать flow field поля-вы должны лезть в таблицы и там править. Абсолютно не верный путь. Ключи же не просто так создаются-если вы знаете где используется информация отсортированная по ключам -вперед правьте а после не забудьте исправить в отчетах и т.д. А поля flowfield -вообще трогать нужно осторожно. А то получите скорость при insert а после будете часами ждать выполнения отчетов и заданий.
Старый 20.06.2005, 13:55   #12  
Scorpie is offline
Scorpie
Участник
 
239 / 10 (1) +
Регистрация: 25.10.2004
Адрес: Moskow
Цитата:
Сообщение от Константин!
Все понятно занчит, что ускорить втсавку в стаблицы  надо Отключать определенные FlouFields и оптемизировать ключи (что и советовал Mazzy).
Объесните пожалуста суть всех дополнительных галочек в ключе т.к я это все понимаю очень поверхностно и могу чего нибуть испортить.

MaintainSQLIndex-?
MaintainSIFTIndex-?
SIFT Levels To Maintain-?
FlowFields отключать не нужно. Они не обновляются, не пересчитываются в момент добавления, модификации или удаления записей
Старый 20.06.2005, 14:00   #13  
Константин! is offline
Константин!
Участник
 
180 / 10 (1) +
Регистрация: 13.04.2005
Адрес: Казань
Супер , тогда как усткорить эту операцию
Старый 20.06.2005, 14:03   #14  
Scorpie is offline
Scorpie
Участник
 
239 / 10 (1) +
Регистрация: 25.10.2004
Адрес: Moskow
Цитата:
Сообщение от Константин!
Все понятно занчит, что ускорить втсавку в стаблицы  надо Отключать определенные FlouFields и оптемизировать ключи (что и советовал Mazzy).
Объесните пожалуста суть всех дополнительных галочек в ключе т.к я это все понимаю очень поверхностно и могу чего нибуть испортить.

MaintainSQLIndex-?
MaintainSIFTIndex-?
SIFT Levels To Maintain-?
SIFT Levels to maintain - самый быстрый путь решения вопроса. Не обязательно панацея, но поможет сильно.
Рассмотрим 2 стандартных ключа для 17й таблицы:
1) G/L Account No.,Business Unit Code,Global Dimension 1 Code,Global Dimension 2 Code,Close Income Statement Dim. ID,Posting Date,Agreement No.
2)G/L Account No.,Business Unit Code,Global Dimension 1 Code,Global Dimension 2 Code,Posting Date,Agreement No.

Набор SIFT полей для данных ключей одинаковый :
Amount,Debit Amount,Credit Amount,Additional-Currency Amount,Add.-Currency Debit Amount,Add.-Currency Credit Amount

Итак. когда происходит запись в таблицу все 6 суммовых полей должны быть пересчитаны для всех уровней обоих ключей.
Несложно заметить что первые 4 уровня - "G/L Account No.,Business Unit Code,Global Dimension 1 Code,Global Dimension 2 Code" в обоих ключах одинаковы... соответственно идём в свойство 2го ключа и отключаем для этих 4х уровней галочку Maintain. Т.е. убираем элементарное дублирование...

Что произойдёт когда в коде будет явно использоваться 2й ключ и пойдёт расчёт CALCSUM(Amount) по полям "G/L Account No.,Business Unit Code,Global Dimension 1 Code" !? Движок определив что данный уровень для данного ключа отключён, возьмёт расчитанные суммы из первого ключа - ведь они там хранились бы одинаковые...

Вообщем это самый быстрой способ немного ускориться абсолютно никак не рискуя потерять в производительности...
Старый 20.06.2005, 15:43   #15  
Галина is offline
Галина
Участник
 
1,132 / 28 (3) +++
Регистрация: 01.07.2003
Scorpie.
А это все про sql версию?
Старый 20.06.2005, 16:03   #16  
Константин! is offline
Константин!
Участник
 
180 / 10 (1) +
Регистрация: 13.04.2005
Адрес: Казань
Это относится и к Nativ серверу.
Старый 20.06.2005, 16:09   #17  
Галина is offline
Галина
Участник
 
1,132 / 28 (3) +++
Регистрация: 01.07.2003
Странно а везде где я читала -везде написано вроде про sql.
Старый 20.06.2005, 16:38   #18  
Константин! is offline
Константин!
Участник
 
180 / 10 (1) +
Регистрация: 13.04.2005
Адрес: Казань
Вопрос в тему, на что повлияеет снятие галочек MaintainSQLIndex,
MaintainSIFTIndex, на ключах неимеющих SIFT полей?
Старый 21.06.2005, 11:10   #19  
Scorpie is offline
Scorpie
Участник
 
239 / 10 (1) +
Регистрация: 25.10.2004
Адрес: Moskow
Цитата:
Сообщение от Галина
Scorpie.
А это все про sql версию?
Только для SQL сервера. На Native эти настройки никак не влияют. Они меняются, сохраняются в объектах но эффекта не будет
Старый 21.06.2005, 11:14   #20  
Scorpie is offline
Scorpie
Участник
 
239 / 10 (1) +
Регистрация: 25.10.2004
Адрес: Moskow
Цитата:
Сообщение от Константин!
Вопрос в тему, на что повлияеет снятие галочек MaintainSQLIndex,
MaintainSIFTIndex, на ключах неимеющих SIFT полей?
Для ключей не имеющих SIFT полей.
MaintainSIFTIndex не на что не повлияет.
MaintainSQLIndex - соответсвующий ключу индекс таблицы будет физически удалён на уровне SQL. Соответственно когда будет использоваться данный ключ серверу придётся сортировать данные без индекса что для большого кол-ва исходных данных естественно значительно медленее.
 


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

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

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