|  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, производительность | 
|  | 
| 
 |