AXForum  
Go Back   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

 
 
Thread Tools Search this Thread Display Modes
Old 06.06.2007, 10:19   #1  
Greggy_imported is offline
Greggy_imported
Участник
Greggy_imported's Avatar
 
291 / 10 (1) +
Join Date: 24.09.2004
Здравствуйте! Очень критичный вопрос! У нас такая ситуация при перерасчете журнала зарплаты если там например человек 30 ... времени занимает оооочень много ... плюс к этому на сервере бешенно растет лог транзакций ... не знаете в чем причина ... мб мы что то не так делаем? например 10 челоек из 30 может расчитываться больше 2 часов!!!
Old 06.06.2007, 10:32   #2  
andrevk is offline
andrevk
Участник
 
145 / 10 (1) +
Join Date: 23.11.2006
Это значит что у вас большое количество sumindexfields в таблице Payroll Journal Line.
Еще скорее всего у вас модель восстановления SQL Servera - Full.
Можно на время расчета зарплаты перейти на модель Simple.
Также сделайте Оптимизацию таблицы Payroll Journal Line.
Old 06.06.2007, 10:34   #3  
Greggy_imported is offline
Greggy_imported
Участник
Greggy_imported's Avatar
 
291 / 10 (1) +
Join Date: 24.09.2004
Quote:
Originally Posted by Andreblack View Post
Это значит что у вас большое количество sumindexfields в таблице Payroll Journal Line.
Еще скорее всего у вас модель восстановления SQL Servera - Full.
Можно на время расчета зарплаты перейти на модель Simple.
Также сделайте Оптимизацию таблицы Payroll Journal Line.
по sumindexfields может быть ... я ничего там не трогал ... значит коряво спроектирована таблица ... модель Full ... делал Simple никак не повлияло на скрость работы ... оптимизацию делал
Old 06.06.2007, 10:41   #4  
andrevk is offline
andrevk
Участник
 
145 / 10 (1) +
Join Date: 23.11.2006
Посмотрите сколько всего индексов в таблице Payroll Journal Line. Каждый индекс сильно тормозит работу. Попытайтесь найти и отключить ненужные. Либо отключите обслуживание индексов на Sql Servera
Еще мне помогало Rebuild индексов средствами Sql Servera
Old 07.06.2007, 10:34   #5  
konrad_imported is offline
konrad_imported
Участник
 
183 / 10 (1) +
Join Date: 25.11.2004
С суммовых индексов поснимать галку - обязательно. Для журналов суммовые индексы на SQL-таблицах не только не помогают, а даже вредят. Модель восстановления - пусть Full будет. Когда-нибудь пригодится.
Желательно также отключить создание SQL-ключей, используемых только в отчетах. При пустом состоянии журнала запустите оптимизацию таблицы 14820 средствами Навижн - пускай ее причешет слегка.
Также рекомендую пробежаться по видам расчета в настройках и поснимать галки в неиспользуемых в вашей организации элементах, а из расчетных групп удалить неиспользуемые види расчетов.
И еще. Ставите галку "Пересортировать журнал после расчета" ? Тоже тормозит сильно.
В прилагаемом файле - ключи с моей боевой базы. 800 человек рассчитывается за 15 минут. Правда, тут еще и железо, несомненно, влияет. Также у Вас могут быть отчеты, использующие отключенные у меня ключи.
Attached Files
File Type: xls 14820___index.xls (19.0 KB, 45 views)
Old 07.06.2007, 11:44   #6  
Greggy_imported is offline
Greggy_imported
Участник
Greggy_imported's Avatar
 
291 / 10 (1) +
Join Date: 24.09.2004
Quote:
Originally Posted by konrad View Post
С суммовых индексов поснимать галку - обязательно. Для журналов суммовые индексы на SQL-таблицах не только не помогают, а даже вредят. Модель восстановления - пусть Full будет. Когда-нибудь пригодится.
Желательно также отключить создание SQL-ключей, используемых только в отчетах. При пустом состоянии журнала запустите оптимизацию таблицы 14820 средствами Навижн - пускай ее причешет слегка.
Также рекомендую пробежаться по видам расчета в настройках и поснимать галки в неиспользуемых в вашей организации элементах, а из расчетных групп удалить неиспользуемые види расчетов.
И еще. Ставите галку "Пересортировать журнал после расчета" ? Тоже тормозит сильно.
В прилагаемом файле - ключи с моей боевой базы. 800 человек рассчитывается за 15 минут. Правда, тут еще и железо, несомненно, влияет. Также у Вас могут быть отчеты, использующие отключенные у меня ключи.
это именно про перерасчет? причем приходится менять руками цифры а потом запускать перерасчет ... а расчет с нуля у нас тоже быстро работает ...
Old 07.06.2007, 12:10   #7  
konrad_imported is offline
konrad_imported
Участник
 
