02.07.2008, 13:21 | #1 |
Участник
|
delete_from performance
Всем привет.
Занимаюсь оптимизацией импорта большого колиства записей из внешней системы в АХ4.0. Перед импортом нужно очистить таблицу. Код: ForecastSales sales; ; ttsbegin; sales.skipDeleteActions(true); sales.skipDeleteMethod(true); delete_from sales; ttscommit; В чем причина такой нелинейости? Спасибо. П.С. direct SQL спасает, конечно.
__________________
-- regards, Oleksandr |
|
02.07.2008, 13:25 | #2 |
Боец
|
Причина в том что SQL кэширует удаление\апдейт для возможности отката транзакции в случае ошибки, поэтому и наблюдается затухание скорости в геометрической прогрессии. , соответственно чем больше записей - тем больше тормоза.
Edit: Чтобы затухание не возникало, удаляйте записи по-одной в рамках транзакции ttsbegin\ttscommit. Последний раз редактировалось DSPIC; 02.07.2008 в 13:29. |
|
02.07.2008, 13:44 | #3 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: e@gle (2). |
02.07.2008, 13:46 | #4 |
Пенсионер
|
Цитата:
Сообщение от DSPIC
Причина в том что SQL кэширует удаление\апдейт для возможности отката транзакции в случае ошибки, поэтому и наблюдается затухание скорости в геометрической прогрессии. , соответственно чем больше записей - тем больше тормоза.
Edit: Чтобы затухание не возникало, удаляйте записи по-одной в рамках транзакции ttsbegin\ttscommit.
__________________
Законы природы еще никто не отменял! А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ |
|
02.07.2008, 13:59 | #5 |
Участник
|
Добрый день!
Цитата:
Цитата:
X++: int i = -1* maxuint(); while(i < maxuint()) { delete_from Table where Table.RecId<i; i = i + 10000; }
__________________
Жить все веселей!.. AX3SP3CU1 |
|
02.07.2008, 14:05 | #6 |
Member
|
Цитата:
Сообщение от Oleksandr
...
В чем причина такой нелинейости? ... Там индексов 9 штук. От удаления по одной записи тоже чуда ожидать не стоит, мягко говоря.
__________________
С уважением, glibs® |
|
02.07.2008, 14:08 | #7 |
Участник
|
Только что проверил на таблице с 370 000 записей. delete_from - 367 секунд. while select forupdate - 472 секунды.
|
|
02.07.2008, 14:11 | #8 |
Боец
|
Цитата:
Edit: Чтобы затухание не возникало, удаляйте записи по-одной в рамках транзакции ttsbegin\ttscommit.
Цитата:
...или придумвйте критерий и удаляйте по частям, например по 10 000 записей.
а: X++: new SqlDataDictionary().tableTruncate(tableNum(ForecastSales )); |
|
02.07.2008, 14:15 | #9 |
злыдень
|
Всем ПРВТ!
Я только на секундочку.., хочу bbcode посмотреть как реализовывать) А где ещё тестить ббкоде как на не любомом некогда форуме? Чтобы зазря буквы не тратить.. X++: skipTTScheck(1); //отключит транзакции и удалит пулей (ttsbegin/commit - надо будет стереть) skipDataBaseLog(1); //отключит лог X++: tableTruncate// удаляет ссылку на данные(мгновенно), восстановить нельзя будет даже через бэкап
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ |
|
|
За это сообщение автора поблагодарили: Qaz Qwerty (1). |
02.07.2008, 14:16 | #10 |
Боец
|
Цитата:
От удаления по одной записи тоже чуда ожидать не стоит, мягко говоря.
Цитата:
олько что проверил на таблице с 370 000 записей. delete_from - 367 секунд. while select forupdate - 472 секунды.
|
|
02.07.2008, 14:21 | #11 |
злыдень
|
2 Mazy (или кто сейчас у руля?)
тег code - не закрыт у тебя, из-за этого используется не моноширинный шрифт и исходники X++ - разъезжаются.
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ |
|
02.07.2008, 15:04 | #12 |
Участник
|
Цитата:
Теперь все чики-пики, несколько секунд. Хотя вопрос все-равно интересный - о нелинейности, даже с исполнением триггеров и делит - экшинов. Спасибо за ответы.
__________________
-- regards, Oleksandr |
|
02.07.2008, 15:06 | #13 |
Участник
|
Цитата:
Сообщение от DSPIC
Ну, примерно это я и имел ввиду. ;-) Понятно, что если миллион записей то по-одной удалять слишком дорого.
а: X++: new SqlDataDictionary().tableTruncate(tableNum(ForecastSales ));
__________________
-- regards, Oleksandr |
|
Теги |
ax4.0, delete_from, truncate, производительность |
|
|