|
|
|
|
#1 |
|
Участник
|
Э-э-э... Надеюсь не на рабочей базе?
|
|
|
|
|
#2 |
|
Участник
|
Проверьте выполнение на толстом и тонком клиенте
На Axapta 3.0 SP3 в подобном коде на толстом клиенте не происходит замедления процесса создания заказов, в то время как на тонком скорость постепенно падает |
|
|
|
|
#3 |
|
MCTS
|
Цитата:
Попробуйте делать коммит хотя бы пачками, по 1000 штук например...
Если у вас там выше (для общего цикла по файлу) нет общей обрамляющей транзакции, тогда в базе будет каша, часть строк создаться, часть нет. Я бы вообще сделал в виде: X++: ttsbegin; { } ttscommit; Цитата:
А вот это точно замедлит работу.
Хотя для отладки можно и так попробовать. Последний раз редактировалось Eldar9x; 05.03.2009 в 11:34. |
|
|
|
|
#4 |
|
Участник
|
Цитата:
![]() Не говоря уже о тех несчастных пользователях, которые ждут окончания блокировки чтобы продолжить свою никчемную работу по обработке текущих заказов, а также любых складских операций (из-за блокировки inventSum)
|
|
|
|
|
#5 |
|
MCTS
|
Цитата:
И будет чертовски обидно, если после нескольких часов работы транзакция откатится из-за недостатка места под transaction log
Не говоря уже о тех несчастных пользователях, которые ждут окончания блокировки чтобы продолжить свою никчемную работу по обработке текущих заказов, а также любых складских операций (из-за блокировки inventSum) Хотя было же уже предложено поделить на несколько файлов. А по поводу блокировок, такие операции не обязательно делать в час-пик. |
|
|
|
|
#6 |
|
Участник
|
Цитата:
А ведь действительно - импорт в этой ветке не предполагает, что данные уже могут существовать. Т.е. повторный импорт не предусмотрен. Тогда согласен - лучше сделать в одну транзакцию. Хотя более правильным было бы сделать по другому: 1. программист должен учитывать, что импорт одного и того же файла может выполняться несколько раз. либо в результате ошибки оператора, либо еще по каким причинам. 2. программист должен проверить, не была ли уже заимпортирована запись. 2.1. если уже существует, то 2.1.1. если запись была изменена, то либо ошибка, либо варнинг, либо overwrite в зависимости от настроек и логики импорта 2.1.2. если запись не изменена, то пропустить запись 2.2. если запись еще не существует, то создать ее. тогда можно выполнять импорт мелкими кусками и не беспокоится о нагрузке. Но только придется побеспокоится о каком-то идентификаторе, который позволит однозначно сопоставить импортируемые и уже существующие в Аксапте данные. |
|
|
|
|
#7 |
|
Administrator
|
bobski, есть предположение, что у вас список неиспользованных номеров в номерной серии растет сильно. Смотрите, серия непрерывная, при выделении номера вы говорите makeDecisionLater = true (второй параметр в NumberSeq::newGetNum()), но нигде не отмечаете выделенный номер как использованный. Скорее всего, у вас NumberSequenceList вырастает до безбожных размеров. А так как он проверяется при каждом вызове NumberSeq::num(), производительность падает потихоньку.
Проверьте NumberSequenceList. У вас там должна быть куча номеров в статусе Active. Кроме того, добавьте вызов numberSeq.used(), либо вызывайте newGetNum() с makeDecisionLater = false. Кстати, в джобе из первого сообщения такой проблемы нет, так как там makeDecisionLater = false.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
|
|
| За это сообщение автора поблагодарили: mazzy (2), Logger (1). | |
|
|
#8 |
|
Administrator
|
А еще в 4.0 есть волшебный классик \System Documentation\Classes\RecordInsertList. Специально так сказать сделанный давно давно для массовых вставок. Конечно в будущих версиях его кажется убрали... Но в 4.0 его еще можно заюзать.
Смысл в том, чтобы вместо insert() использовать RecordInsertList.add(). А по завершению - RecordInserList.insertdatabase(). И еще. Может все-таки откажетесь от непрерывной номерной серии и поставите ей предварительное выделение (а может и ручками сами посчитаете номера)? Хотя бы на время импорта.
__________________
Возможно сделать все. Вопрос времени |
|
|
|
|
#9 |
|
Участник
|
Цитата:
Сообщение от sukhanchik
А еще в 4.0 есть волшебный классик \System Documentation\Classes\RecordInsertList. Специально так сказать сделанный давно давно для массовых вставок. Конечно в будущих версиях его кажется убрали... Но в 4.0 его еще можно заюзать.
Смысл в том, чтобы вместо insert() использовать RecordInsertList.add(). А по завершению - RecordInserList.insertdatabase(). И еще. Может все-таки откажетесь от непрерывной номерной серии и поставите ей предварительное выделение (а может и ручками сами посчитаете номера)? Хотя бы на время импорта. |
|
|
|
|
#10 |
|
----------------
|
что-то мы все тут гадаем и гадаем...
может пора уже посмотреть SQL трейс и загрузку диска\памяти\проца на локальной машинке? |
|
|
|
| За это сообщение автора поблагодарили: mazzy (2). | |
|
|
#11 |
|
Участник
|
|
|
|
| Теги |
| asciio, createline, заказ, затяжка, скорость |
|
|
|