183 / 10 (1) +
Join Date: 25.11.2004
А перерасчет прозводится, как я понимаю, по отфильтрованной по какому-то признаку группе сотрудников, и раз вручную меняются цифры - то без предварительной очистки строк? Тогда беда. И ничего хорошего я там придумать не смог. Уж больно хитро 14800 кодеюнит работает по вставке записей. Тут проще поштучно сотрудников перерасчитывать. Ручную коррекцию сделал - пересчитал. И к следующему сотруднику. Наши только так и делают. И присланные мной индексы именно для группового расчета не оптимальны.
Old 07.06.2007, 12:43   #8  
Greggy_imported is offline
Greggy_imported
Участник
Greggy_imported's Avatar
 
291 / 10 (1) +
Join Date: 24.09.2004
путем различных манипуляций с таблицей Payroll Journal Line и SQL сервером ... удалось добиться скорости перерасчета 2 минуты на человека ... но все равно это много
Old 07.06.2007, 18:50   #9  
Corleone is offline
Corleone
Участник
 
355 / 10 (1) +
Join Date: 27.05.2004
Location: London
Quote:
Originally Posted by Greggy View Post
путем различных манипуляций с таблицей Payroll Journal Line и SQL сервером ... удалось добиться скорости перерасчета 2 минуты на человека ... но все равно это много
Была похожая проблема, обрати внимание на CU 14800 функцию MoveLines.
Я переделал так:


WITH PayrollJnlLine DO BEGIN
RESET;
SETRANGE(Template,Template);
SETRANGE("Batch Name","Batch Name");

JournalDimension.RESET;
JournalDimension.SETRANGE("Table ID",14820);
JournalDimension.SETRANGE("Journal Template Name",Template);
JournalDimension.SETRANGE("Journal Batch Name","Batch Name");

IF IncludCurLine THEN
SETFILTER("Line No.",'>=%1',"Line No.")
ELSE
SETFILTER("Line No.",'>%1',"Line No.");
IF FIND('+') THEN
BEGIN
REPEAT
PayrollJnlLine2 := PayrollJnlLine;
PayrollJnlLine2."Line No." := "Line No." + 10000;
PayrollJnlLine2.INSERT;

JournalDimension.SETRANGE("Journal Line No.","Line No.");
IF JournalDimension.FIND('+') THEN
REPEAT
JournalDimension2 := JournalDimension;
JournalDimension2."Journal Line No." := PayrollJnlLine2."Line No.";
// JournalDimension.DELETE;
JournalDimension2.INSERT;
//
UNTIL JournalDimension.NEXT(-1) = 0;
// UNTIL JournalDimension.FIND('+');

DELETE(TRUE);
// UNTIL NEXT(-1) = 0;
UNTIL FIND('+');
END;
END;
Old 07.06.2007, 19:03   #10  
Corleone is offline
Corleone
Участник
 
355 / 10 (1) +
Join Date: 27.05.2004
Location: London
Quote:
Originally Posted by konrad View Post
И ничего хорошего я там придумать не смог. Уж больно хитро 14800 кодеюнит работает по вставке записей.
MoveLines двигает весь журнал на 10000, двигая при этом измерения. Но реализовано это как-то криво. Попробуй вставить мой код из предыдущего поста.
Old 08.06.2007, 08:18   #11  
Greggy_imported is offline
Greggy_imported
Участник
Greggy_imported's Avatar
 
291 / 10 (1) +
Join Date: 24.09.2004
в конце приведенного вами кода

DELETE(TRUE);
// UNTIL NEXT(-1) = 0;
UNTIL FIND('+');
END;
END;

не совсем понятна строчка UNTIL FIND('+'); - как мне кажется при таком раскладе корректно работать не будет ....

неправильно немного ответил - этот ответ относится к последнему сообщения Gmc
Old 08.06.2007, 13:21   #12  
Corleone is offline
Corleone
Участник
 
355 / 10 (1) +
Join Date: 27.05.2004
Location: London
Quote:
Originally Posted by Greggy View Post
в конце приведенного вами кода

DELETE(TRUE);
// UNTIL NEXT(-1) = 0;
UNTIL FIND('+');
END;
END;

не совсем понятна строчка UNTIL FIND('+'); - как мне кажется при таком раскладе корректно работать не будет ....

неправильно немного ответил - этот ответ относится к последнему сообщения Gmc
DELETE(TRUE);
UNTIL FIND('+');

Так там же удаление идет, цикл просто пока все не удалится...
Old 08.06.2007, 14:26   #13  
konrad_imported is offline
konrad_imported
Участник
 
183 / 10 (1) +
Join Date: 25.11.2004
У меня тут такая идея появилась.
А если поправить код так, чтобы использовать DeleteAll по завершении цикла вместо поштучного удаления внутри?
Не пробовали? Вроде побыстрее должно выйти.
Old 08.06.2007, 14:30   #14  
Corleone is offline
Corleone
Участник
 
355 / 10 (1) +
Join Date: 27.05.2004
Location: London
Quote:
Originally Posted by konrad View Post
У меня тут такая идея появилась.
А если поправить код так, чтобы использовать DeleteAll по завершении цикла вместо поштучного удаления внутри?
Не пробовали? Вроде побыстрее должно выйти.
Основные тормоза не из-за делета, а из-за кривого пермещения измерений.
Old 09.06.2007, 12:00   #15  
konrad_imported is offline
konrad_imported
Участник
 
183 / 10 (1) +
Join Date: 25.11.2004
Поменял функцию. Поставил код с DeleteAll. И так как у меня измерения на сотрудниках не используются (и не будут) - выкинул из кода манипуляции с измерениями.
Пересчет 860 сотрудников без очистки - 4 минуты на тестовом сервере. Вообще фантастика. На боевом летать теперь будет.
GMС, спасибо за наводку на идею!
Old 09.06.2007, 13:19   #16  
Greggy_imported is offline
Greggy_imported
Участник
Greggy_imported's Avatar
 
291 / 10 (1) +
Join Date: 24.09.2004
Quote:
Originally Posted by konrad View Post
Поменял функцию. Поставил код с DeleteAll. И так как у меня измерения на сотрудниках не используются (и не будут) - выкинул из кода манипуляции с измерениями.
Пересчет 860 сотрудников без очистки - 4 минуты на тестовом сервере. Вообще фантастика. На боевом летать теперь будет.
GMС, спасибо за наводку на идею!
Хотелось бы знать конфигурацию вашего тестового сервера ... и еще уточнить что вы подразумеваете под перерасчетом ... перерасчет у нас это когда при расчитаном журнале меняем какие - либо суммы (в нашем случае мы меняем сумму К ВЫПЛАТЕ) и заново запускаем расчет. Как мы не бились ничего путнего не смогли сделать ....
Old 09.06.2007, 15:11   #17  
konrad_imported is offline
konrad_imported
Участник
 
183 / 10 (1) +
Join Date: 25.11.2004
Тестовый сервер - обычная рабочая станция, 4 гига мозгов, двухядерный процессор 3000 Мгц, два идишных диска по 100Гб
У меня механизм такой.
Из внешних источников в журнал расчета ЗП закачиваются "внешние" проводки ряда начислений-удержаний. От 4 до 16 проводок (строк) по сотруднику. Далее эапускается расчет без очистки журнала. При расчете создается еще порядка 5-15 строк (расчетных элементов) на сотрудника, в ряде расчетных элементов которых используются закачанные ранее внешние проводки.
Далее при выверке могут правиться ( и правятся) суммы на каких-либо расчетных элементах (кроме закачанных из внешних источников). Далее в штатном режиме происходит перерасчет исправленного сотрудника без очистки. Но в данном тесте штатный "поштучный" перерасчет я не использовал. На паре десятков пиплов поменял суммы и запустил групповой перерасчет по всему журналу без очистки. (правда, и без пересортировки).
Old 09.06.2007, 15:29   #18  
Corleone is offline
Corleone
Участник
 
355 / 10 (1) +
Join Date: 27.05.2004
Location: London
Quote:
Originally Posted by Greggy View Post
Как мы не бились ничего путнего не смогли сделать ....
Значит не судьба.
Old 12.06.2007, 12:13   #19  
Галина is offline
Галина
Участник
 
1,132 / 28 (3) +++
Join Date: 01.07.2003
Quote:
Originally Posted by Gmc View Post
DELETE(TRUE);
// UNTIL NEXT(-1) = 0;
UNTIL FIND('+');
END;
END;
Не пойму. Посмотрела код. У меня в стандарте такой же код, как вы приводите. Кроме одной строки:
в стандарте эта строка:
// UNTIL NEXT(-1) = 0;
вы предлагаете поменять на
UNTIL FIND('+');
Вы для какой версии приводите код?
Old 12.06.2007, 13:37   #20  
Галина is offline
Галина
Участник
 
1,132 / 28 (3) +++
Join Date: 01.07.2003
Возник вопрос правда не совсем тему.
Объем зарплатной базы с января этого года составлял 6 гб. Прочитав тему - убрала с Зарпл.ЖурналСтроки галки с MainSiftIndex. Решила убрать эти же галки и с Зарпл.КнигиОперации. Объем базы составил 1.4 гб.
Я в шоке. 4 гб - составляли ключи?
И теперь собственно вопрос. Чем мне это грозит? В принципе flow-field поля в Зарплате не используются-как в основном Навижине. Поэтому мне кажется ничем не грозит.
 


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 23:56.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.